WordPressで複数人が投稿を行うサイトでは、誤って「公開」されてしまうことを防ぐために、投稿ステータスを「レビュー待ち(pending)」に強制変更したい場面があります。
この記事では、寄稿者や編集者が投稿を保存・更新したときでも、自動的に「レビュー待ち」に変更されるようにする方法を紹介します。管理者による確認を必須としたい場合に有効です。
functions.php に処理を追加する
使用中のテーマまたは子テーマの functions.php に、以下のコードを追加してください。
<?php
function force_pending_status_for_non_admin( $data, $postarr ) {
// 管理者は除外
if ( current_user_can( 'administrator' ) ) {
return $data;
}
// 投稿タイプが "post" のときのみ適用(カスタム投稿にも対応可能)
if ( $data['post_type'] === 'post' ) {
// ステータスが公開・下書き・非公開 などでも強制的にレビュー待ちに変更
$data['post_status'] = 'pending';
}
return $data;
}
add_filter( 'wp_insert_post_data', 'force_pending_status_for_non_admin', 10, 2 );
?>
このコードでは、管理者以外のユーザーが投稿を保存した場合に、必ずステータスを「pending」に書き換える処理を行っています。編集者や寄稿者がうっかり「公開」してしまう事故を防止できます。
カスタム投稿タイプにも対応させるには
投稿タイプを限定したくない場合は、条件部分を次のように変更できます。
// 全投稿タイプに適用する場合
// if ( $data['post_type'] === 'post' ) を削除またはコメントアウト
あるいは、対象を複数にしたい場合は以下のように配列でチェックします。
$target_post_types = array( 'post', 'custom_post' );
if ( in_array( $data['post_type'], $target_post_types, true ) ) {
$data['post_status'] = 'pending';
}
注意点
- この処理は新規投稿・更新の両方に適用されます。
- 管理者ユーザーには影響しないため、通常どおりの公開・下書き保存が可能です。
- カスタム投稿タイプのワークフロー管理にも応用できます。
よくある質問(FAQ)
Q. 記事のステータスを「pending(審査待ち)」に変更するには?
A. wp_update_post(array(‘ID’ => $post_id, ‘post_status’ => ‘pending’))で変更できます。Gutenbergエディターのステータスセレクターからも変更できます。
Q. 投稿者が公開できないよう審査フローを強制するには?
A. 投稿者(author)ロールにはpublish_postsケイパビリティを持たせず、submitに相当する処理でpost_statusをpendingに設定します。管理者・エディターがpendingの記事を承認して公開します。
Q. ステータス変更時に通知メールを送る実装は?
A. transition_post_statusフックでpending状態になった場合にwp_mail()で管理者に通知します。pending to publishの遷移では投稿者に公開完了通知を送ります。
まとめ
WordPressサイトを複数人で運用する場合、投稿ステータスを「レビュー待ち」に強制変更することで、誤公開や内容チェック漏れを未然に防ぐことができます。
特に、寄稿者や編集者に一時的な執筆権限を与える場合や、品質管理を徹底したいチーム運用においては、非常に有効なカスタマイズです。

