web-dev-qa-db-fra.com

Montrer seulement la catégorie à certains niveaux d'utilisateurs sans plugin

Je construis un site pour que des membres de l'armée puissent partager des photos, et une chose m'agace.

Ils souhaitent que toutes les personnes inscrites sur le site aient accès à des photos et à d'autres photos. Mais ils ne peuvent pas être administrateurs.

La seule aide que je puisse trouver concerne uniquement l'autorisation de certains niveaux d'utilisateurs de POST vers une catégorie. Je voudrais essentiellement empêcher les "abonnés" de voir certains messages.

Ne pas demander à quiconque d'écrire quelque chose pour moi, mais un point dans la bonne direction serait génial.

2
OneEightLeft

Si je comprends bien, vous avez des catégories, par exemple: "réservé", "personnes", "paysages", "personnel", etc.

Vous voulez maintenant que les abonnés puissent voir les publications, par exemple. 'personnes', catégories 'paysages' mais pas dans les catégories 'réservé' et 'personnel'.

Ceci est relativement facile, connectez-vous simplement à pre_get_posts et si la demande concerne une publication ayant ces termes ou le terme archive, désactivez l'affichage.

Pour désactiver différents canaux, vous pouvez rediriger, afficher 404 ou un modèle personnalisé.

Ci-dessous, je dis comment passer à la dernière option.

Tout d’abord, créez un fichier de modèle, par exemple not-allowed.php et mettre dans votre dossier de thème.

Puis dans functions.php utilisez ce code:

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

Téléchargez et installez le plug-in Restreindre les catégories . Restreignez certaines catégories pour certains rôles et publiez les photos dans les catégories appropriées.

0
Nikolay