マルチサイトの設定API-不足している更新メッセージ


8

マルチサイトインストールで設定APIを使用していて、オプションページがネットワークレベルにある場合options.php、管理ページが置かれwp-admin/network、WPがそのページにあることをWPが期待しているため、オプションの投稿は機能しませんwp-admin

このWPインストールがマルチサイトインストールであるかどうかを(定数を介して)確認する関数を追加しました。そうである場合は、フォームのアクション値をに変更し../option.phpます。これでオプションは保存されますが、デフォルトのメッセージ「設定が保存されました」が表示されます。がありません(ただし、クエリ文字列にはが含まれますsettings-updated=true)。

メッセージを表示する方法について何か考えはありますか?

回答:


11

ネットワークオプションページの場合、正しいフォームアクションURLは次のとおりです。

wp-admin/network/edit.php?action=your_option_name

次に、コールバックを登録する必要があります。

add_action( 
    'network_admin_edit_your_option_name', 
    'your_save_network_options_function' 
);

そのコールバック関数で$_POSTデータを検査し、値を準備して保存します。

update_site_option( $this->option_name, $this->option_values );

そして、あなたはさらなる助けなしにリダイレクトを作成しなければなりません:

// redirect to settings page in network
wp_redirect(
    add_query_arg(
        array( 'page' => 'your_options_page_slug', 'updated' => 'true' ),
        (is_multisite() ? network_admin_url( 'admin.php' ) : admin_url( 'admin.php' ))
    )
);
exit;

オプションページでをチェックし$_GET['updated']、そのパラメーターが見つかった場合は管理者通知を追加します。


それでは、Settings APIはネットワーク管理ページで利用できませんか?そして、@ NightHawkが最初に行ったのは、オプションを実際にネットワークのメインブログに保存していて、サイト全体に保存していないということですか。
Parham 2014年

@Parham私は彼のコードを見たことはありませんが、Settings APIのほとんどの部分がネットワークページで使用できないか、または奇妙な方法で動作することを知っています。それを使用する必要はありません。
fuxia

0

私は@toschoの回答を使用してきましたが、うまくいきますが、特定のワードプレスのインストールパスでは、ハードコードされたフォームアクションURLが機能しません。ここで@birgireは正しいURLを構築する方法を述べています

network-admin内でURLを参照するときは、network_admin_url()を検討する必要があります。コア関数。非マルチサイトセットアップの場合、admin_url()にフォールバックします。

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