私は現在add_submenu_page
経由でサブメニューページを持つカスタム投稿タイプを持っています。このページには、テキストエディタやラジオボタンなどの基本設定を含むフォームがあります。
function programme_enable_pages() {
add_submenu_page(
'edit.php?post_type=programmes',
'content',
'Archive content',
'edit_pages',
basename(__FILE__),
'archiveContent'
);
}
add_action( 'admin_menu', 'programme_enable_pages' );
function register_programme_settings() {
register_setting( 'programme_content', 'programme_content' );
register_setting( 'programme_content', 'programme_branding' );
}
add_action( 'admin_init', 'register_programme_settings' );
function archiveContent() { ?>
<div class="wrap">
<form method="post" action="options.php">
<?php
settings_fields( 'programme_content' );
do_settings_sections( 'programme_content' );
wp_editor(
get_option( 'programme_content' ),
'programme_content',
$settings = array(
'textarea_name' => 'programme_content'
)
); ?>
<label><b>Branding options</b></label><br>
<input type="radio" name="programme_branding" id="branding_blue" value="blueBranding" <?php checked('blueBranding', get_option('programme_branding'), true); ?> checked="checked">Blue Branding<br>
<input type="radio" name="programme_branding" id="branding_red" value="redBranding" <?php checked('redBranding', get_option('programme_branding'), true); ?>/>Red Branding<br>
<input type="radio" name="programme_branding" id="branding_orange" value="orangeBranding" <?php checked('orangeBranding', get_option('programme_branding'), true); ?>/>Orange Branding
<?php submit_button(); ?>
</form>
</div>
<?php }
管理者の役割を持つユーザーがコンテンツのいずれかを編集して変更を保存しても、コンテンツは問題なく保存されます。しかし、編集者の役割を持つユーザーが変更を保存すると、次のようなページが表示されます。
申し訳ありませんが、これらのオプションを管理することはできません。
編集者というユーザー役割を持つ人にこれらのオプションを保存させる方法について、正しい方向を教えてください。
wp-admin/options.php
ファイルには、権限を制御するために設定グループから作成された名前のフィルタがあります。
$capability = apply_filters( "option_page_capability_{$option_page}", $capability );
問題を解決するには、次のような希望の権限レベルでフィルタを追加してください。
add_filter( 'option_page_capability_programme_content', 'my_settings_permissions', 10, 1 );
function my_settings_permissions( $capability ) {
return 'edit_pages';
}
オプションを節約するために、ユーザはmanage_options
機能を持つ必要があります。
メニューにedit_pages
機能を使用すると、管理者ページに編集者がアクセスできるようになりますが、送信を設定すると、管理者ページのコンテキストを考慮していないオプションハンドラコードに移動します。
直し方?管理者以外は誰もサイト全体の設定を変更できないはずなので、あなたのアプローチはただ間違っています...もっと建設的なオプションはsettings APIを使用してフォーム送信を自分で処理すること、またはロールマネージャを使用することではありませんユーザにmanage_option
機能を与えるためのプラグインのタイプ。