Wordpress - 如何允许作者/贡献者仅编辑特定选项页面而不编辑其他页面?

时间:2013-01-05 02:09:25

标签: php html wordpress

我今天创建了一个简单的wordpress插件,它本质上是一个选项页面。它基于此链接上的说明:http://codex.wordpress.org/Creating_Options_Pages(该页面底部有示例代码,我用作插件的主干)。

基本上,我希望作者/贡献者能够在他们的管理菜单中看到一个新选项卡,单击该选项卡时,会将用户带到一个页面,在该页面中他/她可以编写一些文本并点击“保存更改”(然后将该文本保存到数据库中)。我希望稍后能够通过类似get_option('some_option')的内容来调用此文本。

然而,作者/贡献者不能“manage_options”&这阻止了他们编辑我创建的新菜单选项卡上的选项。我安装了一个名为“用户角色编辑器”的插件,允许作者/贡献者进行manage_options,但这会在其管理菜单中显示“设置”选项卡,并允许他们管理所有选项。

如何允许作者/贡献者仅对我创建的插件的manage_options进行其他操作?我可以解除对我创建的插件的权限限制吗?任何指导将不胜感激! (插件开发顺利,但现在我卡住了。)

我的代码非常类似于上面给出的链接中的示例:

<?php
add_action('admin_menu', 'baw_create_menu');

function baw_create_menu() {

    //create new top-level menu
    add_menu_page('BAW Plugin Settings', 'BAW Settings', 'edit_posts', 'my-plugin', 'baw_settings_page');

    //call register settings function
    add_action( 'admin_init', 'register_mysettings' ); }


function register_mysettings() {
//register our settings
register_setting( 'baw-settings-group', 'new_option_name' );
register_setting( 'baw-settings-group', 'some_other_option' );
register_setting( 'baw-settings-group', 'option_etc' ); }

function baw_settings_page() { ?> <div class="wrap"> <h2>Plugin Name</h2>

<form method="post" action="options.php">

    <?php settings_fields( 'baw-settings-group' ); ?>
    <?php do_settings( 'baw-settings-group' ); ?>

    <table class="form-table">

        <tr valign="top">
        <th scope="row">New Option Name</th>
        <td><input type="text" name="new_option_name" value="<?php echo get_option('new_option_name'); ?>" /></td>
        </tr>

        <tr valign="top">
        <th scope="row">Some Other Option</th>
        <td><input type="text" name="some_other_option" value="<?php echo get_option('some_other_option'); ?>" /></td>
        </tr>

        <tr valign="top">
        <th scope="row">Options, Etc.</th>
        <td><input type="text" name="option_etc" value="<?php echo get_option('option_etc'); ?>" /></td>
        </tr>

    </table>

    <?php submit_button(); ?>

</form> </div> <?php } ?>

2 个答案:

答案 0 :(得分:2)

我找到了解决方案:

function twentyeleven_option_page_capability( $capability ) {
    return 'edit_posts';
}
add_filter( 'option_page_capability_baw-settings-group', 'twentyeleven_option_page_capability' );

我在注册设置的函数之后添加了(在我上面提供的代码中,这将是函数register_mysettings())

基本上,add_filter函数允许group_baw-settings-group的选项(由register_setting函数在register_mysettings函数中声明)由edit_posts的用户改变(函数twentyeleven_option_page_capability被赋予add_filter作为第二个参数,返回'edit_posts')。

来源:http://wordpress.org/support/topic/wordpress-settings-api-cheatin-uh-error?replies=0

答案 1 :(得分:0)

您可以user privilege检查:

if (current_user_can('permission')) {
... do stuff
}

因此,如果您只想要编辑/管理员的部分,您可以使用:

function register_mysettings() {
  if (current_user_can('edit_posts') {
    //register our settings...