Як виключити власну таксономію з циклу поста


22

Чи є простий чи простий спосіб виключити всі повідомлення зі спеціальної таксономії в циклі? Я виглядав високо і низько, і ні SE, SO, ні Google, схоже, не мають прямої відповіді.

Я знаю, що це можна зробити за допомогою WPDB-запиту, але це просто здається масивним канатом, щоб стрибнути на щось, що повинно бути досить простим.


5
Будь-які посади, які мають будь-які терміни в цій таксономії, чи ви маєте на увазі певний термін вашої спеціальної таксономії? Приклад: Якщо моя таксономія є фруктовою, і я маю два терміни, яблучне та апельсинове, я б хотів виключити всі посади, які мають фрукти, або лише ті, у яких яблука?
t31os

щоб поширити @ t31os Q: post_tag, категорія, link_category і т. д. - все це побудовані таксономії. Отже, навіть якщо ви називатимете поштові теги "термінами", це все одно лише таксономія (неієрархічна) і на тому ж "рівні", що і "категорія" (ієрархічна) таксономія.
кайзер

Для продовження прикладу @ t31os: Я намагаюся виключити всі повідомлення, що містять плід таксономії (незалежно від того, чи є вони в "яблуках", "грушах" або "апельсинах").
Томас,

Відповіді:


13

Ви хочете використовувати NOT EXISTSоператора разом із передачею слизової таксономії, яка повідомляє запит не включати жодну обрану категорію із вашої власної систематики всередині циклу.

Щоб виключити всі посади, що входять до систематики "фрукти" (незалежно від виду фруктів), ось фрагмент:

$args = array(
    'post_type'      => 'post',
    'tax_query'      => array(
        array(
            'taxonomy' => 'fruit',
            'operator' => 'NOT EXISTS'
        )
    )
);

$query = new WP_Query( $args );

2
Схоже, це має бути ефективнішим, ніж вимова NOT INXX числа terms. Цей перелік термінів може збільшитися до великого розміру, але це повинно охоплювати всі терміни з назвою цієї систематики.
italiansoda

Хоча це і є відповідь на питання ОП (оновлене), більшість із нас, ймовірно, хочуть виключити конкретний термін або набір термінів. Для цього ви хочете цю відповідь .
rinogo

26

Рішення цього насправді не так розголошується, але воно повинно бути.

Ви можете зробити наступне:

$args['tax_query'] = array(
    array(
        'taxonomy' => 'category',
        'terms' => array('cat', 'dog'),
        'field' => 'slug',
        'operator' => 'NOT IN',
    ),
);
query_posts($args);

Аргумент оператора може приймати інші терміни, але вищенаведений код в основному говорить про отримання всіх постів з категорії "таксономія", які не мають термінів "кішка" або "собака".


Розумний. Але тоді мені все одно потрібно вручну ввести кожен термін у цій таксономії, правда?
Томас

Я не стежу за тобою, вибач. У масиві термінів ви визначаєте значення терміна, які потрібно виключити зі свого запиту циклу. Якщо ви хотіли, щоб вони були динамічними, ви можете додати спеціальне мета-значення до кожної публікації, а потім перевірити значення цього мета-ключа у вашому запиті та встановити його таким чином, якщо це саме ви маєте на увазі.
Дуейн Чаррінгтон

Ага. Я бачу, що ви маєте на увазі, але це справді громіздко.
Томас

Я насправді не дивився, але обов'язково повинен бути плагін, який робить те, що ви тоді просите?
Дуейн Чаррінгтон

8

Ось як це зробити для спеціальних типів публікацій та спеціальних таксономій:

$happening = new WP_Query(
array( 
  'post_type'  => 'news',        // only query News post type
  'tax_query' => array(
    array(
        'taxonomy'  => 'news-cat',
        'field'     => 'slug',
        'terms'     => 'media', // exclude items media items in the news-cat custom taxonomy
        'operator'  => 'NOT IN')

        ),
   )
);

Це прекрасно працювало, щоб виключити спеціальну таксономію зі спеціального типу пошти. Просто хотів додати код циклу запитів, щоб закінчити фрагмент: while ($ the_query-> have_posts ()): $ the_query-> the_post ();


0

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

$argos = array( 
    'tax_query' =>  array (
        array(
            'taxonomy' => 'topics', // My Custom Taxonomy
            'terms' => 'college', // My Taxonomy Term that I wanted to exclude
            'field' => 'slug', // Whether I am passing term Slug or term ID
            'operator' => 'NOT IN', // Selection operator - use IN to include, NOT IN to exclude
        ),
    ),
    'post_type'=>'page', // Post type I want to show, can be a custom post type too
    'posts_per_page' => -1,
    'orderby' => 'title',
    'order'=>'ASC',
    'post_parent' =>$post->ID // show child posts or pages of current page/post
); 

$query = new WP_Query( $args );

0
query_posts( array(
    'post_type' => 'listings',
    'tax_query' => array(
        array(
            'taxonomy' => 'status',
            'field'    => 'slug',
            'terms'    => 'sold',
            'operator' => 'NOT IN'
            ),
        )
    )
);

Цей код виключає статус => проданий із списків post_type =>


-1

Я використовую «Видимість категорії RYO» «Плагін WordPress», яка, здається, працює досить добре.

Ви можете визначити на сторінці адміністратора, які категорії можуть бути видимими та виключені з різних областей.

http://ryowebsite.com/wp-plugins/category-visibility/

-Адам


4
Мені здається, що для цього необхідно встановити додатковий плагін, щоб це зробити. Я вважаю за краще звести свої залежності до мінімуму, і, безумовно, повинен бути спосіб зробити це в циклі.
Томас,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.