Gérer plusieurs templates wordpress sur le même site

Vous avez choisi votre template wordpress.

Disons que pour certaines pages, vous souhaiteriez que l’affichage soit différent.
Au lieu de hacker comme un sagouin votre header.php ou votre page.php avec des IF en dur, utilisez le multi-template !

Comment faire ?

  1. créer un nouveau fichier : mon_template_alternatif.php
  2. et copiez-y ceci :
    <?php
    	/*
    	Template Name: Nom de mon template alternatif
    	*/
    ?>
    
    <?php
    	include('page.php');
    ?>
  3. Avant l’include de page.php, insérez vos hook, vos variables, tout ce qui doit interagir avec votre template de base
  4. enregistrez ce fichier à la racine de votre thème (\wp-content\themes\mon_theme)
  5. éditez votre page, constatez que vous avez un nouveau menu déroulant « Modèle » dans les attributs de la page, choisissez « Nom de mon template alternatif », mettez à jour, et hop !

Le plus important est « Template Name: ». C’est avec ça que wordpress interprète votre fichier comme un thème actif.

Wordpress plugin Allow Categories

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'));