我有以下过滤器,除了那些用户是作者的帖子和另一个特定的自定义帖子之外,应删除所有帖子的特定用户角色的编辑功能。
function allow_user_to_edit_cpt_filter( $capauser, $capask, $param){
if ( $user->roles[0] == 'aamrole_53e5009d7c32d' ) {
// code to get the id of the organisation post
$organisation_post = get_field('select_organisation', "user_$user_id") ;
$user_posts = $wpdb->get_results( "SELECT id, FROM wp_posts WHERE post_author = " . $user_id , ARRAY_B );
$allowed_posts = array();
$user_posts = get_posts( $args );
if( !empty($user_posts) ){
foreach($user_posts as $post){
$allowed_posts[] = $post->ID;
}
}
$allowed_posts[] = $organisation_post;
//$allowed_posts = array(2376, 3091);
$post = get_post( $param[2] );
//If post isn't allowed then remove edit capabilities on that post
if( !in_array( $post->ID, $allowed_posts ) ){
if( ( $param[0] == "edit_post" ) || ( $param[0] == "edit_published_posts" ) || ( $param[0] == "edit_others_posts" ) ) {
foreach( (array)$capask as $capasuppr ) {
if ( array_key_exists($capasuppr, $capauser) ) {
$capauser[$capasuppr] = 0;
}
}
}
}
}
return $capauser;
}
add_filter('user_has_cap', 'allow_user_to_edit_cpt_filter', 100, 3 );
此代码的问题在于它拒绝用户提交帖子以供审核。我还安装了AAM(高级访问管理器),我用它来更改不同用户角色的权限。以下是分配给上述代码的角色的功能列表。
我很想知道为什么此过滤器拒绝用户提交帖子以供审核。确切地说,在access denied
post.php
错误
答案 0 :(得分:1)
对于任何可能遇到这种情况的人,我当然不确定这是否是正确的方法,但我设法做了我想做的事情。
基本上我在删除功能之前添加了一个if语句
if ( (( 'publish' != $post->post_status ) || ( 'pending' != $post->post_status ) || ( 'auto-draft' != $post->post_status )) && ($post->post_author == $user_id) ) {
return $capauser;
}
检查帖子是否已发布待处理或草稿,以及该帖子是否属于该用户。如果这些条件成立,则按原样返回功能。
文档非常similar example