2014-04-23 14 views
9

Tôi có WP_Query lập luận sau:Truy vấn Wordpress hiển thị bài đăng trong mảng post__in trống?

$posts = new WP_Query(array(
     'post__in' => $postids, 
     'meta_key' =>'ratings_average', 
     'orderby'=>'meta_value_num', 
     'order' =>'DESC', 
    )); 

$ postids là một mảng của id đó được lấy từ WP_Query khác. Vấn đề của tôi ở đây là ngay cả khi $ postids trống, Wordpress loop hiển thị các bài đăng. Làm thế nào tôi có thể quản lý điều này mà nó không hiển thị bất kỳ bài đăng nào nếu $ postids trống.

+0

nó có hoạt động nếu bạn bao gồm trường 'post_type' trong truy vấn không? – celeriko

Trả lời

8

này không trực tiếp khắc phục vấn đề với post__in nhưng tôi không hiểu tại sao điều này sẽ không làm việc ..

if(!empty($postids)){ 
    $posts = new WP_Query(array(
     'post__in' => $postids, 
     'meta_key' =>'ratings_average', 
     'orderby'=>'meta_value_num', 
     'order' =>'DESC', 
    )); 
} else { 
    //Do something else or nothing at all.. 
} 

như bạn sẽ nhìn thấy cuộc gọi WP_Query sẽ chỉ xảy ra nếu $postids có giá trị/trong đó. nếu không, thì không có cuộc gọi nào được thực hiện tới WP_Query và vòng lặp sẽ không bao giờ xảy ra, giống như truy vấn của bạn trả về 0 bài đăng.

+1

Cảm ơn! điều này giải quyết vấn đề của tôi :), Nhưng tôi đã tự hỏi tại sao wordpress hiển thị bài ngay cả khi mảng là trống – user48752

+3

như bạn có thể nhìn thấy từ [báo cáo lỗi này] (https://core.trac.wordpress.org/ticket/12212) WP devs đã biết về vấn đề này trong một thời gian nhưng có vẻ như họ không có kế hoạch sửa chữa nó bất cứ lúc nào sớm. Tôi đã không đọc qua toàn bộ chủ đề nhưng có vẻ như lý do họ không làm bất cứ điều gì về lỗi là 1) họ không thực sự có được một sửa chữa làm việc và 2) họ tin rằng đây là một cái gì đó mà chủ đề nên xử lý không phải là cốt lõi. không chắc chắn nếu tôi đồng ý nhưng im không phải là một dev lol WP, tôi hy vọng điều này sẽ giúp! – celeriko

+0

Cảm ơn rất nhiều thông tin của bạn :) – user48752

0

Có thể bạn có một số bài đăng dính dính. Trong trường hợp này, WordPress sẽ thêm các bài đăng đó vào truy vấn của bạn.

Giải pháp là đặt 'ignore_sticky_posts' => 1. Áp dụng mã đó cho mã của bạn:

$posts = new WP_Query(array(
    'post__in' => $postids, 
    'ignore_sticky_posts' => 1, 
    'meta_key' =>'ratings_average', 
    'orderby'=>'meta_value_num', 
    'order' =>'DESC', 
)); 
0

Để giữ cho luồng phù hợp với WP_Query. Sử dụng nó như thế này:

$postIdArray = array(
     1, 2, 3 
    ); 

    $queryArgs = array(
     'post_type' => 'any', 
     'post_status' => 'published', 
     'post__in' => ((!isset($postIdArray) || empty($postIdArray)) ? array(-1) : $postIdArray) 
    ); 

Bằng cách này bạn vẫn có thể mã chống lại đối tượng WP_Query.

Ví dụ:

$postIdArray = array(
     1, 2, 3 
    ); 

    $queryArgs = array(
     'post_type' => 'any', 
     'post_status' => 'published', 
     'post__in' => ((!isset($postIdArray) || empty($postIdArray)) ? array(-1) : $postIdArray) 
    ); 

    $postQuery = new \WP_Query($queryArgs); 
    $postCount = $postQuery->post_count; 
    $totalCount = $postQuery->found_posts; 
1

Như đã đề cập, devs wp không muốn để sửa lỗi này. Có nói rằng, bạn có thể chuyển một mảng ID không hợp lệ không trống, như sau:

if(empty($postids)) { 
    $postids = ['issue#28099']; 
} 

$posts = new WP_Query(array(
    'post__in' => $postids, 
    'meta_key' =>'ratings_average', 
    'orderby'=>'meta_value_num', 
    'order' =>'DESC', 
)); 

Bạn thực hành không tốt? Vâng, tôi không chắc chắn từ bên nào mặc dù ...

Các vấn đề liên quan