web-dev-qa-db-ja.com

新しいブログ設定フォームにカスタムブログオプションを追加する方法

十分に単純な要件のように思えますが、私は苦労しています:

  1. "Add New Site"にオプションフィールドを追加したい /。
    単純なテキストオプションは問題ありません。どうやってこれをするの?

  2. サイトの作成時にこのカスタムブログオプションを保存する必要があります。

    私は 'wpmu_new_blog'フックを使うことができることを知っています、それは提供されたオプションで$meta変数を渡します、しかし私は別のDBクエリを実行する必要がないので、一歩でこれをすべてする方法があるかどうか疑問に思いますそれでも、サイト作成プロセス全体を上書き/置き換えますか?

ノート:

MultiSiteセットアップでWP 3.3.1を使用しています。私は指定されたカスタムフィールドの値に一致するすべてのサイトをリストするプラグインを書いています(それを "type"と呼びましょう)。

また、私は経験豊富なPHP開発者ですが、私はまだ比較的WordPressのハッキングに慣れていないので、さまざまなWP関数とフックのすべてにまだ精通していないと仮定してください。 。

16
Brian Lacy

2つの答え(*)を結合して、私は新しいサイト(フロントエンドとバックエンド)を登録するときにカスタムメタオプションを追加してその値をサイトスクリーンの列に表示するプラグインをしました。

マルチサイトカテゴリ

enter image description hereenter image description here ...

(*)コード参照

1 - WordPress + Multisite:Network Adminの[Add New Site]フォームにカスタムブログオプションを追加する方法 、@dennisgさんによる

2 - マルチサイト:新しいブログ設定フォームにカスタムブログオプションを追加するにはどうすればいいですか? 、@ tbutelerによる

add_action('wpmu_new_blog', 'add_new_blog_field');は2つの答えからマージされました。

私はすでにマルチサイトでID列コードを使っていましたし、プラグインにCategory列も追加しました。

[更新]

Category列をソート可能にしようとしましたが、ほとんど解決できないようです...

この質問/回答を参照してください。 sites.phpにもlink-manager.phpにも適用されない 'request'と 'parse_query'のフィルタ

[更新2]

私はプラグインを作り直しました、そして今カテゴリーは分類可能です。プラグインの最初のバージョンは現在Gistであり(リンクは最初に更新されます)、 新しいバージョン はGitHubに残ります。

9
brasofilo

マルチサイトの申し込みプロセスは、Tweakにとって簡単なことではありません。他のプロセスとは異なり、それには多くのフックがありますが、それらを組み合わせてカスタマイズしすぎるとは思えないので、私はあなたの欲求不満を理解します。

正しく理解すれば、WordPressのデフォルトの動作をほとんどオーバーライドせずにワンステップで解決することはできませんが、主にサインアップ(つまりユーザーのカスタム情報を送信するとき)やアクティベーション(すなわち、新しいブログが実際に作成されるとき)は別々に起こります。

ここにあなたが始める必要がある非常に大まかなコードがあります。うまくいけば、それは正しい方向にあなたを導きます:

// Add text field on blog signup form
add_action('signup_blogform', 'add_extra_field_on_blog_signup');
function add_extra_field_on_blog_signup() { ?>
    <label>An extra field</label>
    <input type="text" name="extra_field" value="" />
<?php
}

// Append the submitted value of our custom input into the meta array that is stored while the user doesn't activate
add_filter('add_signup_meta', 'append_extra_field_as_meta');
function append_extra_field_as_meta($meta) {
    if(isset($_REQUEST['extra_field'])) {
        $meta['extra_field'] = $_REQUEST['extra_field'];
    }
    return $meta;
}

// When the new site is finally created (user has followed the activation link provided via e-mail), add a row to the options table with the value he submitted during signup
add_action('wpmu_new_blog', 'process_extra_field_on_blog_signup', 10, 6);
function process_extra_field_on_blog_signup($blog_id, $user_id, $domain, $path, $site_id, $meta) {
    update_blog_option($blog_id, 'extra_field', $meta['extra_field']);
}

覚えておいてください:

  1. プラグインを介して入力をフィルタリングしたい場合は、選択入力を使用して提供されているオプションをロックすることを強くお勧めします。
  2. いくつかのフィールドは必須であり、登録時に検証を通過します(最小文字、サイト名の不許可文字、ブラックリスト名など)、最初の入力値を入力するときに$ _REQUESTグローバルで追加フィールドをチェックすることをお勧めします。これにより、WordPressのデフォルトフィールドの値を修正するために送り返された場合に、ユーザーが入力を失うことがないようにします。
  3. 最後の関数の考えを自分のプラグインに最も適したものに置き換えることは明らかにできますが、フィールドの値はその最後の関数の中から利用できるようになります。

最後に、後ですべての既存ブログからのすべての 'extra_field'値を処理したい場合は、情報を単一のテーブルに格納することを強くお勧めします。その最後の関数でupdate_site_optionの代わりにupdate_blog_optionを使用すると、blog_idが失われる可能性がありますが、その場合は不要です。

とにかく、それがどのように進むのか教えてください、そして幸運を祈ります!

8
Tomas Buteler