Làm cách nào để loại trừ phân loại tùy chỉnh khỏi vòng lặp bài


22

Có cách nào đơn giản hay dễ dàng để loại trừ tất cả các bài đăng khỏi phân loại tùy chỉnh trong vòng lặp không? Tôi đã nhìn cao và thấp, và cả SE, SO hay Google dường như không có câu trả lời thẳng thắn.

Tôi biết nó có thể được thực hiện thông qua truy vấn WPDB, nhưng điều đó có vẻ giống như một sợi dây lớn để nhảy cho một thứ khá đơn giản.


5
Bất kỳ bài đăng nào có bất kỳ điều khoản nào trong phân loại đó, hoặc bạn đang đề cập đến một thuật ngữ cụ thể của phân loại tùy chỉnh của bạn? Ví dụ: Nếu phân loại của tôi là trái cây và tôi có hai thuật ngữ, táo và cam, tôi có muốn loại trừ tất cả các bài viết có trái cây hay chỉ những bài có táo?
t31os

để mở rộng @ t31os Q: post_tag, danh mục, link_carget, v.v ... đều là các nguyên tắc phân loại _builtin. Vì vậy, ngay cả khi bạn gọi thẻ bài là "thuật ngữ", thì đó vẫn chỉ là phân loại (không phân cấp) và trên cùng một "cấp" như "phân loại" (phân cấp).
kaiser

Để tiếp tục ví dụ @ t31os: Tôi đang cố gắng loại trừ tất cả các bài đăng có trong trái cây phân loại (bất kể chúng ở trong 'táo', 'lê' hay 'cam').
Thomas

Câu trả lời:


13

Bạn sẽ muốn sử dụng NOT EXISTStoán tử cùng với việc chuyển sên phân loại, điều này cho biết truy vấn không bao gồm bất kỳ danh mục nào được chọn từ phân loại tùy chỉnh của bạn trong vòng lặp.

Để loại trừ tất cả các bài đăng trong "trái cây" phân loại (bất kể loại trái cây nào), đây là đoạn trích:

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

$query = new WP_Query( $args );

2
Điều này có vẻ như sẽ hiệu quả hơn so với việc nói NOT INsố XX terms. Danh sách các thuật ngữ đó có thể phát triển đến một kích thước lớn, nhưng điều này sẽ bao gồm tất cả các điều khoản với tên phân loại đó.
italiansoda

Mặc dù đây là câu trả lời cho câu hỏi của OP (được nêu lên), hầu hết chúng ta có thể muốn loại trừ một thuật ngữ hoặc bộ thuật ngữ cụ thể. Đối với điều đó, bạn muốn câu trả lời này .
rinogo

26

Giải pháp cho vấn đề này không thực sự được công khai, nhưng nó nên được.

Bạn có thể làm như sau:

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

Đối số toán tử có thể có các điều khoản khác, nhưng về cơ bản, đoạn mã trên nói rằng hãy lấy tất cả các bài đăng từ 'danh mục' phân loại 'không có thuật ngữ' mèo 'hoặc' chó '.


Tài giỏi. Nhưng sau đó tôi vẫn cần nhập thủ công mọi thuật ngữ trong phân loại đó, đúng không?
Thomas

Tôi không theo dõi bạn xin lỗi. Trong mảng thuật ngữ, bạn xác định các giá trị thuật ngữ mà bạn muốn loại trừ khỏi truy vấn vòng lặp của mình. Nếu bạn muốn chúng là động, có lẽ bạn có thể thêm một giá trị meta tùy chỉnh vào mỗi bài đăng và sau đó kiểm tra giá trị của khóa meta đó trong truy vấn của bạn và đặt nó theo cách đó nếu bạn muốn nói.
Dwayne Charrington

À. Tôi hiểu ý của bạn, nhưng điều đó thực sự cồng kềnh.
Thomas

Tôi chưa thực sự nhìn, nhưng chắc chắn phải có một plugin thực hiện những gì bạn đang hỏi?
Dwayne Charrington

8

Dưới đây là cách thực hiện đối với các loại bài đăng tùy chỉnh và phân loại tùy chỉnh:

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

        ),
   )
);

Điều này hoạt động hoàn hảo để loại trừ phân loại tùy chỉnh khỏi loại bài đăng tùy chỉnh .. Chỉ muốn thêm mã vòng lặp truy vấn để hoàn thành đoạn mã: while ($ the_query-> have_posts ()): $ the_query-> the_post ();


0

Tôi đã làm như sau để loại trừ các bài đăng từ một thuật ngữ phân loại nhất định:

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

Mã này không bao gồm trạng thái => được bán từ post_type => danh sách


-1

Tôi sử dụng "Plugin WordPress" Hiển thị danh mục 'của RYO "có vẻ hoạt động khá tốt.

Bạn có thể quyết định trên trang quản trị những danh mục nào được hiển thị hoặc loại trừ khỏi các khu vực khác nhau.

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

-Adam


4
Dường như với tôi rằng việc phải cài đặt một plugin bổ sung để làm điều này là trên hết. Tôi thà giữ sự phụ thuộc của mình ở mức tối thiểu và chắc chắn phải có cách để thực hiện điều này trong vòng lặp.
Thomas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.