我正在尝试将帖子 ID 传递给函数的查询->设置,函数将返回帖子。
add_action( 'pre_get_posts', 'query_booked_posts' );
function query_booked_posts( $query ) {
if ( $condition ) { //the condition
if ( is_home() && $query->is_main_query() )
$results = $wpdb->get_col($wpdb->prepare( "SELECT booked_id FROM $wpdb->userbooking WHERE userid = %d",$current_user_id));
foreach($results as $result){
$results_separated = $result.',';
}
$query->set ('post__in', array($results_separated)); // pass results (post ids) to post__in
return $query;
}
}
此后,该函数不会返回任何内容。
如果我执行 $query->set ('post__in', array(45,121));
,查询将返回 id 45 和 id 121 的帖子,因此查询工作正常。
但我想让 $results_separated
将帖子 ID(例如 45,121,132)传递给查询,然后 $query->set ('post__in', array($results_separated));
将正常工作。
我怎样才能做到这一点?
最佳答案
我猜你实际上遇到了 PHP 问题。当您执行 array($results_separated)
时,您基本上是从如下所示的字符串创建一个数组:"12,114,56,"
。通过这样做,PHP 创建一个像这样的数组:
array(
0 => "12,114,56,"
)
显然 WordPress 找不到任何具有此类 ID 的帖子!你想要的实际上是一个像这样的数组:
array(
0 => "12",
1 => "114",
2 => "56"
)
实际上这就是 get_col()
返回的内容,因此您只需将 $results
传递给 set()
函数即可:
$query->set ( 'post__in', $results );
编辑:实际上我意识到你的问题是当你调用 $wpdb->get_col(...)
时,因为它会干扰使用 $query
您稍后将执行...这些变量正在使用一些其他可能被覆盖的全局变量,这就是为什么您没有得到任何结果...
关于php - 将 ID 传递给函数中的 pre_get_posts 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22847087/