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