web-dev-qa-db-ja.com

REST 新しいWordpressの投稿が公開または更新されたときに警告する

私はカスタムPHPアプリケーションとWordpressインスタンスを同じサーバー上で2つの完全に別々のコードベースとして実行しています。私のカスタムPHPアプリケーションが、公開または更新されたときにWordpressインスタンスからのコンテンツを消費できるようにしたいです。

私のWordpressインスタンスからJSONでエンコードされたWordpressの投稿を取得するには、優れた WP API を使用しています。このプラグインは、すべての投稿または個々の投稿(idで指定)を取得できます。

これは現在、すべての投稿についてWordpressインスタンスを積極的にポーリングしてから、どれが新規であるか、または修正されているかを把握することを含み、これは理想的ではありません。

新しい投稿が作成または更新されたときにWordpressからPHPアプリケーションに通知します。私はWordpressのための多数の電子メール通知プラグインがあることを認識しています(最良のものはWordpressのための Better Notifications です)。しかし、SMTPサーバーを稼働させてEメールの内容を解析するというオーバーヘッドは望ましくありません。

私は自分のアプリケーションにRESTまたはGETリクエストを送信するためにPOSTを使用し、(最近公開または更新された)Wordpress投稿のIDを渡すという解決策を探しています。私はこれを達成するために存在する組み込みのWordpressの機能やプラグインを知りません。

1
Richard

HTTP API を使用してwp_insert_postアクションに「ping」を送信します。これは投稿が作成または更新されるたびに発生します。

/**
 * @param   int     $post_id    The ID of the post.
 * @param   WP_Post $post       The post object.
 * @param   bool    $update     True if the post already exists and is being updated
 */
function wpse_185340_post_ping( $post_id, $post, $update ) {
    if ( $post->post_status === 'publish' ) { // Only fire when published
        wp_remote_post(
            'http://example.com/application/notify',
            array(
                // https://codex.wordpress.org/HTTP_API
                'blocking' => false, // If you don't need to know the response, disable blocking for an "async" request
                'body' => array(
                    'post_id' => $post_id,
                    'post'    => json_encode( $post ),
                    'update'  => ( int ) $update,
                    // or whatever
                )
            )
        );
    }   
}

add_action( 'wp_insert_post', 'wpse_185340_post_ping', 10, 3 );
0
TheDeadMedic