私はカスタム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の機能やプラグインを知りません。
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 );