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';
}
注意点
- この処理は新規投稿・更新の両方に適用されます。
- 管理者ユーザーには影響しないため、通常どおりの公開・下書き保存が可能です。
- カスタム投稿タイプのワークフロー管理にも応用できます。
まとめ
WordPressサイトを複数人で運用する場合、投稿ステータスを「レビュー待ち」に強制変更することで、誤公開や内容チェック漏れを未然に防ぐことができます。
特に、寄稿者や編集者に一時的な執筆権限を与える場合や、品質管理を徹底したいチーム運用においては、非常に有効なカスタマイズです。