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


17

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

  1. 「新しいサイトの追加」にオプションフィールドを追加したい
    シンプルなテキストオプションで十分です。どうすればいいですか?

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

    私は「wpmu_new_blog」フックを使用できることを知っていますが、これは$meta提供されたオプションで変数を渡しますが、1つのステップでこれをすべて行う方法があるので、別のDBクエリを実行する必要はありません、サイト作成プロセス全体を上書き/置き換えますか?

ノート:

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

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

回答:


9

2つの回答(*)に参加して、新しいサイト(フロントエンドとバックエンド)を登録するときにカスタムメタオプションを追加し、その値を[サイト]画面の列に表示するプラグインを作成しました。

マルチサイトカテゴリ

ここに画像の説明を入力してください ここに画像の説明を入力してください ...

(*)コード参照

1- WordPress +マルチサイト:カスタムブログオプションを追加して、ネットワーク管理で新しいサイトフォームを追加する方法、@ dennisg

2- マルチサイト:新しいブログ設定フォームにカスタムブログオプションを追加する方法、@ tbuteler

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

マルチサイトですでにID列コードを使用しており、プラグインにカテゴリ列も追加しました。

[更新]

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

この質問/回答を参照してください:「request」および「parse_query」フィルターは、sites.phpまたはlink-manager.phpで起動しない

[更新2]

プラグインを作り直し、カテゴリをソートできるようになりました。プラグインの最初のバージョンはGistになり(リンクは最初に更新されます)、新しいバージョンはGitHubに残ります。


+1これはすごいですね、ブラソフィロ!私はこれを試してみるのを楽しみにしています:)
ブライアンレイシー

8

マルチサイトサインアッププロセスは、簡単に調整することはできません。他のプロセスとは異なり、多くのフックがありますが、重いカスタマイズにはあまりうまくいかないようですので、ご不便をおかけします。

私が正しく理解していれば、あなたが望むものを達成するのはそれほど複雑ではありませんが、主にサインアップ(つまり、ユーザーがカスタム情報を送信するとき)とアクティベーション(つまり、新しいブログが実際に作成されるとき)は別に発生します。

始めるのに必要な非常に大まかなコードを次に示します。うまくいけば、正しい方向に導くことができます。

// 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を失いますが、これはその場合には必要ありません。

とにかく、それがどうなるか、そして幸運を教えてください!


とても役立つ答え、ここでうまく利用できる多くの情報:)私はあなたがすでに賞金を得たという理由だけでブラソフィロにベストアンサーを授与しています、そして両方とも素晴らしい答えです。
ブライアンレイシー

ここで素晴らしい答え、ありがとう。update_blog_option()を実行させないのに、なぜ私の余分なフィールドがサイトオプションに追加されるのか考えはありますか?process_extra_field_on_blog_signup()およびexit()内の値をエコーアウトし、機能しました。extra_filedがオプションに追加されました。しかし、exit()を使用せずにそのまま実行すると、extra_fieldはwp_xx_optionsに追加されません。
ザトリアン14年

@thatryan、それは奇妙です...何かがデータベースから値を削除している可能性が低いか、またはまったく追加されていません。さらにテストを実行してみて、問題を解決できない場合は遠慮なく質問を投稿してください。彼らは新しいバージョンで何かを変更している場合がありますので...、この答えはWordPress 3.5またはそれ以前のバージョンのためにおそらくだったことを覚えておいてください
トマスButeler

-1

site-new.phpコードを見ると、すでに答えが得られているはずです-それは違います!

フォームに何かを追加できるかどうかを確認する条件はありません。ただし、ファイルを調べて、この入力フィールドをsite-new.phpに手動で追加し、配列のメタとして値をwpmu_create_blog関数に渡す必要があると考えています。関数が何をするかについては、あなたが探しているものかもしれません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.