编辑角色未保存自定义帖子类型的设置页面

时间:2017-05-25 作者:rikardo85

我目前有一个自定义帖子类型,带有一个子菜单页,通过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的人保存这些选项?

2 个回复
最合适的回答,由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\';
}

SO网友:Mark Kaplun

要保存选项,用户需要manage_options 编辑所缺乏的能力。

您对的使用edit_pages 菜单功能允许编辑器访问管理页面,但设置submit将转到选项处理程序代码,该代码不考虑管理页面的上下文。

如何修复?我想说的是,除了管理员之外,没有人能够更改站点范围的设置,所以你的方法是错误的。。。更具建设性的选择是不要使用设置API并自己处理表单提交,或者使用角色管理器类型的插件为用户提供manage_option 能力。

结束

相关推荐

仅在wp-admin/Options-permarink.php上获得500内部服务器错误

我可以访问管理面板,一切正常。我可以单击设置->阅读并更改任何我想更改的内容。但如果我单击settings->permalinks,我会得到一个500内部服务器错误。以下是我尝试过的:我删除了。htaccess文件-未更改。我编辑了。htaccess(因为我正在将这个站点迁移到一个新域),现在我有了所有在前端工作的页面链接和除permalinks之外的所有管理链接。换句话说,网站的正面部分可以正常工作。所有管理功能都能正常工作。但如果我单击“设置”->“永久链接”,则会转到/wp adm