2012-04-26 11 views
16

、私は当然のことながら、私は取得するには、このフィールドを必要とするWordPress + Multisite:ネットワーク管理者の新しいサイトの追加フォームにカスタムブログオプションを追加するには?私はカスタマイズてるWordPressのマルチサイトインストールで

Network Admin > Sites > Add New

に配置されて、新しいブログサイトを作成するための入力フォームに簡単なテキストフィールドを追加する必要がありますそのフォームの他のメタデータとともに保存されます。{new_blog_prefix}_optionsテーブル

私は特にこれを達成するための最も単純で、最も単純な、そして/または正しい方法(つまりWordPress Way)に興味がありますが、私は働く道であるために解決します™!私の研究で

これまでのところ、私が遭遇した数々の行き止まり:

  • 設定API - [WP Codex]

    私の知る限り、設定API (A )はネットワーク管理セクションでは機能しません(ただし、最近のバージョンのWPでは変更されている可能性があります)。さらに(b)ダッシュボードのSettingsセクションに画面を追加/変更できるようです。

  • wpmu_optionsフック - [Hooks DB]

    は、ネットワーク設定画面にオプションを追加するために排他的にフックであると思われます。

  • add_site_option/add_blog_option - [WP Codex]

    私が見つけることができる最も近いです。 {blogsite_prefix}_optionsテーブルにサイト固有のオプションを追加することは可能ですが、Adminフォームにオプションを追加することはまだ役に立ちません。

だからダイスはありません。どんな助けもありがとう!

答えて

27

[新しいサイトの追加]ページのsource codeを見ると、WordPressがこの目的のためのフックを提供していないことがわかります。もちろん、自分でフックを追加することは可能ですが、一般的に悪い練習 WordPressのコアを編集することです。

ただし、提出されてすべての情報が存在する場合、このページは機能wpmu_create_blog()を呼び出します。

do_action('wpmu_new_blog', $blog_id, $user_id, $domain, $path, $site_id, $meta); 

ブログがすでに作成されている。この時点で、この機能で呼ばれるフック、すなわちアクションwpmu_new_blogがあります。しかし、このアクションにフックしてデータベースに保存することで、フィールドが送信されたかどうかを検出できます。私たちは、プラグインファイル(またはテンプレート)に次の行を追加します。ページにフィールドを表示するよう

function add_new_blog_field($blog_id, $user_id, $domain, $path, $site_id, $meta) { 

    // Make sure the user can perform this action and the request came from the correct page. 

    switch_to_blog($blog_id); 

    // Use a default value here if the field was not submitted. 
    $new_field_value = 'default'; 

    if (!empty($_POST['blog']['new_field'])) 
     $new_field_value = $_POST['blog']['new_field']; 

    // save option into the database 
    update_option('new_field', $new_field_value); 

    restore_current_blog(); 
} 

add_action('wpmu_new_blog', 'add_new_blog_field'); 

を、あなたはJavaScriptのアプローチを使用することができます。あなたは 'Add New Site'ページだけにjavascriptファイルを追加し、ページのonLoadはページの正しい位置にフィールドを挿入します。 'blog [new_field]'という名前の入力フィールドを追加する必要があります。

(function($) { 
    $(document).ready(function() { 
     $('<tr class="form-field form-required"></tr>').append(
      $('<th scope="row">New field</th>') 
     ).append(
      $('<td></td>').append(
       $('<input class="regular-text" type="text" title="New Field" name="blog[new_field]">') 
      ).append(
       $('<p>Explanation about your new field</p>') 
      ) 
     ).insertAfter('#wpbody-content table tr:eq(2)'); 
    }); 
})(jQuery); 

今だけの事はやって左に「追加新規サイト」のページに、このファイルが含まれている:私たちは一度ロードされ、ページの「新規サイトの追加」をに新しいフィールドを追加し、次のJavaScriptファイルを作成します、あなたのプラグインファイルにこれを追加することによって:

// Only add the script for the page site-new.php (the page hook). 
add_action("admin_print_scripts-site-new.php", 'my_admin_scripts'); 

function my_admin_scripts() { 
    wp_register_script('yourScript', plugins_url('js/yourScript.js', __FILE__)); 
    wp_enqueue_script('yourScript'); 
} 

さらなる提案は、あなたのニーズに応じて、次のようになります、add_settings_fieldを使用して、一般的な設定ページで入力フィールドを追加し、ユーザーが後でそれを編集できるように(そしておそらく唯一のこのフィールドのデフォルト設定の場合)。このフィールドを後で変更することはできません。

私はこれがあなたが必要としていた助けと思います。

+1

ありがとう、これは本当に素晴らしい答えです! +100の価値があります:) –

+0

非常にいいですが、1つの小さな変更: '(空白($ _ POST ['blog'] ['new_field'])) $ new_field_value = $ _POST ['blog'] ['new_field new_fieldの空の値を考慮してください。これは正しい値として受け入れることができます – Mariyo

+1

WP 4.5以降では、アクションフックはsite-new.phpのformタグ内に "network_site_new_form"と呼ばれています。 – Berend

関連する問題