Я пытаюсь передать идентификаторы сообщений в функцию 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; }
в верхней части моей функции (нашел ее, иначе запросы будут выполняться несколько раз и не правильно. Комментарии в ответе помогли мне разобраться в этом.