自定义用户的能力以更改自定义帖子的帖子状态

时间:2012-07-20 作者:Doug Miller

我有一个比较独特的场景,希望能得到一些帮助。

我有一个自定义的帖子类型coin,用于自定义导入过程自动创建的内容。我想限制所有用户在任何投币帖子上执行某些操作。具体来说,我想防止任何用户删除硬币、更改发布状态或更改可见性。

我注册了一个帖子类型:

function my_post_type() {
    register_post_type(\'coin\',
            array(
                \'labels\' => array(
                    \'name\' => __( \'Coins\' ),
                    \'singular_name\' => __( \'Coin\' ),
                    \'view_item\' => __( \'View Coin\' ),
                    \'edit_item\' => __( \'Edit Coin\' ),
                    ),
                \'public\' => true,
                \'menu_position\' => 5,
                \'capability_type\' => \'coin\',
                )
            );
}
add_action(\'init\', \'my_post_type\');
我已经指定了如何处理这些功能:

function my_map_meta_cap( $caps, $cap, $user_id, $args ) {
    if (preg_match(\'/_coins?$/\', $cap) == 1){
        $post = get_post( $args[0] );
        $post_type = get_post_type_object( $post->post_type );
        $caps = array();
        $disallowed = array(
                \'delete_coin\',
                \'publish_coins\',
                );
        if (in_array($cap, $disallowed)){
            $caps[] = \'do_not_allow\';
        }
    } 
    return $caps;
}
add_filter( \'map_meta_cap\', \'my_map_meta_cap\', 10, 4 );
这确实可以防止删除投币贴。这确实会妨碍投币杆可见性的调整。这确实会阻止用户发布投币帖子。然而,它并不阻止用户将投币状态更改为草稿或待审核。

此外,我想防止用户添加新的投币帖子,因为投币帖子只能通过导入例程创建。我还没有找到任何关于如何做到这一点的信息。

有人能帮我吗?还是我对wordpress要求太高了?

1 个回复
最合适的回答,由SO网友:Brian Fegter 整理而成

没有一种好的方法可以做到这一点,因为这一部分的代码非常严格。您可以通过JavaScript简单地删除这些元素。通过删除(而不仅仅是隐藏)元素,可以禁用该功能。我相信您可以根据自己的需要定制以下内容。

使用CSS隐藏post actions内部框,以便禁止的按钮永远不会显示在屏幕上。没有这个,你会看到按钮一会儿,然后它们就消失了示例:

add_action(\'admin_head-post.php\', \'remove_publishing_actions\');
add_action(\'admin_head-post-new.php\', \'remove_publishing_actions\');
function remove_publishing_actions(){
    global $post;
    if($post->post_type == \'post\'){
        //check user capabilities here
        echo "<style type=\'text/css\'>
                /* hide the publishing box until we remove the elements */
                #submitpost{display:none;}
            </style>";

        echo "
            <script type=\'text/javascript\'>
                jQuery(document).ready(function($){
                    //Remove whatever elements you don\'t want
                    $(\'#misc-publishing-actions, #save-action, #delete-action\').remove();
                    //Show the publish actions
                    $(\'#submitpost\').show();
                });
            </script>

        ";
    }
}
在回显样式和脚本标记之前,您可能应该检查您的自定义用户上限。希望这有帮助!

结束