Hiển thị bài viết không có thời hạn


7

Tôi đang làm việc trên một trang sản phẩm nơi tôi hiển thị các đánh giá từ loại bài đăng 'đánh giá' của mình, nếu tiêu đề trang sản phẩm phù hợp với thuật ngữ của tôi từ phân loại 'đánh giá sản phẩm'.

Thí dụ.

Tiêu đề trang sản phẩm: Tủ lạnh

Hiển thị (đánh giá) bài viết với:

  • Loại bài đăng: 'đánh giá'
  • Phân loại: 'đánh giá sản phẩm'
  • Thời hạn: Tủ lạnh

Điều này hoạt động hoàn toàn tốt. Nhưng đôi khi tôi không có đánh giá cho một sản phẩm (vì không có sự trùng khớp giữa tiêu đề và thời hạn của sản phẩm) và sau đó tôi muốn hiển thị các đánh giá 'Chung'. Trong trang web của tôi đây là những bài viết với:

  • Loại bài đăng: 'đánh giá'
  • Phân loại: 'đánh giá sản phẩm'
  • Thời hạn: Không có thời hạn (!!!)

Bài đăng này không có thuật ngữ từ phân loại 'đánh giá sản phẩm'.

Câu hỏi của tôi:

Làm cách nào tôi có thể hiển thị bài viết đánh giá mà không có thuật ngữ, nếu không có bài viết đánh giá phù hợp với tiêu đề sản phẩm.

Đây là những gì tôi có bây giờ:

function gtp_show_reviews( $number = 100, $term = null ) {
    $reviews = new WP_Query( array( 
        'post_type'         => 'reviews',
        'review-product'    => $term, // Fill this with product page slug (refrigerator)
    ));
    if( $reviews->have_posts() ) { 
        while( $reviews->have_posts() ) {
            $reviews->the_post();
            // The review
        }
    } 
    else {
        // Here I try to unset the 'review-product' term
        unset($reviews->query_vars['review-product']);
        unset($reviews->query_vars['term']);

        while( $reviews->have_posts() ) {
            $reviews->the_post();
            // Check if review has no term
            if( $reviews->has_term() == false ) {
               // The review
            }
        }   
    }

    wp_reset_postdata();
}

Đây sẽ là một truy vấn KHÔNG IN đắt tiền, bạn nên luôn luôn truy vấn những gì bạn muốn, không phải những gì bạn không muốn
Tom J Nowell

Câu trả lời:


7

Bạn không thể sử dụng cùng một đối tượng WP_Queryhai lần. Do đó, bạn cần tạo một số khác có tax_querytham số để tìm nạp các bài đăng không được gán cho bất kỳ thuật ngữ nào.

//fetch all reviews which have no assigned term in 'review-product'
$taxonomy  = 'review-product';
$post_type = 'reviews';
$args = [
    'post_type' => $post_type,
    'tax_query' => [
        [
            'taxonomy' => $taxonomy,
            'terms'    => get_terms( $taxonomy, [ 'fields' => 'ids'  ] ),
            'operator' => 'NOT IN'
        ]
    ]
];

$query = new \WP_Query( $args );

Ý tưởng là tìm nạp một danh sách tất cả các điều khoản trong phân loại của bạn và chuyển chúng làm đối số cho truy vấn thuế của bạn với NOT INnhà điều hành.

Vòng lặp thứ hai trong ví dụ của bạn sẽ đi qua WP_Queryđối tượng mới .


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.