obter postagens baseadas no valor meta do autor

4

Digamos que eu tenha um meta-campo de usuário chamado "meta1". Eu quero receber posts (via get_posts ou algo parecido) que é o autor meta1 = true. Alguma ideia de como eu deveria abordar isso?

    
por Gal Hadad 21.03.2017 / 12:09

3 respostas

2

Obtenha para todos os usuários / autores com o campo meta do usuário. meta1 = true

$args = array(
    'meta_key'     => 'meta1',
    'meta_value'   => 'true',
    'meta_compare' => '=',
    'fields'       => 'all',
 );
$users = get_users( $args );

Armazene o ID do usuário e faça login em uma matriz authors

$authors = array();
foreach ( (array) $users as $user ) {
  authors[ $user->ID ] = $user->user_login;
}

Agora você pode passar autores na sua consulta de postagens.

$posts = query_posts( array( 'author__in'=> array_keys( $authors ) ) );

Ou

$posts = new WP_Query( array( 'author__in' => array( array_keys( $authors ) ) );

Código final

$args = array(
    'meta_key'     => 'meta1',
    'meta_value'   => 'true',
    'meta_compare' => '=',
    'fields'       => 'all',
 );
$users = get_users( $args );
$authors = array();
foreach ( (array) $users as $user ) {
    $authors[ $user->ID ] = $user->user_login;
}
$query = new WP_Query( array( 'author__in' => array( array_keys( $authors ) ) );

if ( $query->have_posts() ) : while( $query->have_posts() ) : $query->the_post();

//print post contents, title etc

endwhile;
endif;
wp_reset_postdata();
    
por Anwer AR 21.03.2017 / 15:09
1

Isso pode ser feito por meio do filtro parse_query , como segue:

add_action ('parse_query', array ($this, 'wpse_private_author_query')) ;

function
wpse_private_author_query ($query)
{
    // get our private author query query_var   
    $private_author_query = $query->get ('_private_author_query') ;
    if (empty ($private_author_query)) {
        // our private author query query_var is not set, so bail without modifying $query
        return ;
        }

    $args = array (
        'fields' => 'ID',
        ) ;
    $args = wp_parse_args ($args, $private_author_query) ;
    // get the ID's of the users that match our private author query
    $users = get_users ($args) ;

    // unset our private author query query_var
    unset ($query->query_vars['_private_author_query']) ;

    // add the author IDs to the query
    $query->set ('author__in', $users) ;

    return ;
}

Para ver isso em ação, podemos fazer:

$args = array (
    'post_type' => 'any',
    'post_status' => 'public',
    '_private_author_query' => array (
        'meta_key' => 'meta1',
        'meta_value' => true,
        'meta_compare' => '=',
        ),
    ) ;
$posts = new WP_Query ($args) ;

Nota : o acima é mais geral do que a sua pergunta. Você pediu apenas para user_meta, mas o acima permitirá pesquisar por qualquer das características suportadas por WP_User_Query :: parse_query () . Por exemplo, nós também podemos fazer:

$args = array (
    'post_type' => 'any',
    'post_status' => 'public',
    '_private_author_query' => array (
        'role' => 'editor',
        ),
    ) ;
$posts = new WP_Query ($args) ;

etc.

    
por Paul 'Sparrow Hawk' Biron 21.03.2017 / 15:45
0

Você pode defini-lo nos argumentos do loop e acredito que funcionará com outras funções do WP também

$args = array(
  'author' => 1 // Author's ID
); 
    
por Netanel Perez 21.03.2017 / 12:27