- Statut : non résolu
- Ce sujet contient 9 réponses, 3 participants et a été mis à jour pour la dernière fois par Olivier C, le il y a 8 années et 6 mois.
-
AuteurMessages
-
24 mai 2016 à 8 h 54 min #563349
Bonjour,
Ma configuration WP actuelle
– Version de WordPress : 4.5.2
– Version de PHP/MySQL : 7
– Thème utilisé : Création perso
– Adresse du site : http://christus.fr/dev/Problème(s) rencontré(s) :
Je souhaite afficher un ‘span.active’ sur un onglet si la page en cours fait partie d’une page de catégorie et si la catégorie est la bonne, un lien dans le cas contraire :
if ( $testLink ) {
$menuList .= ‘<span class="active">‘;
} else {
$menuList .= ‘<a href="' . $url . '">‘;
}Je n’ai pas de problème pour tester mes articles, le problème est avec les catégories. Par exemple ici, si je clique sur l’onglet « Étudiants », j’aimerais que cet onglet prenne un état actif quand j’arrive à la page de destination « Catégorie : Étudiants« .
Le code pour tester la condition en son état actuel :
$testLink = (
( is_singular() AND ( $url === get_permalink() ) )
OR
( is_category() AND ( $url === get_category_link( is_category() ) ) )
);La première partie, servant à tester le lien d’un article, fonctionne, c’est la deuxième partie qui me pose problème…
24 mai 2016 à 14 h 50 min #1056504pourquoi testes tu l’url ?
avec un if (in_category(‘id_étudiant’)) tu sais que le teste sera positif chaque fois que tu es dans une archive étudiant !
Codex -> https://codex.wordpress.org/fr:Marqueurs_de_Modele/in_category
24 mai 2016 à 15 h 19 min #1056505CAMEO172 wrote:avec un if (in_category(‘id_étudiant’)) tu sais que le test sera positif chaque fois que tu es dans une archive étudiant !Oui, mais il s’agit alors de tester si l’article en cours est contenu dans une catégorie donnée.
Moi je cherche à récupérer un booléen sur un item de mon menu quand je suis sur une page de catégorie donnée.
24 mai 2016 à 16 h 43 min #1056506Olivier C wrote:CAMEO172 wrote:avec un if (in_category(‘id_étudiant’)) tu sais que le test sera positif chaque fois que tu es dans une archive étudiant !Oui, mais il s’agit alors de tester si l’article en cours est contenu dans une catégorie donnée.
Moi je cherche à récupérer un booléen sur un item de mon menu quand je suis sur une page de catégorie donnée.
au temps pour moi.
Deux solutions :
1) category-ID.php -> faire une page spécifique pour un ID de catégorie spécifique. Si cette page s’active, même plus de test tu es là où il faut ! Inconvénient, selon tes catégories et si tu as différents span active ça fait autant de template avec peut-être de la maintenance compliqué.
codex -> https://codex.wordpress.org/Category_Templates2) is_category(‘slug_etudiant’) se suffit à lui même. Je l’ai largement assez testé pour te l’affirmer 😉 -> le contenu s’affiche si tu es en archive de ton slug_etudiant !
Je ne comprends toujours pas pourquoi tu doubles ton test avec l’url, mais j’au peut-être encore mal compris.
24 mai 2016 à 17 h 43 min #1056507CAMEO172 wrote:au temps pour moi…Autant pour moi aussi : j’avais tellement le nez dans le guidon que j’avais du mal à m’extraire de mon code. Maintenant que je n’ai plus accès à mon environnement de travail je viens d’y réfléchir avec plus de recul et j’ai peut-être trouvé une piste. Il faudra donc que je tente quelque chose en rentrant chez moi ce soir, je ferai un retour si cela fonctionne.
24 mai 2016 à 21 h 12 min #1056508Bonjour,
je suppose que vous voulez changer cela dans le menu?
si c’est le cas, pourquoi ne pas avoir simplement utiliser le nav_walker de wordpress qui gère nativement tout ces elements en rajoutant des classes « current » etc… ?sinon pour votre script, vous pouvez tenter de faire:
25 mai 2016 à 6 h 35 min #1056509Finalement j’ai trouvé une solution, mais WordPress m’a saoulé sur ce coup, j’ai donc adopté une solution de contournement :
$uri = ‘//’ .$_SERVER[ ‘HTTP_HOST’ ] . $_SERVER[ ‘REQUEST_URI’ ]; // Alternative à get_permalink() qui ne fonctionne pas dans toutes les situations. Dans la vraie vie cette variable est globale.
$arrayHttp = [ ‘http://’, ‘https://’ ]; // Ici c’est pas très beau, c’est pour préparer le str_replace qui va suivre…
$testLink = ( $tabUri == $uri );
foreach ( ( array ) $menu_items as $key => $menu_item ) {
$title = $menu_item->title;
$tabUri = $menu_item->url; // On récupère l’url de l’onglet
$tabUri = str_replace( $arrayHttp, ‘//’, $tabUri ); // Traitement permettant une comparaison avec la variable $uri. Si vous avez une solution permettant de traiter les HyperText Transfer Protocol d’une manière plus élégante, je suis preneur…
// La suite du foreach…
}27 mai 2016 à 9 h 37 min #1056510@Treenity : je ne sais pas utiliser le walker menu, bien que j’en ai entendu parler. Dans mon script j’ai utilisé la fonction wp_get_nav_menu_items().
28 mai 2016 à 1 h 56 min #1056511Le système des Walker permet de gérer tout ce que vous avez besoin pour le menu, du début à la fin, vous pouvez utiliser celui de wordpress, il suffit d’appeler wp_nav_menu() (https://developer.wordpress.org/reference/functions/wp_nav_menu/)
28 mai 2016 à 2 h 36 min #1056512La fonction wp_get_nav_menu_items() me permet elle aussi d’utiliser le menu natif de WordPress. Mais je vosu remercie pour le lien vers la page WP developer qui me donne un exemple concret d’un menu Walker. Ce sera pour une prochaine fois…
-
AuteurMessages
- Le forum ‘Utilisation spécifique de WordPress’ est fermé à de nouveaux sujets et réponses.