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...)
も試したのですが、こちらは記事投稿時にエラーが出てしまうなど、不具合がありました。
コメント