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

标签 php mysql wordpress function

我正在尝试将帖子 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)); 将正常工作。 我怎样才能做到这一点?

pre_get_posts reference

最佳答案

我猜你实际上遇到了 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/

相关文章:

php - 在 PHP 中访问全局变量的问题

MySQL 存储过程无用错误

mysql 试图获取一对多表的计数

php - 如何让多个位置 block 使用相同的命名@location

php - 使用php将文本变量从文本文件传递到html表单单元格

javascript - 通过ajax将js值发送​​到php Controller

mysql - 如何在数据库中组织漫画书位置信息?

php - 是否有最佳实践方法来近似 WordPress 插件中的命名空间 PHP?

php - 自定义帖子类型 'single-custom.php' 下一个和上一个链接卡在循环中

php - 按客户电子邮件或姓名搜索订单