web-dev-qa-db-ja.com

プラグインなしでカテゴリを特定のユーザーレベルにのみ表示する

私は何人かの軍隊のために写真を共有するためのサイトを構築しています、そして1つのことが私を困惑させ続けます。

サイトにサインアップしている人全員に表示してもらいたい写真や、表示できるだけの写真もあります。しかし、彼らは管理者にはなれません。

私が見つけることができる唯一の助けは、特定のユーザレベルがカテゴリにPOSTを許可することだけを許可することです。私は基本的にいくつかの投稿を見ることから「購読者」を制限したいと思います。

誰かに私のために何かを書くように頼んではいけませんが、正しい方向へのポイントは素晴らしいでしょう。

2
OneEightLeft

私はあなたがいくつかのカテゴリがあることを理解していれば、例えば: "予約"、 "人"、 "風景"、 "個人"など。

購読者に投稿を表示できるようにします。 「人」、「風景」のカテゴリ。ただし、「予約済み」および「個人」のカテゴリには投稿できません。

これは比較的簡単です、pre_get_postsにフックするだけで、要求がその用語またはアーカイブという用語を持つ投稿に対するものである場合は表示を無効にします。

無効にするには、あなたは異なるチャンチを持っている、あなたはリダイレクトすることができます、あなたは404を表示することができますまたはあなたはカスタムテンプレートを表示することができます。

以下で私は最後のオプションの仕方を言っています。

まずはじめにテンプレートファイルを作成します。 not-allowed.phpをあなたのテーマフォルダに置きます。

それでfunctions.phpでこのコードを使ってください:

add_filter('template_include', 'restict_by_category');

function check_user() {
  $user = wp_get_current_user();
  if ( ! $user->ID || in_array('subscriber', $user->roles) ) {
    // user is not logged or is a subscriber
    return false;
  }
  return true;
}

function restict_by_category( $template ) {
  if ( ! is_main_query() ) return $template; // only affect main query.
  $allow = true;
  $private_categories = array('reserved', 'personal'); // categories subscribers cannot see
  if ( is_single() ) {
    $cats = wp_get_object_terms( get_queried_object()->ID, 'category', array('fields' => 'slugs') ); // get the categories associated to the required post
    if ( array_intersect( $private_categories, $cats ) ) {
      // post has a reserved category, let's check user
      $allow = check_user();
    }
  } elseif ( is_tax('category', $private_categories) ) {
    // the archive for one of private categories is required, let's check user
    $allow = check_user();
  }
  // if allowed include the required template, otherwise include the 'not-allowed' one
  return $allow ? $template : get_template_directory() . '/not-allowed.php';
}
4
gmazzap

プラグインをダウンロードしてインストールします カテゴリーを制限します 。特定の役割に対して特定のカテゴリを制限し、適切なカテゴリに写真を投稿します。

0
Nikolay