前にtransition_post_statusフックや投稿の公開ステータスの変化に合わせて動作するフックについて紹介しました。

今回は紹介したフックを使って投稿の公開状態によってWEBフックを発火させて処理する方法を紹介します。

公開時刻用のアクションフックを作る

まずは公開時刻用になったら動作するアクションフックを作ります。基本的には前に紹介したtransition_post_statusフックを使う形です。

functions.php
function publish_post_transition($new_status, $old_status, $post) {
    if ($new_status == 'publish' && $old_status != 'publish') {
        wp_safe_remote_get(
            'https://example.com/web-hook',     // WEBフックのURLを指定
            [],                                                        // リクエストの引数を指定
        );
    }
}
add_action( 'transition_post_status', 'publish_post_transition', 10, 3);

これでWP-CRONやページアクセスなどでWordPressでの公開処理が動いたらWEBフックが動作します。

WEBフックのリクエストはwp_safe_remote_getを使ってGETリクエストをしています。WEBフックのリクエストがGETではなくPOSTでしたらwp_safe_remote_postを使うと動くと思います。

ちょっと工夫する

上記のコードは公開時のみに動作するWEBフックなので非公開や削除といった動作には動きません。非公開や削除といった動作の場合に動かすには以下のような形にするとよいでしょう。

functions.php
function publish_post_transition($new_status, $old_status, $post) {
    $statuses = ['publish', 'private', 'trash'];
    if ( ! in_array($new_status, $statuses, true)) {
        return;
    }

    // webhook発火
    wp_safe_remote_get(
        'https://example.com/web-hook',     // WEBフックのURLを指定
        [],                                                        // リクエストの引数を指定
    );
}
add_action( 'transition_post_status', 'publish_post_transition', 10, 3);

このコードでは、アクションフック動作時のステータスが公開、非公開、削除の場合にのみ動作してそれ以外のステータスの場合だとWEBフックを動作しないようになっています。

まとめ

今回は公開時刻になったらWEBフックを動作させる方法を紹介しました。このコードを自身のテーマやプラグインに使えばWEBフックを動かすことができるのでJAMStackなどのサービスやSlackなどに通知させたい場合になどさまざまな方法で使うことができます。