Incluir ID de postagem [s] em WP_Query ()

4

Estou atribuindo algumas postagens a alguns usuários que não são os autores dessas postagens. Geralmente, as postagens particulares são visíveis apenas para os autores da postagem. Então, se o autor tiver 3 posts, no seu logado em edit.php eles receberão 3 posts. Mas se outra postagem for atribuída a eles por campo personalizado (não como um autor da postagem), como posso adicionar a postagem à tabela da lista de postagens?

O que tentei até agora é: criar uma função ( custom_get_assigned_posts() ) para recuperar todas as postagens atribuídas a um user_id como uma matriz. Mas, em seguida, descobriu que não há maneira fácil de incluir IDs de postagem na consulta existente:

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' );

Mas post__in não inclui coisas adicionais, na verdade, especificou postagens para recuperar.

Como posso incluir postagens atribuídas a um não autor de postagens e atribuídas por postmeta?

    
por Mayeenul Islam 21.05.2016 / 21:45

1 resposta

2

Acho que você deve conseguir fazer isso com o user_has_cap filter .

Como esse filtro passa pelo ID da postagem no $args para o recurso edit_post , você pode usá-lo para verificar se o usuário atual recebeu artificialmente esse recurso e, em caso afirmativo, forçar o recurso edit_post para ser verdade para essa instância.

Criando o exemplo nos documentos vinculados acima, você estaria procurando algo assim:

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;

}

Isso é muito rápido e não foi testado, então você certamente quer testar e modificar suas necessidades, mas eu acho que isso vai te dar o que você quer. Claro, ajuste a meta_key mencionada acima para corresponder à chave que você está procurando.

Referências:

por Tim Malone 22.05.2016 / 12:20