WP REST JSON API를 통해 다른 PHP 웹 사이트에서 인기있는 게시물 표시


9

같은 도메인의 다른 PHP 웹 사이트에서 인기있는 최신 게시물을 표시해야합니다.

예:

  1. www.example.com -> 메인 웹 사이트 (php, mysql)
  2. www.example.com/blog -> 워드 프레스 블로그

기본 웹 사이트에서 인기있는 최신 블로그 게시물을 표시해야합니다.

블로그와 기본 웹 사이트는 두 개의 별도 데이터베이스를 사용합니다.

WP REST JSON API 플러그인 을 사용하기로 결정했습니다 . 이제 다른 질문이 있습니다.

나는 지난주 인기있는 게시물을 검색하기 위해 다음 코드를 사용합니다. 실제로 필요한 것은 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 );

어떻게해야합니까?


이것은 여러 번 요청되었습니다. 검색을 이용하십시오.
kraftner

1. 새로운 질문이 있으면 새로운 질문을여십시오. 이 경우 완전히 새로운 것이 아니기 때문에 괜찮을 수도 있습니다. 어쨌든 제목이 잘못되었습니다. 2. 문서를 본 적이 : wp-api.org
kraftner을

제목도 업데이트했지만 문서를
검토하겠습니다.

답변:


8

WP API 를 사용하여 업데이트에 대한 작은 답변을 드리겠습니다 . API는 코어에서도 WP_Query를 사용할 수 있지만 URL의 get 매개 변수에 대해서는 가능합니다.

게시물 상태에서 콘텐츠를 가져 오는 URL은 다음과 같습니다.

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

익숙한 WP_Query 매개 변수를 사용하여 컨텐츠를 가져 오려면 다음과 같이하십시오.

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

URL에서도 모든 매개 변수를 사용하여 사용자 정의 쿼리를 작성할 수 있습니다. 해당 데이터를 가져 오는 방법 WP_Query이 표준 WordPress 루프에 익숙한 느낌을 알 수 있습니다 . 매개 변수를 지정하지 않으면 기본값 WP_Query이 사용됩니다.

결과는 json이며 외부 사이트를 구문 분석하고 사용할 수 있습니다.

더 많은 매개 변수 및 설명서 는 API 사이트를 참조하십시오 .

에 대한 업데이트 date_query

API는과 같은 검색어에 대한 결과를 만들 수 없습니다 query_date. 가능한 모든 매개 변수 는 설명서 를 참조하십시오 .

그러나 새 버전은 며칠, 몇 주 후에 릴리스됩니다. 이 날짜 쿼리의 솔루션에 대한 토론 은이 문제 를 참조하십시오 . 다음과 같이 후크를 통해 사용자 정의 필터를 사용하십시오.

// 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" ) ) )
    );
} );

에 대한 업데이트 meta_query

API는 기본 WP-Query의이 기능도 사용할 수 없습니다. 그러나 후크를 사용하여이 요구 사항에 맞게 API를 향상시킬 수 있습니다. 또한 여기 작은 예가 있습니다.

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;
}

이제 서버에 이미 Wp_query 게시물 필터를 모방하기 위해 JSON을 편안하게 호출 할 수 있습니다.

?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

이 답변을 기반으로 메타 쿼리 업데이트 .


'date_query' => array( array( 'after' => '1 week ago' ) ), 을 쿼리 문자열로 변환하는 방법을
알고 있습니까?

나는 이것을 대답으로 받아들이고 싶지만 위의 의견에 대한 아이디어가 있다면 생각을 공유 할 수 있습니다.
Janith Chinthana

filter[posts_per_page]=2&filter[order]=ASC이 두 개 이외의 필터 는 작동하지 않으므로 항상 최근 게시물 만 제공합니다.
Janith Chinthana

@JanithChinthana 다시 테스트 한 결과 필터 매개 변수가 제대로 작동합니다. -예로서 http://localhost/wpbeta/plugins/wp-json/posts?filter[posts_per_page]=1&filter[order]=ASC. 답변에서 아래 업데이트에 훨씬 더 있습니다.
bueltge

업데이트 주셔서 감사합니다, 예 post_per_page& order작동하지만 어떻습니까 meta_key. 이것으로 작동합니까, 아니면 추가 작업이 필요합니까?
Janith Chinthana
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.