web-dev-qa-db-fra.com

wp_query orderby title et valeur de la clé méta (WP3.1)

J'ai une taxonomie wp_query et je voudrais commander la liste par titre et par méta valeur (valeur numérique)

  • Avoir une méta valeur Intéressant = 1 ou 0 dans les posts
  • Les messages les moins intéressants seraient au bas de la requête

OBJECTIF - SORTIE COMME CECI: (est-ce possible avec WP_QUERY et WP3.1)

A (CLE META intéressante = 1 )

B (CLE META intéressante = 1 )

C (CLE META intéressante = 1 )

A (CLE META intéressante = 0 )

B (CLE META intéressante = 0 )

1
ide79

Vous pouvez filtrer la partie orderby de la requête pour obtenir ce que vous voulez (essayer de la transmettre via le paramètre orderby ne fonctionnera pas, elle sera filtrée). Cet exemple simple ajoute l'ordre de tri meta_value avant l'ordre de tri des titres standard.

add_filter( 'posts_orderby', 'wpse15168_posts_orderby' );
$query = new WP_Query( array(
    'meta_key' => 'interesting',
    'orderby' => 'title',
    'order' => 'ASC',
) );
remove_filter( 'posts_orderby', 'wpse15168_posts_orderby' );

function wpse15168_posts_orderby( $orderby )
{
    global $wpdb;
    $orderby = $wpdb->postmeta . '.meta_value DESC, ' . $orderby;
    return $orderby;
}
5
Jan Fabry

vous ne pouvez pas mélanger l'ordre croissant et décroissant, mais si vous changez les zéros et les uns, cela pourrait fonctionner:

$query = new WP_Query( array( 'meta_key => 'interesting',
                              'orderby' => 'meta_value_num title',
                              'order' => 'ASC' ) );
1
windyjonas