Sie finden die Dokumentation auf pre_get_post
filtern Sie hier http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts
Es sieht für mich so aus, als ob das Problem tatsächlich darin besteht, wie Sie die post_ids festlegen, die Sie abrufen möchten. Wenn Sie auf den obigen Link verweisen, können Sie die verschiedenen Werte sehen, die für $query
festgelegt werden können Objekt, das an den Filter übergeben wird, und post_id
ist keiner von ihnen, weshalb es "funktioniert", wenn Sie es setzen, und "funktioniert nicht", wenn Sie p
setzen . Letzteres ist für eine einzelne Post-ID, wenn Sie also nur 100 wollen, würden Sie $query->set('p', 100)
verwenden . Wenn Sie Ergebnisse zurückgeben möchten, bei denen sich die Post-ID in einem Array befindet, verwenden Sie $query->set('post__in', array(100, 120))
. Ihr SQL-Code gibt nur die ID zurück. Anstatt also Objekte zurückzugeben, können Sie einfach ein Array direkt abrufen - ich gehe davon aus, dass der Titel und print_r
wiedergegeben werden Zeilen debuggen nur:
// 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 );
Sie erhalten möglicherweise auch keine Ergebnisse, wenn in $query
widersprüchliche Parameter festgelegt sind . Sie können diese Werte mit var_dump($query->query_vars)
überprüfen und setzen Sie alle, die möglicherweise in Konflikt stehen, auf eine leere Zeichenfolge - in Ihrem Fall $query->set( 'm', '' );