16

私がカスタマイズしている WordPress マルチサイト インストールでは、新しいブログ サイトを作成するための入力フォームに単純なテキスト フィールドを追加する必要があります。

Network Admin > Sites > Add New

当然、このフィールドは、そのフォームの他のメタデータと一緒に{new_blog_prefix}_optionsテーブルに保存する必要があります。

私は、これを達成するための最も単純で、最も単純な、および/または「正しい方法」 (つまり、WordPress の方法) に特に興味がありますが、The Way That Works™ に落ち着きます!

これまでのところ、私の研究では多くの行き止まりに遭遇しました。

  • 設定 API - [ WP Codex ]

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

  • wpmu_optionsフック - [フック DB ]

    ネットワーク設定画面にオプションを追加するための専用フックのようです。

  • add_site_option / add_blog_option - [ WP Codex ]

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

だから...サイコロはありません。どんな助けでも大歓迎です!

4

1 に答える 1

28

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

ただし、送信されてすべての情報が表示されると、ページは関数wpmu_create_blog()を呼び出します。この関数には、アクションと呼ばれるフックがありますwpmu_new_blog

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

この時点で、ブログはすでに作成されています。ただし、このアクションにフックしてデータベースに保存することで、フィールドが送信されたかどうかを検出できます。以下をプラグイン ファイル (またはテンプレート) に追加します。

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 のアプローチを使用できます。「新しいサイトの追加」ページのみに JavaScript ファイルを追加し、ページの onLoad フィールドをページの正しい位置に挿入します。'blog[new_field]' という名前の入力フィールドを追加する必要があります。次の JavaScript ファイルを作成します。このファイルが読み込まれると、[新しいサイトの追加] ページに新しいフィールドが追加されます。

(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);

あとは、プラグイン ファイルに次のファイルを追加して、このファイルを [新しいサイトの追加] ページに含めるだけです。

// 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を使用して一般設定ページに入力フィールドを追加し、ユーザーが後で編集できるようにします (おそらく、それがこのフィールドのデフォルト設定である場合のみ)。「このフィールドを後で変更することはできません」というアプローチ。

これがあなたが必要としていた助けであることを願っています。

于 2012-04-29T14:25:23.617 に答える