将post id传递给pre_get_posts查询post__in函数

时间:2014-04-04 00:48:54

标签: php wordpress function wpdb wp-query

我想让函数通过查询 - >使用post ids post__in设置返回帖子,但该函数不返回任何内容。 这是代码:

add_action( 'pre_get_posts', 'query_booked_posts' );

function query_booked_posts( $query ) {
global $post,$wpdb;

$current_user_id = get_current_user_id();
if ( is_page(21) ) { //the condition, work fine

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));

$query->set ('post__in', array($results)); // pass results (post ids) to post__in

return $query;
}

}

由于

杰森

2 个答案:

答案 0 :(得分:0)

请改为尝试:

add_action( 'pre_get_posts', 'query_booked_posts' );

function query_booked_posts( $query )
{
    if ( is_page( 21 ) && is_user_logged_in() &&  $query->is_main_query() )
    {
        global $wpdb;
        $results = $wpdb->get_col( $wpdb->prepare( 
                   "SELECT booked_id FROM $wpdb->userbooking 
                    WHERE userid = %d",
                    get_current_user_id() ) );

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

我替换了:

  • 您的未定义$conditionis_user_logged_in()
  • 未定义的$get_current_user_idget_current_user_id()
  • $results周围的额外数组,因为get_col方法返回一个数组。
  • is_home()检查,因为您还使用了is_page(21)

希望它有所帮助。

答案 1 :(得分:0)

您可能还需要

if (!$query->is_main_query()) {
    return $query;
}

如果您发现一些奇怪的结果。我通过答案评论中类似问题的链接找到了这个。