Не работает? WP_Query и "attachment" как тип записи
У меня есть галерея, прикрепленная к странице. На этой странице я выполняю следующий запрос:
$events_gallery = new WP_Query( // Создаем новый запрос для наших изображений
array(
'post_parent' => $post->ID, // Получаем данные из текущей записи
'post_type' => 'attachment', // Выбираем только вложения
'post_mime_type' => 'image', // Выбираем только вложения, которые являются изображениями
'posts_per_page' => '3', // Показываем первые три результата
'status' => 'inherit', // Наследуем статус родительской записи
'orderby' => 'rand', // Случайный порядок вложений
)
);
Я экспериментировал разными способами, но по какой-то причине не могу получить вложения. Я упускаю что-то очевидное?
Обновление*
Спасибо Wok за указание правильного направления.
Оказалось, что я использовал "status" вместо "post_status". В документации Codex использовался параметр "status" как пример в контекстном объяснении типа записи "attachment". Я обновил документацию Codex, чтобы использовать "post_status". Вот правильный код:
$events_gallery = new WP_Query( // Создаем новый запрос для наших изображений
array(
'post_parent' => $post->ID, // Получаем данные из текущей записи
'post_type' => 'attachment', // Выбираем только вложения
'post_mime_type' => 'image', // Выбираем только вложения, которые являются изображениями
'posts_per_page' => '3', // Показываем первые три результата
'post_status' => 'inherit', // Вложения по умолчанию имеют статус "inherit", а не "published". Используйте "inherit" или "any"
'orderby' => 'rand', // Случайный порядок вложений
)
);
Да, почему это работает? Я не мог заставить вложение отображаться на странице архива, пока не добавил это.

Вот параметры запроса, которые я использую... у меня они работают при переборе результатов
array(
'post_parent' => $post->ID,
'post_status' => 'inherit',
'post_type'=> 'attachment',
'post_mime_type' => 'image/jpeg,image/gif,image/jpg,image/png'
);
Для более подробной информации, пожалуйста, ознакомьтесь с официальной документацией по параметрам статуса в WP_Query

Анализируя генерируемый запрос, действительно кажется, что это своего рода баг. Параметр 'status' => 'inherit' интерпретируется как статус родительской записи, хотя в базе данных для вложения буквально указано 'inherit'.
Альтернативой может быть использование get_children вместо WP_Query.

Я смог отобразить все изображения, являющиеся вложениями к записи, используя следующий код:
<?php
$args = array(
'post_type' => 'attachment',
'orderby' => 'menu_order',
'order' => 'ASC',
'post_mime_type' => 'image',
'post_status' => null,
'post_parent' => $post->ID
);
$attachments = get_posts($args);
if ($attachments) {
foreach ( $attachments as $attachment ) { ?>
<img src="<?php echo wp_get_attachment_url( $attachment->ID , false ); ?>" alt="<?php echo esc_attr(get_the_title($attachment->ID)); ?>" title="<?php echo esc_attr(get_the_title($attachment->ID)); ?>" />
<?php }
} ?>
Чтобы вывести URL оригинального изображения в полном размере, вы можете обернуть изображение в ссылку:
<?php echo wp_get_attachment_url( $attachment->ID , false ); ?>
Надеюсь, этот подход поможет вам в реализации вашей задачи.

Работает ли с этим пагинация? И можете ли вы показать остальную часть вашего выходного кода? Я как раз переписываю галерею темы, чтобы реализовать пагинацию для вложений на странице. Спасибо!

Если я загружу 4 изображения к записи и добавлю это в основной div контента в single.php, это просто выведет 4 тега img. Атрибут src= каждого будет вести к исходному изображению в большом размере.
Пагинация с этим не работает, так как код выводит все изображения, прикрепленные к записи.
