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