我有一个比较独特的场景,希望能得到一些帮助。
我有一个自定义的帖子类型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要求太高了?
最合适的回答,由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>
";
}
}
在回显样式和脚本标记之前,您可能应该检查您的自定义用户上限。希望这有帮助!