wp_terms_checklist复选框在订阅者配置文件中被禁用



我使用wp_terms_checklist来显示供用户签入用户配置文件的选项。当我以管理员身份登录时,这很好,但当我以订阅者的身份登录时时,复选框输入会添加disabled="disabled"

我不认为这是权限问题,因为内容实际上出现在订阅者的配置文件页面中。它似乎来自这个函数https://codex.wordpress.org/Function_Reference/disabled,为什么我不知道。

以下是代码(这是我正在制作的自定义插件的一部分):

<?php
add_action( 'show_user_profile', 'iw_notify_show_user_options' );
add_action( 'edit_user_profile', 'iw_notify_show_user_options' );
function iw_notify_show_user_options( $user ) { ?>
<h3 id="notifications">Notification Options</h3>
<style>
    .iw_notify_heirarchical_list ul { padding-left:20px; }
</style>
<div class='iw_notify_heirarchical_list'>
    <ul class=iw_notify_heirarchical_list>
        <?php
            $selected_cats = get_the_author_meta( 'tax_input', $user->ID );
            $selected_cats = $selected_cats['notifications'];
            if ( !function_exists( 'wp_terms_checklist' ) ) { 
                    require_once ABSPATH . '/wp-admin/includes/template.php'; 
                } 
            $post_id = -1; 
            $args = array( 
                'descendants_and_self' => 0, 
                'selected_cats' => array('165','164'),
                'popular_cats' => false, 
                'walker' => '', 
                'taxonomy' => 'notifications', 
                'checked_ontop' => false 
            ); 
            wp_terms_checklist($post_id, $args); 
        ?>
    </ul>
</div>

<?php }
add_action( 'personal_options_update', 'my_save_extra_profile_fields' );
add_action( 'edit_user_profile_update', 'my_save_extra_profile_fields' );
function my_save_extra_profile_fields( $user_id ) {
if ( !current_user_can( 'read', $user_id ) )
    return false;
    update_usermeta( $user_id, 'tax_input', $_POST['tax_input'] );
}

您是正确的,函数disabled禁用了wp_terms_checklist复选框。

如果您看到coretemplate.phphttps://core.trac.wordpress.org/browser/tags/4.4.2/src/wp-admin/includes/template.php#L114,

$tax = get_taxonomy( $taxonomy );
$args['disabled'] = ! current_user_can( $tax->cap->assign_terms );

密钥disabled的设置取决于当前用户角色和从分类法分配的功能(在您的情况下是分类法通知)。

因此,您需要检查函数register_taxonomy通知,并确保设置了参数capabilities。如果你需要订阅者拥有使用你的条款清单的完全权限,你必须这样设置:

'capabilities' => array(
    'manage_terms' => 'read',
    'edit_terms'   => 'read',
    'delete_terms' => 'read',
    'assign_terms' => 'read'
)

根据需要进行调整即可。参见WP Codex了解角色和能力https://codex.wordpress.org/Roles_and_Capabilities.

最新更新