Selon: http://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters
L'ordre par défaut est DESC et l'ordre par défaut est la date.
Dans un plugin personnalisé, le plugin applique le filtre pre_get_posts suivant:
function custom_search_filter($query) {
//echo '<pre>'; var_dump($_GET); echo '</pre>'; die;
//echo '<pre>'; var_dump($query); echo '</pre>'; die;
if ($query->is_search) {
/* -------------------------------------------------- */
$query->set('orderby', 'date');
if ( isset($_GET['order']) ) {
if ( $_GET['order'] == 'DESC' ) {
$query->set('order', 'DESC');
//echo '<pre>'; var_dump($_GET); echo '</pre>'; die;
} else {
$query->set('order', 'ASC');
//echo '<pre>'; var_dump($_GET); echo '</pre>'; die;
}
}
/* -------------------------------------------------- */
}
return $query;
}
add_filter('pre_get_posts', 'custom_search_filter', 999);
L'URL GET définit l'ordre sur ASC:
Et déboguer la requête que je reçois:
SELECT SQL_CALC_FOUND_ROWS wp_posts. * FROM wp_posts WHERE 1 = 1 AND wp_posts.post_type = 'ressources' ET (wp_posts.post_status = 'publier') ORDER BY wp_posts.menu_order, wp_posts.post_date DESC LIMIT 0, 10 "
En SQL ci-dessus, vous pouvez remarquer: ORDER BY ... DESC
Il y a une raison pour laquelle l'ordre ne change pas de DESC en ASC si $ _GET ['order'] == 'ASC'?
Merci d'avance.
Oui je l'ai eu:
function custom_search_orderby($orderby) {
global $wpdb;
if ( is_search() ) {
if ( isset($_GET['order']) ) {
if ( $_GET['order'] == 'DESC' ) {
$orderby = $wpdb->prefix . "posts.post_date DESC";
} else {
$orderby = $wpdb->prefix . "posts.post_date ASC";
}
}
}
return $orderby;
}
add_filter('posts_orderby', 'custom_search_orderby', 999);