Vous pouvez trouver la documentation sur le pre_get_post
filtrez ici http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts
Il me semble que le problème est en fait de savoir comment vous définissez les post_ids que vous souhaitez récupérer. Si vous vous référez au lien ci-dessus, vous pouvez voir les différentes valeurs qui peuvent être définies sur la $query
objet qui est passé au filtre, et post_id
n'en fait pas partie, c'est pourquoi cela "fonctionne" lorsque vous le définissez, et "ne fonctionne pas" lorsque vous définissez p
. Ce dernier est pour un seul ID de publication, donc si vous vouliez juste 100, vous utiliseriez $query->set('p', 100)
. Si vous souhaitez renvoyer des résultats où l'ID de publication est dans un tableau, vous utilisez $query->set('post__in', array(100, 120))
. Votre code SQL ne fait que renvoyer l'ID, donc plutôt que de renvoyer des objets, vous pouvez simplement obtenir un tableau directement - je suppose que faire écho au titre et print_r
les lignes sont juste en débogage :
// 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 );
Vous pouvez également ne pas obtenir de résultats s'il existe des paramètres conflictuels définis sur la $query
. Vous pouvez vérifier ces valeurs avec var_dump($query->query_vars)
et définissez tout ce qui peut être en conflit sur une chaîne vide - dans votre cas $query->set( 'm', '' );