我使用JeremyHixon的生成器创建了一个选项页面,但该页面仅可供管理员用户访问。我想把这个提供给编辑。
我希望添加\\u角色,但我不确定如何实现这一点。非常感谢您的任何建议!
* Generated by the WordPress Option Page generator
* at http://jeremyhixon.com/wp-tools/option-page/
*/
class Example {
private $example_options;
public function __construct() {
add_action( \'admin_menu\', array( $this, \'example_add_plugin_page\' ) );
add_action( \'admin_init\', array( $this, \'example_page_init\' ) );
}
public function example_add_plugin_page() {
add_menu_page(
\'Example\', // page_title
\'Example\', // menu_title
\'manage_options\', // capability
\'example\', // menu_slug
array( $this, \'example_create_admin_page\' ), // function
\'dashicons-admin-generic\', // icon_url
2 // position
);
}
public function example_create_admin_page() {
$this->example_options = get_option( \'example_option_name\' ); ?>
<div class="wrap">
<h2>Example</h2>
<p>some description</p>
<?php settings_errors(); ?>
<form method="post" action="options.php">
<?php
settings_fields( \'example_option_group\' );
do_settings_sections( \'example-admin\' );
submit_button();
?>
</form>
</div>
<?php }
public function example_page_init() {
register_setting(
\'example_option_group\', // option_group
\'example_option_name\', // option_name
array( $this, \'example_sanitize\' ) // sanitize_callback
);
add_settings_section(
\'example_setting_section\', // id
\'Settings\', // title
array( $this, \'example_section_info\' ), // callback
\'example-admin\' // page
);
add_settings_field(
\'text_label_0\', // id
\'text-label\', // title
array( $this, \'text_label_0_callback\' ), // callback
\'example-admin\', // page
\'example_setting_section\' // section
);
}
public function example_sanitize($input) {
$sanitary_values = array();
if ( isset( $input[\'text_label_0\'] ) ) {
$sanitary_values[\'text_label_0\'] = sanitize_text_field( $input[\'text_label_0\'] );
}
return $sanitary_values;
}
public function example_section_info() {
}
public function text_label_0_callback() {
printf(
\'<input class="regular-text" type="text" name="example_option_name[text_label_0]" id="text_label_0" value="%s">\',
isset( $this->example_options[\'text_label_0\'] ) ? esc_attr( $this->example_options[\'text_label_0\']) : \'\'
);
}
}
if ( is_admin() )
$example = new Example();
/*
* Retrieve this value with:
* $example_options = get_option( \'example_option_name\' ); // Array of All Options
* $text_label_0 = $example_options[\'text_label_0\']; // text-label
*/
最合适的回答,由SO网友:Jacob Peattie 整理而成
如果您查看文档add_menu_page()
, 您将看到第三个参数是:
向用户显示此菜单所需的功能。
在WordPress中,权限不需要特定的角色,您需要capability, 角色是功能的集合。您的菜单页需要manage_options
, 默认情况下仅由管理员持有。如果还希望允许访问编辑器,则edit_pages
是仅由管理员和编辑拥有的功能。
add_menu_page(
\'Example\', // page_title
\'Example\', // menu_title
\'edit_pages\', // capability
\'example\', // menu_slug
array( $this, \'example_create_admin_page\' ), // function
\'dashicons-admin-generic\', // icon_url
2 // position
);
现在,对于角色为
edit_pages
功能,默认情况下只有管理员和编辑器。
但你会遇到另一个问题。您的管理页面包含使用创建的设置字段Settings API. 默认情况下,无论用于添加管理菜单项的功能如何,manage_options
需要提交设置表单。
要解决此问题,您需要使用option_page_capability_{$option_page}
滤器使用此筛选器,您可以更改提交设置页面所需的功能。你只需要更换{$option_page}
使用传递给的值settings_fields()
(令人沮丧的是,这是选项组,而不是选项页)。
add_filter(
\'option_page_capability_example_option_group\',
function() {
return \'edit_pages\';
}
);