我目前有一个自定义帖子类型,带有一个子菜单页,通过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 }
当具有管理员角色的用户编辑任何内容并保存更改时,内容保存时不会出现任何问题。但当具有编辑器角色的用户保存更改时,他们将被定向到一个页面,该页面说明:
抱歉,不允许您管理这些选项。
谁能告诉我如何让任何一个用户角色为editor的人保存这些选项?
最合适的回答,由SO网友:meloniq 整理而成
在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\';
}