web-dev-qa-db-fra.com

obtenir des messages basés sur la méta valeur de l'auteur

Supposons que j'ai un méta-champ d'utilisateur appelé "meta1". Je veux obtenir des messages (via get_posts ou similaires) qui est l'auteur meta1 = true. Une idée de comment je devrais aborder ça?

4
Gal Hadad

Obtenez pour tous les utilisateurs/auteurs avec le champ méta de l'utilisateur. meta1 = true

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

Stocker l'ID utilisateur et se connecter dans un tableau authors

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

Vous pouvez maintenant transmettre les auteurs à votre requête d'articles.

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

Ou

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

Code 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();
2
Anwer AR

Ceci peut être accompli via le filtre parse_query , comme suit:

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 ;
}

Pour voir cela en action, nous pouvons faire:

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

Remarque : ce qui précède est plus général que votre question. Vous n'avez demandé que user_meta, mais ce qui précède vous permettra de rechercher par toute des caractéristiques prises en charge par WP_User_Query :: parse_query () . Par exemple, on peut aussi faire:

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

etc.

Vous pouvez le définir dans les arguments de la boucle et je pense que cela fonctionnera également avec d'autres fonctions WP

$args = array(
  'author' => 1 // Author's ID
); 
0
Netanel Perez