将帖子ID包含到WP_QUERY()

时间:2016-05-21 作者:Mayeenul Islam

我将一些帖子分配给一些不是这些帖子作者的用户。通常,私人帖子只对帖子作者可见。因此,如果作者有3篇帖子,在他登录时edit.php 他们将获得3个职位。但是,如果另一篇文章是通过自定义字段分配给他们的(不是作为文章作者),我如何将该文章添加到文章列表表中?

到目前为止,我尝试的是:生成函数(custom_get_assigned_posts()) 检索作为数组分配给user\\u id的所有帖子。但后来发现,在现有查询中包含post ID并非易事:

function add_assigned_posts( $query ) {
    if( is_admin() && in_array( $query->get(\'post_type\'), array(\'mycpt\') ) ) {
        global $current_user;
        $query->set(\'post__in\', custom_get_assigned_posts( $current_user->ID ) );
    }
    return $query;
}
add_filter( \'pre_get_posts\', \'add_assigned_posts\' );
但是post__in 不包括其他内容,它实际上指定了要检索的帖子。

我如何包括分配给非作者的帖子,以及由Posteta分配的帖子?

1 个回复
SO网友:Tim Malone

我想你应该可以用user_has_cap filter.

因为该过滤器通过$args 对于edit_post 功能,您可以使用该功能检查当前用户是否已被人为授予此功能,如果是,请强制edit_post 该实例的真实性。

根据上面链接的文档中的示例进行构建,您将看到如下内容:

add_filter( \'user_has_cap\', \'wpse_227418_edit_extra_posts\', 10, 3 );

function wpse_227418_edit_extra_posts($allcaps, $cap, $args){

  if($args[0] != "edit_post"){
    return $allcaps; // bail out, we\'re not talking about editing a post here
  }

  if(get_post_meta($args[2], "additional_author", true) == $args[1]){
    // get the meta key \'additional author\', checking that it matches the User ID we\'re looking at the capabilities for
    $allcaps[$cap[0]] = true; // make sure edit_posts is true for this author and this post ID
  }

  return $allcaps;

}
这是很快组合起来的,并且没有经过测试,所以您肯定想测试和修改以满足您的需要,但我认为这将满足您的需要。当然,请调整上面提到的meta\\u键,使其与您想要的键相匹配。

参考文献: