post__in для get_posts с динамическим массивом

Я создаю RSS-канал. Я создал таблицу в моей базе данных с 400 сообщениями id. Я кодировал rss-канал, я сейчас пытаюсь связать эти два, поэтому мой RSS-канал работает только для списка из 400 сообщений из моей таблицы.

На моей странице RSS-ленты я могу создать массив, используя пару идентификаторов (см. Ниже)

$myarray2 = array(12345,12346); $args = array( 'post_type' => 'posttype', 'post__in' => $myarray2 ); 

Это работает и создает RSS-канал для идентификатора 12345,12346.

Я также могу напечатать массив из 400 записей таблицы базы данных на странице следующим образом;

 $myarray = $wpdb->get_results("SELECT * FROM my_table"); print_r($myarray) 

Это дает данные этой формы

 ( [0] => stdClass Object ( [id] => 145 ) [1] => stdClass Object ( [id] => 4573 ) [2] => continues..... ) 

Однако я не могу заставить код правильно использовать $myarray с post__in например

 $myarray = $wpdb->get_results("SELECT * FROM my_table"); $args = array( 'post_type' => 'posttype', 'post__in' => $myarray ); 

не работает. Я пробовал различные варианты, но мне не хватает чего-то о том, как доставить список сообщений id из моего массива в post__in

Что мне не хватает?

Solutions Collecting From Web of "post__in для get_posts с динамическим массивом"

Вот один из способов: wpdb::get_col() и выборка столбца id :

 $pids = $wpdb->get_col( "SELECT id FROM my_table" ); 

Затем мы могли бы очистить его целочисленным преобразованием каждого id с помощью:

 $pids = wp_parse_id_list( $pids ); 

Просто обратите внимание на различное максимальное значение для intval() , в зависимости от систем с 32 или 64 битами.

post__in принимает массив идентификаторов сообщений, например array(5, 4, 8, 9);

Расширение комментария @bravokeyl. По умолчанию результатом является Object. Как и в кодексе, вы можете изменить тип вывода get_results() на эти значения.

  • OBJECT – результат будет выводиться как числовой индекс массива объектов строки.
  • OBJECT_K – результат будет выводиться как ассоциативный массив объектов строки, используя значения первого столбца в качестве ключей (дубликаты будут отброшены).
  • ARRAY_A – результат будет выводиться как числовой индекс массива ассоциативных массивов, используя имена столбцов в качестве ключей.
  • ARRAY_N – результат будет выводиться как числовой индекс массива с числовой индексацией.

Здесь мы можем изменить вывод на ARRAY_A затем извлечь почтовые идентификаторы и перейти к post__in

 global $wpdb; $fivesdrafts = $wpdb->get_results("SELECT ID FROM my_table", ARRAY_A); $post_ids = array_map(function($single_array){ return $single_array['ID']; }, $fivesdrafts); //Pass this to post__in array( 'post__in' => $post_ids ); 

Хорошо, я сделал так, чтобы работать следующим образом.

 global $wpdb; $jlk = $wpdb->get_results("SELECT * FROM my_table"); foreach($jlk as $custompost) { $custompost_ids[] = $custompost->ID; } $args = array( 'post_type' => 'custompost', 'numberposts' => -1, 'post__in'=> $custompost_ids ); $result = get_posts($args);