Je kunt de documentatie vinden op de pre_get_post
filter hier http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts
Het lijkt erop dat het probleem in feite is hoe je de post_ids instelt die je wilt ophalen. Als u naar de bovenstaande link verwijst, kunt u de verschillende waarden zien die kunnen worden ingesteld op de $query
object dat aan het filter wordt doorgegeven, en post_id
is er niet een van, daarom "werkt" het wanneer je het instelt en "werkt het niet" wanneer je p
instelt . De laatste is voor een enkele post-ID, dus als je er maar 100 wilt, gebruik je $query->set('p', 100)
. Als je resultaten wilt retourneren waarbij de post-ID in een array staat, gebruik je $query->set('post__in', array(100, 120))
. Uw SQL-code retourneert alleen de ID, dus in plaats van objecten terug te geven, kunt u gewoon rechtstreeks een array krijgen - ik neem aan dat dit de titel en print_r
weergeeft regels zijn gewoon aan het debuggen:
// 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 );
U krijgt mogelijk ook geen resultaten als er bestaande conflicterende parameters zijn ingesteld op de $query
. U kunt deze waarden controleren met var_dump($query->query_vars)
en stel eventuele conflicten in op een lege tekenreeks - in jouw geval $query->set( 'm', '' );