Jak wykluczyć niestandardową systematykę z pętli postu


22

Czy istnieje prosty lub łatwy sposób na wykluczenie wszystkich postów z niestandardowej systematyki w pętli? Patrzyłem wysoko i nisko i ani SE, SO, ani Google nie wydają się mieć prostej odpowiedzi.

Wiem, że można to zrobić za pomocą zapytania WPDB, ale wygląda to na masywną linę do przeskoczenia na coś, co powinno być dość proste.


5
Jakieś posty, które mają jakieś warunki w tej taksonomii, czy też odwołujesz się do określonego terminu swojej taksonomii niestandardowej? Przykład: jeśli moją taksonomią są owoce i mam dwa terminy, jabłko i pomarańcza, czy chciałbym wykluczyć wszystkie posty zawierające owoce, czy tylko te, które zawierają jabłka?
t31os

przedłużyć @ t31os P: znacznik_tagi, kategoria, kategoria_połączenia itp. to wszystkie wbudowane taksonomie. Tak więc, nawet jeśli nazwałbyś znaczniki pocztowe „terminami”, nadal jest to tylko taksonomia (niehierarchiczna) i na tym samym „poziomie” co taksonomia „kategoria” (hierarchiczna).
kaiser

Aby kontynuować przykład @ t31os: staram się wykluczyć wszystkie posty z owocu taksonomii (niezależnie od tego, czy są w „jabłkach”, „gruszkach” czy „pomarańczach”).
Thomas

Odpowiedzi:


13

Chciałbyś użyć NOT EXISTSoperatora wraz z przekazaniem informacji o taksonomii, która mówi zapytaniu, aby nie włączać żadnej pętli z wybranej kategorii z taksonomii niestandardowej.

Aby wykluczyć wszystkie posty z taksonomii „owoce” (niezależnie od rodzaju owoców), oto fragment:

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

$query = new WP_Query( $args );

2
Wygląda na to, że powinno być bardziej wydajne niż powiedzenie NOT INXX terms. Ta lista terminów może urosnąć do dużych rozmiarów, ale powinna obejmować wszystkie terminy o nazwie tej taksonomii.
italiansoda

Chociaż jest to odpowiedź na pytanie PO (pozytywnie ocenione), większość z nas prawdopodobnie chce wykluczyć określony termin lub zestaw warunków. Do tego chcesz tę odpowiedź .
rinogo

26

Rozwiązanie tego nie jest tak naprawdę nagłośnione, ale powinno być.

Możesz wykonać następujące czynności:

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

Argument operatora może przyjmować inne terminy, ale powyższy kod w zasadzie mówi „pobierz wszystkie posty z kategorii taksonomicznej”, które nie zawierają terminów „kot” lub „pies”.


Sprytny. Ale nadal musiałbym ręcznie wpisywać każdy termin w tej taksonomii, prawda?
Thomas

Przepraszam, nie podążam za tobą. W tablicy warunków definiujesz wartości terminów, które chcesz wykluczyć z zapytania w pętli. Jeśli chcesz, aby były dynamiczne, być może możesz dodać niestandardową wartość meta do każdego postu, a następnie sprawdzić wartość tego meta klucza w zapytaniu i ustawić go w ten sposób, jeśli to masz na myśli.
Dwayne Charrington

Ach Rozumiem, co masz na myśli, ale to naprawdę kłopotliwe.
Thomas

Tak naprawdę nie wyglądałem, ale na pewno musi być wtyczka, która spełnia Twoje wymagania?
Dwayne Charrington

8

Oto jak to zrobić dla niestandardowych typów postów i niestandardowych systematyk:

$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')

        ),
   )
);

Działa to idealnie, aby wykluczyć niestandardową taksonomię z niestandardowego typu postu. Chciałem tylko dodać kod pętli zapytania, aby zakończyć fragment kodu: while ($ the_query-> have_posts ()): $ the_query-> the_post ();


0

Wykonałem następujące czynności, aby wykluczyć posty z określonego terminu systematyki:

$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'
            ),
        )
    )
);

Ten kod wyklucza status => sprzedany z list post_type =>


-1

Używam wtyczki WordPress do widoczności kategorii „RYO”, która wydaje się działać całkiem dobrze.

Na stronie administratora możesz zdecydować, które kategorie są widoczne lub wykluczone z różnych obszarów.

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

-Adam


4
Wydaje mi się, że konieczność zainstalowania dodatkowej wtyczki jest zbyt wysoka. Wolę ograniczyć moje zależności do minimum i na pewno musi być sposób, aby to zrobić w pętli.
Thomas
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.