Я использовал этот запрос, чтобы случайным образом выбрать всего $limit
-изображений (вложений), каждое из которых было уникальным и случайно выбранным родителем.
$query="SELECT {$wpdb->posts}.post_parent, {$wpdb->posts}.ID
FROM {$wpdb->posts}
INNER JOIN {$wpdb->term_relationships} ON ({$wpdb->posts}.post_parent = {$wpdb->term_relationships}.object_id)
INNER JOIN {$wpdb->term_taxonomy} ON ({$wpdb->term_relationships}.term_taxonomy_id = {$wpdb->term_taxonomy}.term_taxonomy_id)
WHERE {$wpdb->posts}.post_type = 'attachment'
AND {$wpdb->term_taxonomy}.taxonomy = 'category' AND {$wpdb->term_taxonomy}.term_id IN ('{$wpdb->escape($category_filter)}')
AND {$wpdb->posts}.post_password = ''
AND {$wpdb->posts}.post_mime_type IN ('image/jpeg', 'image/gif', 'image/png')
GROUP BY {$wpdb->posts}.post_parent
ORDER BY {$order_by}
LIMIT {$limit};";
( полный код на pastebin )
К сожалению, у него есть три ошибки:
Я думаю, что пароль-проверка неверна, так как она проверяет вложение, а не parent_post, верно?(поддерживает ли WordPress вложения галереи, защищенные паролем?)случайные посты, но внутри всегда одни и те же картинки (первая).
Итак - я скромно прошу вашего SQL-фу.Как один оба выбирают случайного родителя (сначала проверяя опубликованный статус), а затем случайный идентификатор изображения, принадлежащий этому родителю, все в одном запросе?
(я мог бы выбрать все вложений, упорядоченные в случайном порядке, перебирая их все и просто получая первые $limit
от уникальных родителей. Но это приводит к тому, что родители с большим количеством изображений выбираются слишком часто.)
«Когда ответ ускользает от вас, измените вопрос ...»
Я только что выпустил плагин , который позволяет массово выбирать «избранные изображения поста», прямо измедиа библиотека.Ядро моей функции составило от ~ 45 строк до этого;
foreach($potential_parents as $parent){
if(has_post_thumbnail($parent->ID)) {
$image = get_post_thumbnail_id($parent->ID);
}
}
Это не случайно, но сайт выглядит лучше, и посетителям легче перемещаться по контенту теперь, когда миниатюры соответствуют друг другу.