Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

WordPress pre_get_posts não está funcionando


Você pode encontrar a documentação no pre_get_post filtre aqui http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts

Parece-me que o problema é, de fato, como você está definindo os post_ids que deseja recuperar. Se você consultar o link acima, poderá ver os diferentes valores que podem ser definidos no $query objeto que é passado para o filtro e post_id não é um deles, e é por isso que "funciona" quando você o define e "não funciona" quando você define p . O último é para um único ID de postagem, então se você quisesse apenas 100, você usaria $query->set('p', 100) . Se você deseja retornar resultados onde o ID do post está em um array, você usa $query->set('post__in', array(100, 120)) . Seu código SQL está apenas retornando o ID, portanto, em vez de retornar objetos, você pode obter um array diretamente - estou assumindo que ecoar o título e print_r as linhas estão apenas depurando:
// get results as a numeric array
$post_ids = $wpdb->get_results($request, ARRAY_N);
// pass post id array to $query
$query->set( 'post__in', $post_ids );

Você também pode não obter resultados se houver parâmetros conflitantes definidos no $query . Você pode verificar esses valores com var_dump($query->query_vars) e defina qualquer um que possa estar em conflito com uma string vazia - no seu caso $query->set( 'm', '' );