WordPressで、投稿を強制的に「非公開」にする方法【functions.php】

1. 背景

wordpressで、会員制サイトを構築していました。
そのサイトの権限は、次の2種類としたいです。

ユーザ記事を閲覧する記事を書く記事を投稿する
会員
それ以外×××

このような要件は、Wordpressのシステムでは「全記事を非公開にして、閲覧者全員を編集者以上にする」ことで満たせます。

しかしこれだと、「非公開設定を忘れてしまった場合」が怖いですね。

そこで、「公開」の記事を強制的に非公開に変更する設定を紹介しようと思います。

2. functions.phpへ次のコードを追加する

いろいろ試しましたが、この方法がシンプルでした。

$args = array(
        'posts_per_page'   => -1, // 読み込みしたい記事数(全件取得時は-1)
);
// ちなみに'post_status' => 'any'をしない今回の場合、公開の記事しか取得されない

$posts = get_posts($args);
foreach($posts as $post){
    $id = $post->ID;
    $my_post = array(
      'ID'           => $id,
      'post_status'   => 'private',
    );
    wp_update_post( $my_post );	
}

add_action('post_updated', function...)も試したのですが、こちらは記事投稿時にエラーが出てしまうなど、不具合がありました。

コメント

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