人気の投稿をWP REST JSON APIを介して別のPHP Webサイトに表示する


9

同じドメインの別のPHP Webサイトで人気のある投稿と最近の投稿を表示する必要があります。

例:

  1. www.example.com ->メインWebサイト(php、mysql)
  2. www.example.com/blog -> WordPressブログ

ブログの人気のある最近の投稿をメインWebサイトに表示する必要があります。

ブログとメインWebサイトは2つの別々のデータベースを使用していることに注意してください。

そのために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 2015

1.新しい質問がある場合は、新しい質問を開いてください。この場合、まったく新しいものではないため、問題ない可能性があります。とにかく、タイトルは誤解を招くようになりました。2.ドキュメントを見た:wp-api.org
kraftner '28

タイトルも更新しましたが、ドキュメントを確認します。ありがとう
Janith Chinthana '28

回答:


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

これで、このようなRESTfulなJSONを呼び出して、サーバー上に既にあるWp_query投稿フィルターを模倣できます。

?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 '29

これを回答として受け入れたいと思いますが、上記のコメントについて何かご意見があれば、ご意見をお聞かせください。
Janith Chinthana、2015

filter[posts_per_page]=2&filter[order]=ASCこの2つ以外のフィルターは機能しないため、常に最新の投稿のみが表示されます
Janith Chinthana

@JanithChinthanaもう一度テストしましたが、フィルターパラメーターは正常に機能します。-例としてhttp://localhost/wpbeta/plugins/wp-json/posts?filter[posts_per_page]=1&filter[order]=ASC。答えの以下の私の更新ではるかに。
bueltge 2015

更新のためのおかげで、はいpost_per_pageorder取り組んでいるが、何についてmeta_key。これで動作しますか、それとも追加の作業が必要ですか?
Janith Chinthana、2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.