Mysql
 sql >> Base de données >  >> RDS >> Mysql

WordPress pre_get_posts ne fonctionne pas

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', '' );