Du kan finde dokumentationen på pre_get_post
filtrer her http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts
Det ser for mig ud til, at problemet i virkeligheden er, hvordan du indstiller de post_ids, som du vil hente. Hvis du henviser til linket ovenfor, kan du se de forskellige værdier, der kan indstilles på $query
objekt, der sendes til filteret, og post_id
er ikke en af dem, hvorfor det "virker", når du indstiller det, og "virker ikke", når du indstiller p
. Sidstnævnte er for et enkelt post-id, så hvis du bare ville have 100, ville du bruge $query->set('p', 100)
. Hvis du vil returnere resultater, hvor post-id'et er i et array, bruger du $query->set('post__in', array(100, 120))
. Din SQL-kode returnerer bare ID'et, så i stedet for at returnere objekter, kan du bare få et array direkte - jeg antager, at det gentager titlen og print_r
linjer fejler bare:
// 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 );
Du får muligvis heller ikke resultater, hvis der er eksisterende modstridende parametre indstillet på $query
. Du kan kontrollere disse værdier med var_dump($query->query_vars)
og sæt enhver, der kan være i konflikt med en tom streng - i dit tilfælde $query->set( 'm', '' );