我正在尝试将帖子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));
将正常工作。
我怎样才能做到这一点?
答案 0 :(得分:0)
我猜你实际上有一个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
您将在稍后执行......那些变量正在使用一些可能被覆盖的其他全局变量,这就是为什么你没有得到任何结果...
答案 1 :(得分:0)
除$ results_separated之外的额外数组(),在我的情况下,我必须应用
if (!$query->is_main_query()) {
return $query;
}
在我的函数的顶部(找到它,否则,内部的查询将执行几次而不是正确的。 答案中的评论帮助我解决了这个问题。