Не работает? WP_Query и "attachment" как тип записи

20 апр. 2011 г., 01:37:56
Просмотры: 26.7K
Голосов: 24

У меня есть галерея, прикрепленная к странице. На этой странице я выполняю следующий запрос:

$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', // Случайный порядок вложений
    )
);
2
Комментарии

Интересно, в чем разница между установкой post_status в 'null' и 'inherit'

Wok Wok
20 апр. 2011 г. 20:29:53

Вы только что избавили меня от множества проблем с 'post_status' => 'inherit'. Спасибо!

Pat Pat
3 мая 2011 г. 19:19:28
Все ответы на вопрос 4
2
22

Добавьте в $args, это важно.

'post_status' => 'any'

Не делайте: 'post_status' => null

Это важно, потому что вложения не имеют статуса post_status, поэтому значение по умолчанию для post_status, published, не найдет ни одного вложения.

19 сент. 2013 г. 07:10:08
Комментарии

Да, почему это работает? Я не мог заставить вложение отображаться на странице архива, пока не добавил это.

Claire Claire
26 апр. 2015 г. 11:56:01

Оставляю комментарий для себя в качестве напоминания, что я снова нашел этот ответ на SO, потому что опять забыл об этом. :facepalm:

dossy dossy
31 мар. 2025 г. 02:31:00
0
19

Вот параметры запроса, которые я использую... у меня они работают при переборе результатов

array(
    'post_parent' => $post->ID,
    'post_status' => 'inherit',
    'post_type'=> 'attachment',
    'post_mime_type' => 'image/jpeg,image/gif,image/jpg,image/png'                  
);

Для более подробной информации, пожалуйста, ознакомьтесь с официальной документацией по параметрам статуса в WP_Query

20 апр. 2011 г. 03:57:06
0

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

Альтернативой может быть использование get_children вместо WP_Query.

20 апр. 2011 г. 02:13:15
2

Я смог отобразить все изображения, являющиеся вложениями к записи, используя следующий код:

<?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 ); ?>

Надеюсь, этот подход поможет вам в реализации вашей задачи.

20 апр. 2011 г. 03:16:38
Комментарии

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

User User
21 апр. 2011 г. 01:31:23

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

Пагинация с этим не работает, так как код выводит все изображения, прикрепленные к записи.

Chad Von Lind Chad Von Lind
21 апр. 2011 г. 01:45:37