Ordenar postagens por meta valor com método de obtenção

Tenho um tipo de postagem personalizado com os valores de meta adicionados pelos Campos personalizados avançados. Eu quero classificar posts com método get por este meta e por post_date.

Eu faço algum código, mas funciona de maneira estranha – não adicionou oportunidade para classificar posts por meta, mas apenas faça qualquer ‘orderby’ ordenado por meta. Então, quando escrevo no navegador algo como www.mysite.com/archive/?orderby=post_date, ele ainda classifica isso apenas por meta.

function my_pre_get_posts( $query ) { // do not modify queries in the admin if( is_admin() ) { return $query; } // only modify queries for 'text' post type if( isset($query->query_vars['post_type']) && $query->query_vars['post_type'] == 'text' ) { // allow the url to alter the query if( isset($_GET['orderby']) ) { $query->set('orderby', 'meta_value_num'); $query->set('meta_key', 'text_date'); $query->set('order', 'DESC'); } } // return return $query; } add_action('pre_get_posts', 'my_pre_get_posts'); 

Solutions Collecting From Web of "Ordenar postagens por meta valor com método de obtenção"

Você não está realmente usando o $_GET['orderby'] qualquer lugar. O que você está fazendo no seu código está ordenando pelo valor text_date , sempre. Se você deseja ordenar por data por padrão e quando $_GET['orderby'] estiver configurado para valores de ordem padrão ou se $_GET['orderby_meta'] estiver configurado, peça por eles, em vez disso, você precisa fazer algo como isto:

 if (isset($_GET['orderby']){ $query->set('orderby', sanitize_key($_GET['orderby']); $query->set('order', 'DESC'); } else if (isset($_GET['orderby_meta']){ $query->set('orderby', 'meta_value_num'); $query->set('meta_key', 'text_date'); $query->set('order', 'DESC'); }