Comment puis-je lister les utilisateurs par nom ASC en utilisant WP_User_Query ?
Il y a un paramètre orderby mais en regardant au cœur, il n'accepte pas de commander mes méta utilisateurs. Quelqu'un sait comment étendre WP pour autoriser cet ordre par nom de famille?
Il existe un meilleur moyen de le faire à partir de Wordpress version 3.7. Utilisez la propriété meta_key de Wordpress pour sélectionner la propriété du nom de famille, puis orderby => meta_value avec un ordre croissant.
<?php
$args = array(
'meta_key' => 'last_name',
'orderby' => 'meta_value',
'order' => 'ASC'
);
$user_query = new WP_User_Query( $args );
if ( ! empty( $user_query->results ) ) {
foreach ( $user_query->results as $author ) {
// Line below display the author data.
// Use print_r($author); to display the complete author object.
?>
<a href="<?php echo get_author_posts_url($author->ID); ?>" class="author"><?php echo get_avatar($author->ID, 96); ?><?php echo $author->display_name; ?></a>
<?php
}
}
?>
Fait quelque chose moi-même:
Fichier de modèle de page:
<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$paged -= 1;
$limit = 20;
$offset = $paged * $limit;
$args = array(
'number' => $limit,
'offset' => $offset,
);
// Create the WP_User_Query object
global $wp_query;
$wp_query = new WP_User_Query($args);
// Get the results
$authors = $wp_query->get_results();
if($authors): ?>
<div id="staffmembers" class="clearfix">
<?php foreach($authors as $author) : ?>
<a href="<?php echo get_author_posts_url($author->ID); ?>" class="author"><?php echo get_avatar($author->ID, 96); ?><?php echo $author->display_name; ?></a>
<?php endforeach; ?>
</div>
<?php else: ?>
<div class="post">
<p>Sorry, no posts matched your criteria.</p>
</div>
<?php endif; ?>
<?php wp_pagenavi(); ?>
Juste pour que vous sachiez que j'utilise une version alpha de WP-PageNavi qui prend en charge la pagination pour WP_User_Query. Ce qui précède ne concerne que la mise en page et la pagination. Ci-dessous, la magie opère:
Fichier functions.php:
add_action('pre_user_query', 'sort_connect_author_list_by_last_name' );
function sort_connect_author_list_by_last_name(&$object) {
global $wp, $wpdb;
if(preg_match( "/^connect(\/.+)?$/", $wp->request )) {
// Sub query
$sql = "
(SELECT
`{$wpdb->users}`.`ID` AS `c_user_id`,
MAX(CASE WHEN `{$wpdb->usermeta}`.`meta_key` = 'location' THEN `{$wpdb->usermeta}`.`meta_value` END ) AS `c_location`,
MAX(CASE WHEN `{$wpdb->usermeta}`.`meta_key` = 'last_name' THEN `{$wpdb->usermeta}`.`meta_value` END ) AS `c_last_name`,
MAX(CASE WHEN `{$wpdb->usermeta}`.`meta_key` = 'first_name' THEN `{$wpdb->usermeta}`.`meta_value` END ) AS `c_first_name`
FROM
`{$wpdb->users}`
LEFT JOIN `{$wpdb->usermeta}` ON ( `{$wpdb->users}`.`ID` = `{$wpdb->usermeta}`.`user_id` )
WHERE
1=1
GROUP BY
`{$wpdb->users}`.`ID`
) AS `C`
";
// Modify existing query
$object->query_fields = "SQL_CALC_FOUND_ROWS `{$wpdb->users}`.`ID`, `{$wpdb->users}`.`display_name`";
$object->query_from .= " RIGHT JOIN {$sql} ON ( `{$wpdb->users}`.`ID` = `C`.`c_user_id` )";
$object->query_orderby = "ORDER BY `C`.`c_last_name` ASC";
}
}
La requête ci-dessus n'est pas efficace et serait terriblement lente sur une base d'utilisateurs importante. Dans mon cas, je cours sur 250 utilisateurs max. Il y aurait de meilleures façons de le faire mais je voulais maintenir la pagination avec WP-PageNavi.
Filtrez la chaîne 'query'
et modifiez la partie ORDER BY
. Voir https://Gist.github.com/1281778#L160 pour un exemple.