Hiển thị bài đăng phổ biến trong một trang web php khác thông qua API WP REST


9

Tôi cần hiển thị các bài đăng phổ biến và gần đây trong một trang web PHP khác trong cùng một tên miền.

Thí dụ:

  1. www.example.com -> trang web chính (php, mysql)
  2. www.example.com/blog -> Blog WordPress

Cần hiển thị các bài đăng phổ biến, gần đây của blog trong trang web chính.

Xin lưu ý rằng blog và trang web chính sử dụng hai cơ sở dữ liệu riêng biệt.

Tôi quyết định sử dụng plugin WP REST JSON API cho điều đó. Bây giờ tôi có câu hỏi khác nhau.

Tôi sử dụng mã sau đây để lấy bài đăng phổ biến tuần trước. Điều tôi thực sự cần là có được dữ liệu tương tự thông qua lệnh gọi API.

$args = array(
    'date_query' => array( array( 'after' => '1 week ago' ) ),  
    'posts_per_page' => $recent_posts_count,
    'ignore_sticky_posts' => 1,
    'meta_key' => 'post_views_count',
    'orderby' => 'meta_value_num',
    'order' => 'DESC'
);
$popularposts = new WP_Query( $args );

Làm thế nào tôi có thể làm điều đó?


Điều này đã được hỏi rất nhiều lần. Vui lòng sử dụng tìm kiếm.
kraftner

1. Nếu bạn có một câu hỏi mới, xin vui lòng mở một câu hỏi mới. Trong trường hợp này có thể ổn vì nó không hoàn toàn mới. Dù sao tiêu đề là sai lệch bây giờ. 2. Bạn đã xem tài liệu: wp-api.org
kraftner

Tôi cũng đã cập nhật tiêu đề, tuy nhiên tôi sẽ xem qua tài liệu, cảm ơn
Janith Chinthana

Câu trả lời:


8

Tôi sẽ cung cấp cho bạn một câu trả lời nhỏ cho bản cập nhật của bạn, thực hiện điều này với API WP . API có khả năng sử dụng WP_Query giống như trong lõi, nhưng về các tham số get trong url.

Một URL để kéo nội dung từ Trạng thái bài đăng sẽ như thế này:

http://example.com/wp-json/posts

Để lấy nội dung với các tham số WP_Query mà bạn đã sử dụng, bạn có thể làm như thế này:

http://example.com/wp-json/posts?filter[posts_per_page]=2&filter[order]=ASC

Bạn có thể xây dựng truy vấn tùy chỉnh của mình với tất cả các tham số trong url. Bạn có thể thấy cách thức lấy dữ liệu đó cảm thấy quen thuộc khi sử dụng WP_Querycho một vòng lặp WordPress tiêu chuẩn. Nếu bạn không chỉ định tham số, mặc định WP_Querysẽ được sử dụng.

Kết quả là json, mà bạn có thể phân tích và sử dụng cho trang web bên ngoài của bạn.

Xem thêm trang web của API để biết thêm thông số và tài liệu.

Cập nhật cho date_query

API không thể tạo kết quả cho truy vấn như thế nào query_date. Xem tài liệu cho tất cả các thông số có thể.

Nhưng phiên bản mới sẽ phát hành trong vài ngày, vài tuần. Và xem vấn đề này để thảo luận về một giải pháp cho truy vấn ngày này. Thay thế sử dụng bộ lọc tùy chỉnh thông qua hook, như:

// Allow datequery in /posts filter
add_filter( "json_query_vars", function( $query_args ) {
    return array_merge( $query_args, 
        array( "date_query" => array( array( "after" => "1 week ago" ) ) )
    );
} );

Cập nhật cho meta_query

API cũng không thể là tính năng này của WP-Query mặc định. Nhưng bạn có thể sử dụng một cái móc để nâng cao API theo yêu cầu này. Cũng ở đây một ví dụ nhỏ.

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

function add_meta_query( $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;
}

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

Cập nhật truy vấn meta dựa trên câu trả lời này .


Bạn có biết làm thế nào để chuyển đổi dòng 'date_query' => array( array( 'after' => '1 week ago' ) ), dưới dạng chuỗi truy vấn không
Janith Chinthana

Tôi muốn chấp nhận điều này như một câu trả lời, tuy nhiên nếu bạn có bất kỳ ý tưởng nào liên quan đến nhận xét trên, bạn có thể chia sẻ suy nghĩ của mình.
Janith Chinthana

các bộ lọc khác ngoài filter[posts_per_page]=2&filter[order]=ASChai bộ lọc này không hoạt động, vì vậy nó luôn chỉ cung cấp các bài đăng gần đây
Janith Chinthana

@JanithChinthana Tôi đã kiểm tra lại, bộ lọc param hoạt động tốt. - Ví dụ http://localhost/wpbeta/plugins/wp-json/posts?filter[posts_per_page]=1&filter[order]=ASC. Nhiều hơn nữa trong bản cập nhật của tôi dưới đây trong câu trả lời.
bueltge

cảm ơn đã cập nhật, có post_per_page& orderđang hoạt động, nhưng còn về điều đó meta_key. Nó làm việc với cái này hay tôi cần phải làm thêm cho cái đó?
Janith Chinthana
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.