【WordPress】投稿の公開後に特定の処理を自動実行する方法

【WordPress】投稿の公開後に特定の処理を自動実行する方法 WordPress

WordPressでは、投稿が「公開」されたタイミングで自動的に任意の処理を実行することが可能です。例えば、メール通知、ログ記録、外部APIへの通知、ステータス変更など、様々な自動処理に対応できます。

本記事では、transition_post_statusフックを活用して、投稿の公開時に処理を走らせる基本方法と実用例を紹介します。

使用するフック:transition_post_status

transition_post_statusフックは、投稿ステータスが変更されたときに呼び出されます。このフックを使うことで、「下書き → 公開」のような状態遷移を検知できます。

公開時にカスタム処理を実行する基本コード

function do_something_on_publish($new_status, $old_status, $post) {
  // 公開時のみ実行(下書き→公開)
  if ($old_status !== 'publish' && $new_status === 'publish' && $post->post_type === 'post') {
    // 実行したい処理をここに記述
    // 例:ログ出力
    error_log('投稿「' . get_the_title($post) . '」が公開されました(ID: ' . $post->ID . ')');
  }
}
add_action('transition_post_status', 'do_something_on_publish', 10, 3);

このコードでは、投稿のステータスが「publish(公開)」になったときのみ処理を実行します。
カスタム投稿タイプでも使えるように、$post->post_typeの条件で絞り込みを行っています。

実用例①:投稿公開時に管理者へメール通知

function notify_admin_on_publish($new_status, $old_status, $post) {
  if ($old_status !== 'publish' && $new_status === 'publish' && $post->post_type === 'post') {
    $admin_email = get_option('admin_email');
    $subject = '新しい投稿が公開されました';
    $message = '投稿タイトル:' . get_the_title($post) . "\n" . 'URL:' . get_permalink($post);
    wp_mail($admin_email, $subject, $message);
  }
}
add_action('transition_post_status', 'notify_admin_on_publish', 10, 3);

管理者メールアドレスはget_option('admin_email')で取得できます。
メール内容は投稿タイトルとURLを含めておくと実用的です。

実用例②:カスタムフィールドの初期値を自動セット

function set_default_meta_on_publish($new_status, $old_status, $post) {
  if ($old_status !== 'publish' && $new_status === 'publish') {
    if (!get_post_meta($post->ID, 'priority', true)) {
      update_post_meta($post->ID, 'priority', 'normal');
    }
  }
}
add_action('transition_post_status', 'set_default_meta_on_publish', 10, 3);

このコードでは、「priority」というカスタムフィールドが未設定だった場合、自動的に「normal」という初期値を登録します。

実用例③:外部APIへPOSTリクエストを送信

function notify_external_api_on_publish($new_status, $old_status, $post) {
  if ($old_status !== 'publish' && $new_status === 'publish') {
    $payload = array(
      'title' => get_the_title($post),
      'url'   => get_permalink($post),
    );

    wp_remote_post('https://example.com/api/notify', array(
      'method'  => 'POST',
      'headers' => array('Content-Type' => 'application/json'),
      'body'    => wp_json_encode($payload),
    ));
  }
}
add_action('transition_post_status', 'notify_external_api_on_publish', 10, 3);

外部サービスとの連携や通知APIなどが必要な場面に活用できます。

注意点

  • 公開済み→更新の場合は実行されないように$old_status !== 'publish'を条件に入れる
  • wp_mail()wp_remote_post()は失敗時のログ管理や非同期処理を検討すると安全
  • カスタム投稿タイプにも対応させたい場合は、$post->post_typeで条件指定

まとめ

WordPressではtransition_post_statusアクションを使うことで、投稿のステータス変更に応じて処理を自動実行できます。
メール通知やAPI連携、初期値設定など、投稿のワークフローを自動化することで、作業の手間やミスを減らすことが可能になります。

運用に合わせて、ぜひ活用してみてください。