WordPress
カスタマイズ事例

WORDPRESS CUSTOMIZATION

ユーザー単位で投稿できるカテゴリーを限定する

多店舗展開している企業サイトなどで、店舗ごとにサイト運用担当者を置き、店舗ごとにお知らせやブログを作成したい、なんてことがあります。
こういった場合、最初に頭に浮かぶのはマルチサイトWordPressを使って一つのWordPressで複数のブログを運営する方法です。
しかし、マルチサイトWordPressと通常のWordPressではシステム構造が異なるため、その違いや挙動について詳しい知識がないと、思わぬ要件で“ハマって”しまうことにもなりかねません。
 
できればシングルサイトWordPressで作りたい・・・。
 
では、改めて要件を整理しましょう。
 
店舗ごとにお知らせやブログを作成したいということは・・・店舗ごとにユーザーアカウントを作成し、そのアカウントではおのおのの店舗カテゴリーの投稿だけしかできないようにすればいいわけですよね。
つまり「ユーザー単位で投稿できるカテゴリーを限定する」ことができればシングルサイトWordPressでも「店舗ごとにサイト運用担当者を置き、店舗ごとにお知らせやブログを作成する」ことができるということです。
 
ということで今回の本題「ユーザー単位で投稿できるカテゴリーを限定する」手順について、ご紹介していきます。
 

  1. プラグインを2つインストールする。
    インストールするプラグインは

    の2つ。

  2. [ユーザー]-[User Role Editor]で「権限グループの追加」を押して、下の図のように権限グループの追加をおこなう。これを店舗数分おこなう。
    User Role Editor
  3. UAM(User Access Manager)メニューを開き、新しいユーザーグループの追加を下の図のようにおこなう。これを店舗数分おこなう。
    ※ 注意するのは閲覧権限を「All users」にすること。そうしないとこの権限で投稿した記事には一般ユーザーはアクセスできなくなります。
    User Access Manager
  4. ユーザーを新規登録する。その際、「権限グループ」はそのユーザーアカウントの属する店舗を選択する。これを店舗数分おこなう。
  5. 投稿のカテゴリーを「{店舗名}からのお知らせ」などで登録する。その際、「ユーザーグループのセットアップ」は「User Access Manager」で登録した当該店舗のユーザーグループにチェックする。
     
    ※ なお、ついでに説明しておくと、こうしてユーザーグループが限定されたカテゴリーを、属する記事がない状態でもおもてに表示したい場合には、hide_emptyオプションをfalseにする(要するに空カテゴリーを隠さない)設定だけでは不十分で、以下のように[UAM(User Access Manager)]-[設定]メニューの「Taxonomies Setting」タブで「空のカテゴリーを非表示」を「いいえ」に設定する必要があることも覚えておきましょう。
    User Access ManagerのTaxonomies Setting画面
  6. WordPressでは投稿時、どのカテゴリにもチェックが入らないと自動でデフォルトカテゴリにチェックが入ります。この機能が悪さをして勝手にデフォルトカテゴリにチェックが入ってしまうことを避けるために、javascriptで、管理者以外が新規投稿などのページを開いたらカテゴリの最初の項目(たとえば「{店舗名}からのお知らせ」カテゴリ)に自動チェックが入るようにします。
     
    テーマのfunctions.phpに以下を追記しましょう。

    /* 管理者以外が新規投稿などのページを開いたらカテゴリの最初の項目に自動チェック */
    add_action('admin_print_footer_scripts', 'admin_print_footer_scripts_custom', 21);
    function admin_print_footer_scripts_custom()
    {
      $user_roles = wp_get_current_user()->roles;
      if (!in_array('administrator', $user_roles)) {
        echo '<script type="text/javascript">
        //<![CDATA[
        jQuery(document).ready(function($){
          // default check
          if ($("#category-all .categorychecklist input[type=checkbox]:checked").length == 0) {
            $("#category-all .categorychecklist li:first-child input:first-child").attr("checked", "checked");
          }
        });
        //]]>
        </script>';
      }
    }
    

 
これで準備完了です。

それぞれの店舗のユーザーアカウントでログインしてみてください。
メニューには自分のプロフィールの編集用のメニューと投稿、メディアくらいしか見えておらず(contact form 7を導入しているサイトでは「問い合わせ」メニューが見えているかもしれませんが、入ってみると何にもできないようになっているはずです)、そして、投稿メニューで投稿しようとすると、カテゴリーは自分の「{店舗名}からのお知らせ」しか選択できないと思います。
 
いかがでしょうか。
これでマルチサイトWordPressを使わなくても「店舗ごとにサイト運用担当者を置き、店舗ごとにお知らせやブログを作成できる」サイトを作ることができますね。
 
以上、ユーザー単位で投稿できるカテゴリーを限定する方法のご紹介でした。

【100ウェブ新着情報メルマガ】

WordPressカスタマイズ事例やウェブ制作ノウハウの新着情報、お役立ち情報を
リアルタイムにメルマガ配信!