Передавать сообщения ids в pre_get_posts запрос post__in function

Я хочу, чтобы функция возвращала сообщения с помощью query-> set с 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 ответа

Попробуйте это вместо этого:

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

где я заменил:

  • ваше неопределенное $condition с is_user_logged_in().
  • undefined $get_current_user_id с get_current_user_id().
  • дополнительный массив около $results, так как метод get_col возвращает массив.
  • is_home() так как вы также используете is_page(21).

Надеюсь, поможет.


Возможно, вам также понадобится

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

если вы найдете некоторые странные результаты. Я нашел это по ссылке на похожий вопрос в комментариях ответа.

licensed under cc by-sa 3.0 with attribution.