API JSON JSON của WP (Ryan McCue) làm thế nào để truy vấn các bài đăng có dữ liệu meta cụ thể có quan hệ 'VÀ'?


7

Tôi sử dụng lớp Wp_query để truy vấn bài viết của mình. 15 bài đăng trong một mẫu được tải về khi tải trang và bộ lọc của chúng hoạt động tốt. Cuộn vô cực tìm nạp cho các bài đăng khác bằng các dịch vụ nghỉ ngơi JSON . Bộ lọc ở phía máy chủ hoạt động tốt nhưng tôi không biết cách chuyển logic từ máy chủ sang truy vấn thích hợp.

Mảng Meta_query được truyền cho Wp_query trên máy chủ:

meta_query

  0 =>  array (size=3)
    'key' => string 'homepage' (length=8)
    'value' => string 'false' (length=5)
    'compare' => string 'NOT EXISTS' (length=10)
  1 => array (size=2)
    'key' => string '_newsml_id' (length=10)
    'compare' => string 'NOT EXISTS' (length=10)
  'relation' => string 'AND' (length=3)

Làm thế nào để dịch nó vào truy vấn? cái gì đó như:

/ wp-json / bài đăng? bộ lọc [meta_query] [key] = trang chủ, _newsml_id & [meta_query] [so sánh] = NOTEXISTS

hoặc là

/ wp-json / bài đăng? bộ lọc [meta_query] [key] = trang chủ & bộ lọc [meta_query] [key] = _ newsml_id & [meta_query] [so sánh] = NOTEXISTS

Câu trả lời:


9

Xin lỗi vì đã trả lời câu hỏi của riêng tôi nhưng nó cũng có thể giúp một số nhà phát triển khác.

Tôi đã tạo bộ lọc bổ sung này 'json_query_var-meta_query'that trả về các đối số cần thiết.

function adjustQrry($data){
    $args = array();
    $args['relation'] = 'AND';

    foreach ($data as $key=>$value) {
        if ( 'relation' === $key ) {
            $args['relation'] = $data['relation'];
        }
        if (  substr($key, 0, 3) === 'key' ) {
            $arg_num = substr($key, 3);
            $args[(int)$arg_num]['key'] = $value;
        }
        if (  substr($key, 0, 7) === 'compare' ) {
            $arg_num_comp = substr($key, 7);
            $args[(int)$arg_num_comp]['compare'] = $value;
        }
    }
    return $args;
}

add_filter('json_query_var-meta_query', 'adjustQrry', 10, 1);

Bây giờ, tôi có thể gọi JSON yên tĩnh như thế để bắt chước bộ lọc bài đăng Wp_query đã có trên máy chủ:

?filter[meta_query][key]=_newsml_categories_newsstream&filter[meta_query][key2]=homepage&filter[meta_query][relation]=AND&filter[meta_query][compare]=NOT%20EXISTS&filter[meta_query][compare2]=NOT%20EXISTS

Tham chiếu: https://github.com/WP-API/WP-API/issues/337


5
Không cần phải xin lỗi vì đã trả lời câu hỏi của riêng bạn, đó là điều bạn nên làm nếu bạn có thể :)
Ian Dunn

Như @IanDunn chỉ ra, trả lời câu hỏi của bạn chắc chắn là một điều tốt. Bạn cũng có thể chấp nhận câu trả lời của mình để người khác biết bạn đã tìm thấy giải pháp
phatskat

0

WP REST API V2 thì sao? Tôi nghĩ rằng điều này không làm việc trên v2!

add_filter('json_query_var-meta_query', 'adjustQrry', 10, 1);

nó có nên như thế này không?

add_filter('rest_query_vars-meta_query', 'adjustQrry', 10, 1);

3
Tôi nghĩ rằng, bạn không nên tạo một câu hỏi mới như một câu trả lời, mà là một câu hỏi mới. Dù sao, tôi nghĩ rằng điều này sẽ hoạt động: github.com/WP-API/WP-API/issues/2452
hỗ trợ web

@web hỗ trợ cảm ơn bạn. vâng đó là câu hỏi của tôi quá :) bạn đã giúp đỡ nhiều. cảm ơn lần nữa
Amino
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.