Mysql
 sql >> Datenbank >  >> RDS >> Mysql

WordPress pre_get_posts funktioniert nicht

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