Php 将ID传递给函数中的pre_get_posts查询
我试图将帖子ID传递给函数的query->set,函数将返回帖子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
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));这对我来说很奇怪。