web-dev-qa-db-ja.com

を呼び出す方法 REST 投稿が公開されたときのエンドポイント

新しい投稿が公開されたときにWordPressが特定のRESTエンドポイントを呼び出すようにして、最も重要な投稿データをJSON経由で渡す必要があります。

私はプラグイン、HookPressを見つけました、それは明らかにあなたが様々なイベントのためにウェブフックを設定させることによってちょうどそれをしました。残念ながら、2年以上更新されておらず、最近のバージョンのWordpress(> 4.6)では動作しません。

私はこれを達成することができる方法はありますか?

3
Marcello

新しいプラグインを書く必要はありません。テーマのfunctions.phpファイルにコードを追加するか、 子テーマ を作成することができます。

データをJSON形式にラップするには、json_encode関数を使用できます。投稿されたら投稿にフックし、データを送信します。次の機能では、投稿のタイトル、抜粋、および特集画像のURLをエンドポイントに送信します。

add_action('publish_post', 'call_the_endpoint',10,2);
function call_the_endpoint($post_id, $post){
    // Define an empty array
    $data = array();
    // Store the title into the array
    $data['title'] = get_the_title();
    // If there is a post thumbnail, get the link
    if (has_post_thumbnail()) {
        $data['thumbnail'] = get_the_post_thumbnail_url( get_the_ID(),'thumbnail' );
    }
    // Get the excerpt and save it into the array
    $data['excerpt'] = get_the_excerpt();
    // Encode the data to be sent
    $json_data = json_encode($data);
    // Initiate the cURL
    $url = curl_init('YOUR API URL HERE');
    curl_setopt($url, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($url, CURLOPT_POSTFIELDS, $json_data);
    curl_setopt($url, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($url, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json',
        'Content-Length: ' . strlen($json_data))
    );
    // The results of our request, to use later if we want.
    $result = curl_exec($url);
}

あなたがあなたのAPIとあなたがそれとどのようにやり取りするかについてもっと多くの情報を提供することができれば正確な答えを書くことは可能でしょう。しかし、これはあなたが探しているものを達成するためにpublish_postフックを使用する方法を知るための単純な例でした。

1
Jack Johansson

投稿ステータス遷移フックを使用できます。この場合、{status} _ {post_type}が最も適していると思われます。あなたが投稿について話していると仮定します。

<?php
/* Plugin Name: Publish to REST
Description: Whenever a Post is published, WP will call a REST endpoint.
*/
add_action('publish_post', 'wpse_send_rest_data', 10, 2);
function wpse_send_rest_data($ID, $post) {
    // Add your code to call the REST endpoint here.
    // The $post object is available so you can send post details.
    // Example: $post->post_title will give you the title.
    // $post->post_excerpt will give you an excerpt.
    // get_permalink($post) will give you the permalink.
}
?>

この場合、「投稿」タイプの投稿が「公開」ステータスに遷移するたびに(真新しい、更新、またはスケジュールされた投稿など)、カスタム関数が実行されます。このタイプのコードはおそらくカスタムプラグインに最も適しています。おそらく何らかの時点でテーマを変更したとしても、カスタムREST呼び出しを行うことをお勧めします。

0
WebElaine