Php 将ID传递给函数中的pre_get_posts查询

Php 将ID传递给函数中的pre_get_posts查询,php,mysql,wordpress,function,Php,Mysql,Wordpress,Function,我试图将帖子ID传递给函数的query->set,函数将返回帖子 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-&g

我试图将帖子ID传递给函数的query->set,函数将返回帖子

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_uuuin',array(45121)),查询将返回id为45和id为121的帖子,因此查询工作正常

但是我想让
$results\u separated
将post ID(如45121132)传递给查询,然后
$query->set('post\u in',array($results\u separated))将正常工作。
我怎样才能做到这一点


我想您实际上遇到了一个PHP问题。当您执行
数组($results\u separated)
时,您基本上是从如下字符串创建一个数组:
“12114,56”
。通过这样做,PHP创建了如下数组:

array(
    0 => "12,114,56,"
)
array(
    0 => "12",
    1 => "114",
    2 => "56"
)
很明显WordPress找不到任何有这样ID的帖子!实际上,您需要的是这样一个数组:

array(
    0 => "12,114,56,"
)
array(
    0 => "12",
    1 => "114",
    2 => "56"
)
实际上,这就是
get\u col()
返回的结果,所以您只需将
$results
传递给
set()
函数:

$query->set ( 'post__in', $results );

编辑:事实上,我意识到您的问题是当您调用
$wpdb->get_col(…)
时,因为它干扰了您稍后将执行的
$query
。。。这些变量正在使用一些可能被覆盖的其他全局变量,这就是为什么没有得到任何结果…

除了$results\u分隔的额外数组()之外,在我的例子中,我必须应用

if (!$query->is_main_query()) {
    return $query;
}
在我的函数顶部(在中找到它),否则,内部的查询将被执行多次,并且不会正确执行。
答案中的注释帮助我解决了这个问题。

谢谢MikO,我刚刚尝试了你的解决方案,但仍然没有返回任何结果:(@Jason,尝试在你的
foreach
之前执行
var\u dump($results)
,以确保你确实从查询中获得了一些结果……在var\u dump($results)之后,我得到以下结果:数组(3){[0]=>string(3)“121”[1]=>string(2)“89”[2]=>string(2)“69”}你好,MikO,我发现了一件非常奇怪的事情。我将函数改为:if(is_home()&&&&$query->is_main_query())$results_separated='46121';$query->set('post__-in',array($results_separated));return$query;函数仍然不会返回任何内容。如果我像这样使用query,它就会工作。$query->->set('post_u_uin',array(46121));这对我来说很奇怪。