複数ユーザー運営時に、管理者承認付きの投稿公開フローを実装する方法

Cocoonカスタマイズ集
この記事は約3分で読めます。
記事内に広告が含まれています。

はじめに

WordPressサイトを複数ユーザーで運営する際、投稿内容の品質やサイトの信頼性を保つために、管理者の承認を経てから記事を公開したいことがあります。

特に、編集権限を持つユーザーが多いサイトでは、誤って不適切な内容や誤字脱字のある記事が公開されるリスクを減らすことが重要です。

そこで、管理者以外のユーザーが投稿した記事の公開ステータスを強制的に「レビュー待ち(pending)」に変更し、さらに管理者に通知するようにします。

この記事では、この方法について説明します。

投稿ステータスをレビュー待ちに強制変更する方法

管理者以外のユーザーが「公開」しようとしても、投稿のステータスを強制的に「レビュー待ち」に変更します。

実装手順

以下のコードをfunctions.phpに追加します。

add_filter('wp_insert_post_data', function ($data, $postarr) {
  if (
    !current_user_can('administrator') &&
    $data['post_type'] === 'post' &&
    $data['post_status'] === 'publish'
  ) {
    $data['post_status'] = 'pending';
  }

  return $data;
}, 10, 2);

管理者へのレビュー待ち通知機能の追加

投稿が「レビュー待ち(pending)」に変更された際に、管理者に自動で通知メールを送信します。

実装方法

以下のコードをfunctions.phpに追加します。

add_action('transition_post_status', function ($new_status, $old_status, $post) {
  if ($post->post_type !== 'post') {
    return;
  }

  // レビュー待ちへの変更以外は終了
  if ($new_status !== 'pending' || $old_status === 'pending') {
    return;
  }

  // 管理者メールアドレスを取得
  $admin_email = get_option('admin_email');

  // 投稿編集ページのURLを取得
  $edit_link = admin_url('post.php?post=' . $post->ID . '&action=edit');

  // メールタイトルと本文を設定
  $subject = '【承認依頼】レビュー待ちの投稿があります';
  $message  = "新しい投稿がレビュー待ちになりました。\n\n";
  $message .= "タイトル: " . $post->post_title . "\n";
  $message .= "編集ページ: " . $edit_link . "\n\n";
  $message .= "内容をご確認のうえ、承認または修正をお願いします。";

  // メール送信
  wp_mail($admin_email, $subject, $message);
}, 10, 3);

補足

各フックがどのような投稿の更新パターンで発火するかまとめます(表1参照)。

各投稿フックの発火条件まとめ
更新パターンtransition_post_statuspost_updatedsave_post
新規投稿●×●
公開済み投稿の内容更新×●●
ステータス変更●●●

さいごに

今回紹介した方法を導入することで、管理者以外のユーザーが投稿した記事は強制的に「レビュー待ち」に設定され、管理者が内容を確認し承認してから公開できるようになります。
この仕組みは、多人数でのサイト運営において投稿の品質を保ち、誤公開や不適切なコンテンツ掲載のリスクを大幅に減らすことが可能です。

タイトルとURLをコピーしました