Intereting Posts
Может загружаться через FTP, но не через загрузчик WP Различные wp_mail_from и wp_mail_from_name для конкретных ситуаций Какую настройку следует настроить для перемещения новой папки сайта? Как переписать URL страницы Попытка упаковать сообщения для повторной публикации партнером за пределами Получить имя шаблона по полному URL-адресу Как я могу изменить вывод виджета WordPress по умолчанию? Где скопировать файлы woocommerce в мою собственную тему, чтобы избежать редактирования основного плагина? Как я могу использовать оператор if? Как связать миниатюры галереи с разными URL-адресами, используя собственную галерею wp? Плагин ReOrder Post Within Categories с изображением Где получить информацию о полях массива в $ _REQUEST? Минимальный PHP необходим для WordPress template_include фильтр не отображает пользовательский шаблон Получить категорию и выдержку из wp_get_recent_posts

Как получить только носители, которые уже были прикреплены к сообщению / странице?

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

$cola = new WP_Query( array( 'post_type' => 'attachment', 'post_status' => 'inherit', 'posts_per_page' => 15, 'post_mime_type' => 'image/jpeg', 'orderby' => 'date' )); 

это работает отлично. За исключением теперь мы используем AdRotate и хотим показывать рекламу на веб-сайте, но мы не хотим, чтобы эти объявления были добавлены в запрос выше.

Простым решением для этого было бы только получение медиафайлов, прикрепленных к сообщению / странице, поскольку объявления никогда не привязаны ни к чему. Это можно было бы реализовать, используя post_parent: array(_of_all_post_ids) – за исключением того, что у нас уже есть около 4k сообщений, поэтому это определенно не очень хороший подход.

Любые идеи, как это сделать?

Примечание: мой клиент не технический специалист, поэтому я исключаю использование FTP для использования папки баннера, созданной AdRotate на wp-контенте. Для их запланированного использования медиа-галерея идеально подходит для рекламы.

Solutions Collecting From Web of "Как получить только носители, которые уже были прикреплены к сообщению / странице?"

Аналогичный подход к вашей идее post_parent заключается в добавлении фильтра в posts_where :

 function bbg_filter_out_non_attachments( $sql ) { global $wpdb; // Maybe do some conditional logic to decide whether to filter this query, then... return $sql . " AND $wpdb->posts.post_parent != 0 "; } add_filter( 'posts_where', 'bbg_filter_out_non_attachments' ); 

Другой способ – выполнить ручной запрос для идентификаторов сообщений без post_parent , а затем передать его post__not_in :

 $ad_ids = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_parent = 0 AND post_type = 'attachment'" ) ); $query_args['post__not_in'] = $ad_ids; // etc 

Если вам не нравится идея смешивания непосредственно с SQL, вы также можете объединить что-то вместе, добавляя часть постмета к каждому элементу, загруженному через медиабиблиотеку (вместо нового сообщения), а затем meta_query параметр meta_query в вашем WP_Query . Обратите внимание, однако, что это не будет таким эффективным, как просто поиск post_parent (который уже есть данные и не требует подключения к таблице).