Receba mensagens das últimas 24 horas e classifique-as através do GD Star Rating

Estou tentando classificar as postagens usando GD Star Rating nas últimas 24 horas. Eu tenho duas consultas separadas, mas não sei como mesclar elas.

function filter_where($where = '') { //posts in the last 24 Hours $where .= "AND post_date > '" . date('Ymd H:i:s', strtotime('-24 hours')) . "'"; return $where; } add_filter('posts_where', 'filter_where'); query_posts($query_string); 

E

query_posts (‘gdsr_sort = thumbs & posts_per_page = 10’);

Não tenho ideia de como classificar as postagens das últimas 24 horas usando o GD Star, mas essas duas consultas funcionam perfeitamente bem individualmente. Obrigado!

Solutions Collecting From Web of "Receba mensagens das últimas 24 horas e classifique-as através do GD Star Rating"

The posts_where filtra a parte ‘WHERE’ da instrução SQL, e não a cadeia de consulta. assim

 $where .= "&post_date > '".date('Ymd H:i:s', strtotime('-24 hours'))."'"; 

deveria estar

 $where .= " AND post_date > '".date('Ymd H:i:s', strtotime('-24 hours'))."'"; 

Além disso, como este gancho é triggersdo para cada consulta (administrador e lado público), você deve usar alguma lógica para apenas append a instrução where where required.

Alternativamente, você pode adicionar o filtro imediatamente antes da consulta e removê-lo novamente depois:

 add_filter( 'posts_where', 'filter_where' ); $query_string ='gdsr_sort=thumbs&posts_per_page=10'; query_posts( $query_string ); remove_filter( 'posts_where', 'filter_where' ); 

Veja a página relacionada do Codex .

Não testado porque não tenho o plugin instalado. Mas eu diria que isso seria uma maneira melhor de fazê-lo em vez de usar query_posts()

 global $wp_query; // Get the existing query and add in extra query args $query = array_merge( $wp_query->query, array( 'gdsr_sort' => 'thumbs', 'posts_per_page' => 10 ) ); // Apply our filter add_filter( 'posts_where', 'last_24_hours_filter_where' ); // Do our new query $wp_query = new WP_Query($query); // Remove the filter so not to effect anything else remove_filter( 'posts_where', 'last_24_hours_filter_where' ); function last_24_hours_filter_where($where = '') { // Alter query to only return posts in the last 24 hours return $where . " AND post_date > '" . date( 'Ymd H:i:s' , strtotime( '-24 hours' ) ) . "'"; }