Получение всех записей из произвольного типа записей
Я пытаюсь получить все записи определенного произвольного типа записей, используя следующий код:
$auctions = get_posts(array('post_type' => 'auction'));
print_r($auctions);
echo '<select>';
foreach ($auctions as $auction) {
echo '<option value="' . $auction->ID . '">' . $auction->post_title . '</option>';
}
echo '</select>';
Хотя функция print_r() показывает данные, цикл foreach, похоже, игнорирует их и ничего не выводит. Есть идеи?
Буду благодарен за любую помощь
Вывод print_r():
Array (
[0] => WP_Post Object (
[ID] => 36
[post_author] => 1
[post_date] => 2013-05-19 10:58:45
[post_date_gmt] => 2013-05-19 08:58:45
[post_content] =>
[post_title] => Мой заголовок
[post_excerpt] =>
[post_status] => publish
[comment_status] => closed
[ping_status] => closed
[post_password] =>
[post_name] => my-title
[to_ping] =>
[pinged] =>
[post_modified] => 2013-05-24 09:55:53
[post_modified_gmt] => 2013-05-24 07:55:53
[post_content_filtered] =>
[post_parent] => 0
[guid] => http://domain.com/?post_type=auction&p=36
[menu_order] => 0
[post_type] => auction
[post_mime_type] =>
[comment_count] => 0
[filter] => raw
)
)

Вы можете использовать wp_query()
для реализации этого функционала
$args = array(
'post_type' => 'auction',
'posts_per_page' => -1
);
$query = new WP_Query($args);
if ($query->have_posts()):
echo '<select>';
while ($query->have_posts()): $query->the_post();
echo '<option value="' . get_the_ID() . '">' . get_the_title() . '</option>';
endwhile;
echo '</select>';
wp_reset_postdata();
endif;
Документация по WP_Query
https://codex.wordpress.org/Class_Reference/WP_Query

Возможно, потому что get_posts
возвращает объект, вам нужно установить данные записи согласно Codex get_posts. Замените строку 4 на:
foreach($auctions as $auction) : setup_postdata($auction) {

get_posts() возвращает массив http://codex.wordpress.org/Template_Tags/get_posts#Return_Value, а setup_postdata используется для возможности применения тегов шаблона, таких как the_ID()

Обратите внимание, что в таких циклах обычно используется as $post
для установки глобальной переменной $post
, либо это нужно делать дополнительно. setup_postdata()
этого не делает.

Попробуйте без get_posts(). У меня сейчас есть похожая функция, которая работает так:
$args = array( 'post_type' => 'customPostName', 'post_status' => 'publish');
$pages = get_pages($args);
foreach ( $pages as $page ) {
// Делаем что-то
}
Редактирование: Вообще-то я не уверен, почему это не работает, так как в кодексе четко сказано использовать echo $post->ID;
с get_posts. http://codex.wordpress.org/Function_Reference/get_posts#Access_all_post_data
Есть ли для вас разница в этом варианте?
foreach ($auctions as $auction) {
$option = '<option value="';
$option .= $auction->ID;
$option .= '">';
$option .= $auction->post_title;
$option .= '</option>';
echo $option;

'post_type' => 'auction',
'posts_per_page' => -1,
'post_status' => 'publish',
);
$query = new WP_Query($args);
if ($query->have_posts() ) :
echo '<select>';
while ( $query->have_posts() ) : $query->the_post();
echo '<option value="' . get_the_ID() . '">' . get_the_title() . '</option>';
endwhile;
echo '</select>';
wp_reset_postdata();
endif;
@gregory был по сути прав, но допустил несколько опечаток... В массиве не хватало закрывающей ;
и в конце reset_postdata();
должно быть wp_reset_postdata();
.
Теперь этот код должен работать корректно... У меня он работает отлично, без каких-либо проблем!
Надеюсь, это поможет!
