在订户配置文件中禁用wp_terms_checklist复选框

时间:2016-03-22 20:49:04

标签: wordpress checkbox roles

我正在使用wp_terms_checklist显示用户签入用户个人资料的选项。以 admin 身份登录时,此功能正常,但当我以订阅者身份登录时,复选框输入已添加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'] );
}

1 个答案:

答案 0 :(得分:0)

您是正确的,wp_terms_checklist已被功能disabled禁用。

如果您看到核心template.php https://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的设置取决于从分类中分配的当前用户roles and capabilities(在您的情况下是分类通知)。

因此,您需要检查功能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