plugin WordPress : Allow Categories

J’ai modifié le plugin Allow Categories (page officielle)

Ce plugin permet d’indiquer si les catégories des articles WordPress sont publiques, privées (accessibles après identification), ou accessible seulement à certain utilisateurs.

Or j’utilise pour certains sites le nouveau « menu navigation » de WordPress, et lorsque j’intègre dans un menu un objet de type Category, je ne veux pas que celui-ci s’affiche si la catégorie est notée comme non visible pour l’utilisateur en cours (car n’ayant pas les droits pour voir les articles il arrive alors sur une 404 et c’est un peu nul).

J’ai donc modifié le plugin et intégré un filtre sur wp_get_nav_menu_items, qui retire les objets (items) du menu s’ils ne sont pas autorisés.

Le développeur original n’ayant pas encore fait la mise à jour, voici le code.

La nouvelle fonction dans la classe Allow_Category :

function allow_menu_nav($items) { $cat_ids_allowed = Allow_Category::allow_getCategory(); // get ID categories allowed in the user context foreach ( $items as $key => $item ) { // foreach categories $object_id = get_post_meta( $item->ID, '_menu_item_object_id', true ); // ID of the category $type = get_post_meta( $item->ID, '_menu_item_type', true ); // type of the category (custom = links, post_type = pages, taxonomy = categories) if ( 'taxonomy' == $type) { // only from categories $is_allowed = false; foreach ($cat_ids_allowed as $idcat) { if ( $idcat == $object_id ) { // category is alowed $is_allowed = true; break; } } if (! $is_allowed ) unset($items[$key]); // remove the item from the navigation items if not in the allowed categories } } return $items; }

et le nouvelle définition de filtre pour le menu :

add_filter('wp_get_nav_menu_items',  array('Allow_Category', 'allow_menu_nav'));

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *