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.

Tomasz
źródło
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 );
aniskhan001
źródło
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”.

Dwayne Charrington
źródło
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 ();

Tim Bowen
źródło
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 );
erachnid
źródło
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 =>

subhash jangid
źródło
-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

adamf
źródło
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