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?
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();
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
);