Elenca utenti per cognome in WP_User_Query
Come posso elencare gli utenti per cognome in ordine crescente quando uso WP_User_Query?
C'è un parametro orderby ma guardando nel core non sembra accettare l'ordinamento per metadati utente. Qualcuno sa come estendere WP per permettere questo ordinamento per cognome?

Esiste un metodo migliore per farlo a partire dalla versione 3.7 di WordPress. Usa la proprietà meta_key di WordPress per selezionare la proprietà del cognome e poi orderby => meta_value con un ordinamento ascendente.
<?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 ) {
// La riga sottostante mostra i dati dell'autore.
// Usa print_r($author); per visualizzare l'oggetto autore completo.
?>
<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
}
}
?>

Ho creato qualcosa da solo:
File del template della pagina:
<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$paged -= 1;
$limit = 20;
$offset = $paged * $limit;
$args = array(
'number' => $limit,
'offset' => $offset,
);
// Creazione dell'oggetto WP_User_Query
global $wp_query;
$wp_query = new WP_User_Query($args);
// Ottenimento dei risultati
$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>Spiacenti, nessun articolo corrisponde ai criteri.</p>
</div>
<?php endif; ?>
<?php wp_pagenavi(); ?>
Per tua informazione, sto usando una versione alpha di WP-PageNavi che supporta l'impaginazione per WP_User_Query. Il codice sopra si occupa solo del layout e dell'impaginazione. Qui sotto avviene la magia:
File 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`
";
// Modifica della query esistente
$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";
}
}
Questa query non è efficiente e sarebbe terribilmente lenta su un ampio database di utenti. Nel mio caso sto lavorando con un massimo di 250 utenti. Ci sarebbero modi migliori per farlo, ma volevo mantenere l'impaginazione con WP-PageNavi.

Filtra la stringa 'query'
e modifica la parte ORDER BY
. Vedi https://gist.github.com/1281778#L160 per un esempio.
