1

会社の Web サイトに Wordpress API をインストールして、そこからデータを取得して新しい会社の Web サイトに表示できるようにしました。初期データの取得と表示に関しては、すべて正常に動作します (元の Web サイトの特定のカテゴリから新しい Web サイトの特定のページへの投稿)。

これは、バー/レストランで行われる既存の Web サイトの「Whats on」ページに入力されるイベント用です。新しいサイトは純粋にイベント専用であり、両方のサイトでイベントを追加/修正する手間を省くために、API を使用するのが最善であると考えました。

イベントの完全なリストを取得するには(これは機能します)、次を使用します。

$response = wp_remote_get( 'http://restuarantdomain.com/wp-json/wp/v2/posts?filter[category_name]=live-events&per_page=50' );

また、個々の投稿を表示するには、次を使用する必要があることも知っています。

$response = wp_remote_get( 'http://restaurantdomain.com/wp-json/wp/v2/posts?filter[name]=event_name );

私が解決できないのは、新しいサイトに「わかりやすい」URL を作成することです。この URL は、関数を呼び出して個々の投稿の詳細を取得するページに移動します。

たとえば、URL http://eventdomain.com/whats-on/event-name (上記の最初の API 呼び出しによって取得されたイベント投稿のリスト内) が What's On ページに移動し、そのページでイベントを使用する必要があります-上記の 2 番目の API 呼び出しでパラメーターとして URL からの名前。しかし、Wordpress は、存在しない URL の形式のためにカテゴリと投稿名を検索するだけなので、404 を取得します。

私は何が欠けていますか?

4

1 に答える 1

0

カスタム エンドポイントを作成する必要があります。

たとえば、特定のカテゴリ内のすべての投稿をフィルタリングする場合は、これを行う必要があります

function my_cat_func( $data ) {
    $posts = get_posts( array(
        'cat' => $data['id'],
    ) );

    if ( empty( $posts ) ) {
        return null;
    }

    return $posts[0]->post_title;
}

次に、エンドポイント呼び出しを登録するアクションを追加する必要があります

add_action( 'rest_api_init', function () {
    register_rest_route( 'myplugin/v2', '/categoy/(?P<id>\d+)', array(
        'methods' => 'GET',
        'callback' => 'my_cat_func',
    ) );
} );

次に、このようなものを取得します

http://example.com/wp-json/myplugin/v2/categoy/(?P<id>\d+)

詳細と理解を深めるために、次のリファレンスを読むことをお勧めします: http://v2.wp-api.org/extending/adding/

この記事では、より多くの例を示すこともできます: https://webdevstudios.com/2015/07/09/creating-simple-json-endpoint-wordpress/ および https://deliciousbrains.com/wp-rest-api-customizing- endpoints-adding-new-ones/

注: このコードはオンザフライで書きましたが、動作するにはさらに努力が必要です。

于 2016-08-24T15:36:30.450 に答える