Идентификаторы Pass для запроса pre_get_posts в функции

Я пытаюсь передать идентификаторы сообщений в функцию query-> function, и функция вернет сообщения.

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 передавал идентификаторы сообщений, например 45,121,132, а затем $query->set ('post__in', array($results_separated)); будет работать правильно. Как я могу это сделать?

pre_get_posts

Наверное, у вас на самом деле проблема с 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 ); 

EDIT : На самом деле я понял, что ваша проблема заключается в том, что вы вызываете $wpdb->get_col(...) , потому что это мешает $query вы выполните позже … Эти переменные используют некоторые другие глобальные переменные, которые, вероятно, , и именно поэтому вы не получаете никаких результатов …

За исключением дополнительного массива () над $ results_separated, в моем случае мне пришлось применить

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

в верхней части моей функции (нашел ее, иначе запросы будут выполняться несколько раз и не правильно. Комментарии в ответе помогли мне разобраться в этом.