Dokumentaci najdete na pre_get_post
filtrovat zde http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts
Zdá se mi, že problém je ve skutečnosti v tom, jak nastavujete post_id, které chcete načíst. Pokud se podíváte na výše uvedený odkaz, můžete vidět různé hodnoty, které lze nastavit v $query
objekt, který je předán filtru, a post_id
není jedním z nich, a proto "funguje", když jej nastavíte, a "nefunguje", když nastavíte p
. Ten druhý je pro jedno ID příspěvku, takže pokud byste chtěli jen 100, použili byste $query->set('p', 100)
. Pokud chcete vrátit výsledky, kde je ID příspěvku v poli, použijte $query->set('post__in', array(100, 120))
. Váš kód SQL pouze vrací ID, takže místo vracení objektů můžete přímo získat pole – předpokládám, že ozvěna názvu a print_r
řádky se právě ladí:
// 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 );
Výsledky také nemusíte získat, pokud existují konfliktní parametry nastavené v $query
. Tyto hodnoty můžete zkontrolovat pomocí var_dump($query->query_vars)
a nastavte všechny, které mohou být v konfliktu, na prázdný řetězec – ve vašem případě $query->set( 'm', '' );