Tester si catégorie en cours (Créer un compte)

  • Statut : non résolu
10 sujets de 1 à 10 (sur un total de 10)
  • Auteur
    Messages
  • #563349
    Olivier C
    Participant
    Chevalier WordPress
    429 contributions

    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…

    #1056504
    CAMEO172
    Participant
    Maître WordPress
    1395 contributions

    pourquoi 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

    #1056505
    Olivier C
    Participant
    Chevalier WordPress
    429 contributions
    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.

    #1056506
    CAMEO172
    Participant
    Maître WordPress
    1395 contributions
    Olivier 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_Templates

    2) 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.

    #1056507
    Olivier C
    Participant
    Chevalier WordPress
    429 contributions
    CAMEO172 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.

    #1056508
    Treenity
    Modérateur
    Maître WordPress
    777 contributions

    Bonjour,

    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:

    #1056509
    Olivier C
    Participant
    Chevalier WordPress
    429 contributions

    Finalement 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…
    }

    #1056510
    Olivier C
    Participant
    Chevalier WordPress
    429 contributions

    @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().

    #1056511
    Treenity
    Modérateur
    Maître WordPress
    777 contributions

    Le 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/)

    #1056512
    Olivier C
    Participant
    Chevalier WordPress
    429 contributions

    La 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…

10 sujets de 1 à 10 (sur un total de 10)
  • Le forum ‘Utilisation spécifique de WordPress’ est fermé à de nouveaux sujets et réponses.