Como alterar a direção da ordem da consulta usando $ query-> set (‘order’, ‘ASC’); dentro de um filtro pre_get_posts?

De acordo com: http://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters

A ordem padrão é DESC e o orderby padrão é data.

Em um plugin personalizado, o plugin está aplicando o seguinte filtro pre_get_posts:

function custom_search_filter($query) { //echo '
'; var_dump($_GET); echo '

'; die; //echo '

'; var_dump($query); echo '

'; die; if ($query->is_search) { /* -------------------------------------------------- */ $query->set('orderby', 'date'); if ( isset($_GET['order']) ) { if ( $_GET['order'] == 'DESC' ) { $query->set('order', 'DESC'); //echo '

'; var_dump($_GET); echo '

'; die; } else { $query->set('order', 'ASC'); //echo '

'; var_dump($_GET); echo '

'; die; } } /* -------------------------------------------------- */ } return $query; } add_filter('pre_get_posts', 'custom_search_filter', 999);

O URL GET define a ordem para ASC:

http: //mysite.lh/? post_type% 5B% 5D = resources & custom-search-my-term = Adicionar + Novo + Termo & s = CustomSearch & order = ASC

E depurando a consulta que recebo:

SELECCIONAR SQL_CALC_FOUND_ROWS wp_posts. * FROM wp_posts WHERE 1 = 1 AND wp_posts.post_type = ‘resources’ AND (wp_posts.post_status = ‘publish’) ORDEM POR wp_posts.menu_order, wp_posts.post_date DESC LIMIT 0, 10 ”

No SQL acima, você pode notar: ORDER BY … DESC

Existe uma razão pela qual a ordem não está mudando de DESC para ASC, se realmente $ _GET [‘order’] == ‘ASC’?

Desde já, obrigado.

Solutions Collecting From Web of "Como alterar a direção da ordem da consulta usando $ query-> set (‘order’, ‘ASC’); dentro de um filtro pre_get_posts?"

Sim, eu entendi:

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