十分に単純な要件のように思えますが、私は苦労しています:
"Add New Site"にオプションフィールドを追加したい /。
単純なテキストオプションは問題ありません。どうやってこれをするの?
サイトの作成時にこのカスタムブログオプションを保存する必要があります。
私は 'wpmu_new_blog'フックを使うことができることを知っています、それは提供されたオプションで$meta
変数を渡します、しかし私は別のDBクエリを実行する必要がないので、一歩でこれをすべてする方法があるかどうか疑問に思いますそれでも、サイト作成プロセス全体を上書き/置き換えますか?
ノート:
MultiSiteセットアップでWP 3.3.1を使用しています。私は指定されたカスタムフィールドの値に一致するすべてのサイトをリストするプラグインを書いています(それを "type"と呼びましょう)。
また、私は経験豊富なPHP開発者ですが、私はまだ比較的WordPressのハッキングに慣れていないので、さまざまなWP関数とフックのすべてにまだ精通していないと仮定してください。 。
2つの答え(*)を結合して、私は新しいサイト(フロントエンドとバックエンド)を登録するときにカスタムメタオプションを追加してその値をサイトスクリーンの列に表示するプラグインをしました。
...
(*)コード参照
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に残ります。
マルチサイトの申し込みプロセスは、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']);
}
覚えておいてください:
最後に、後ですべての既存ブログからのすべての 'extra_field'値を処理したい場合は、情報を単一のテーブルに格納することを強くお勧めします。その最後の関数でupdate_site_option
の代わりにupdate_blog_option
を使用すると、blog_idが失われる可能性がありますが、その場合は不要です。
とにかく、それがどのように進むのか教えてください、そして幸運を祈ります!