Intereting Posts
Что означает -> означает в WordPress? В версиях WP> = 4.0 используется FORCE_SSL_LOGIN для принудительного HTTPS для всего сеанса администратора? Доступ к защищенному объекту сообщения Как я могу сделать вывод wp_list_categories li с классом-slug как класс для своих детей? WP 3.0.5: Лучший способ добавить пользовательские обмены для почтовых категорий? Как перечислить страницы для братьев и сестер и включить их? Как использовать другие короткие коды внутри формы контакта 7-формы? Как настроить страницу Landing HTML5 на сайте WordPress Изменить цвет фона для шаблона CPT Я не могу получить доступ к функциям wordpress из вызова ajax php Получить CSS сообщений Идентификатор блога add_blog_option Как сохранить и получить метаданные в приложении? Что нужно передать для $ required_dirs при вызове _unzip_file_pclzip (aka PclZip)? В чем разница между прямым вызовом функции и вызовом функции с помощью add_action?

Как исключить все изображения из wp_query?

Я хочу запросить вложения и исключить все изображения.

Я могу видеть, как включать только изображения, используя 'post_mime_type' => 'image/*' , но я не мог найти никакого способа достижения противоположного. Есть ли какой-либо эквивалент posts__not_in ?

В значительной степени решение состоит в том, чтобы включить все мимы, кроме изображений. WordPress имеет отличную небольшую функцию, где он хранит все принятые mime-типы, называемые get_allowed_mime_types() (умно названные), которые возвращают Array () из mimes. Все, что нам нужно сделать, это получить разницу между возвращаемым массивом и массивом типов mime, которые мы не хотим в нашем запросе:

 $unsupported_mimes = array( 'image/jpeg', 'image/gif', 'image/png', 'image/bmp', 'image/tiff', 'image/x-icon' ); $all_mimes = get_allowed_mime_types(); $accepted_mimes = array_diff( $all_mimes, $unsupported_mimes ); $attachment_query = new WP_Query( array( 'post_type' => 'attachment', 'post_status' => 'inherit', 'post_mime_type' => $accepted_mimes, 'posts_per_page' => 20, ) ); 

Если вы также хотите включать в себя типы сообщений, отличные от вложений (например, сообщения, страницы), которые не имеют никакого типа mime, вам нужно будет использовать фильтр posts_where :

 add_filter( 'posts_where' , 'remove_images' ); function remove_images($where) { global $wpdb; $where.=' AND '.$wpdb->posts.'.post_mime_type NOT LIKE \'image/%\''; return $where; } 

Я почти уверен, что не существует эквивалента posts_not_in для типов mime.

Конечно, вы можете запросить все вложения, являющиеся изображениями. Предпочтительно просто вернуть идентификаторы через fields параметров, установленные для ids . Затем вы можете использовать эти ID с posts__not_in во втором запросе. Недостатком является то, что вам нужны два запроса.

Другая возможность – posts_where фильтр posts_where и применить некоторый SQL для получения результата, как вы этого хотите.