web-dev-qa-db-fra.com

Les types de messages personnalisés ne sont pas mis en surbrillance dans le menu

Travailler sur un site d'événements théâtraux. La structure nécessite plusieurs zones d'événements distinctes, chacune avec une page d'accueil répertoriant les événements de cette zone et les pages d'événements correspondants correspondantes sous la page de liste. Étant donné que chacune des pages de zone d'événement nécessite un traitement différent, j'ai pensé que c'était une bonne situation pour les types de publication personnalisés, en utilisant à la fois des modèles single- [événement] et archive- [événement] pour chaque zone.

J'ai installé l'interface utilisateur Types de messages personnalisés pour créer les types de messages personnalisés (y compris la taxonomie personnalisée correspondante) et les champs personnalisés avancés pour créer des champs méta. Jusqu'ici tout va bien. Le type de message personnalisé Archive (liste complète des événements de zone) extrait la méta du type de message personnalisé Simple et les deux pages de message personnalisées s'affichent correctement, à une exception près: le menu de navigation principal ne met plus en surbrillance la page Web active dans la liste Archive. [Remarque: il existe de nombreux articles sur la mise en surbrillance du sous-menu. Des articles personnalisés uniques pour correspondre au parent; Je n’en ai pas besoin, il faut juste que l’espace événementiel actuel soit mis en évidence correctement dans le menu principal!]

J'ai réalisé que j'avais construit mon système de navigation principal - qui comprend les zones d'événements - avec wp_nav_menu et register_nav_menus. Ainsi, les zones d’événement correspondant aux publications personnalisées d’Archive ont été à l’origine construites en pages et le nav principal a été configuré à l’aide de la fonction de glisser-déposer de WP Menu. Par défaut, Wordpress utilise le modèle de publication personnalisé archive- [événement] (et ignore la page existante portant le même nom). Le menu de navigation est fonctionnel en termes de liens, mais ne met pas en surbrillance le lien de publication personnalisée d'Archive dans la navigation. Les pages de la navigation principale fonctionnent correctement.

Lorsque je vérifie la sortie dans Event Area, une classe "current_page_parent" est attachée à la navigation du blog, mais il n'y a pas d '"élément de menu en cours" ailleurs, ce qui, je suppose, convient aux publications personnalisées. Je suppose que si wp_nav_menu s’applique uniquement à Pages, cela est logique, car les publications d’archives de niveau supérieur ne seront pas reconnues, mais je ne sais pas comment les corriger. Je vais essayer des hacks, mais je veux éviter ceux qui sont spécifiques à un ID ou jQuery si possible. Une idée serait de jeter le modèle archive- [événement] et d'utiliser un modèle de page standard pour la liste tout en conservant la publication de type personnalisé unique- [événement]. Faux comme ça ne pourrait pas marcher? Merci pour tout conseil, j'espère que je manque d'approche évidente/facile.

1
boomturn

J'ai toujours considéré cela comme un bug, mais sinon, c'est plutôt déconcertant. Vous avez deux choses à corriger: la première consiste à ne pas mettre en évidence l'élément de niveau supérieur "Blog" et la seconde à mettre en surbrillance l'élément de niveau supérieur approprié dans lequel réside votre CPT unique.

Il y a peut-être d'autres méthodes, mais je vais partager ma méthode qui, malheureusement, cible l'ID de menu avec CSS.

Dans le conteneur de navigation, ajoutez une condition qui identifie le moment où la navigation est affichée sur le CPT unique:

<nav class="navsf<?php if (is_singular('news')) { echo ' fixhilite'; } ?>">

Ensuite, vous devez obtenir l'ID de l'élément de menu "Blog" et de l'élément de menu parent CPT (dans cet exemple, "Actualités"). Disons que pour "Blog" c'est la suivante:

<li id="menu-item-29" ...>

Et pour "News" c'est:

<li id="menu-item-30" ...>

Dans votre CSS, vous pouvez cibler ces éléments de manière à modifier les couleurs du texte ou de l’arrière-plan pour mettre en surbrillance ou non les éléments en conséquence:

.navsf.fixhilite li#menu-item-29

.navsf.fixhilite li#menu-item-30

1
Ray Gulick

Je suggère d'utiliser jQuery comme:

<?php if(is_singular('your-custom-post-type')) : ?>

    <script>
        (function($) {
        $(document).ready(function() {   
            $('#menu-item-20').addClass('current-menu-item');
        });
        })(jQuery);
    </script>

<?php endif; ?>

Terminé.

0
JI-Web

votre problème est probablement résolu il y a déjà longtemps. Quoi qu'il en soit, voici la solution possible:

public static function WPFilter_UpdateNavMenuCSS($classes, $item) {
    $pages = get_posts ( array (
                                'post_type' => 'page', 
                                'meta_key' => '_wp_page_template', 
                                'meta_value' => 'page-works.php' ) );
    if (is_array ( $pages ) && count ( $pages ) > 0) {
        $root_page = $pages [0];
        if (is_singular ( self::id )) {
            if (( int ) $root_page->ID == ( int ) $item->object_id) {
                $classes [] = 'current_page_parent';
            } else {
                $key = array_search ( 'current_page_parent', $classes );
                if ($key) {
                    unset ( $classes [$key] );
                }
            }
        }
    }
    return $classes;
}

Il suffit de modifier cette méthode en fonction de vos besoins. Vous devez remplacer page-works.php et self: id en conséquence.

Pour ensuite, vous devez enregistrer le filtre pour appeler la méthode définie ci-dessus:

add_filter ( 'nav_menu_css_class', 'SimpleTheme\PostType\Portfolio::WPFilter_UpdateNavMenuCSS', 10, 2 );

Cette solution nécessite que vous disposiez d'un modèle de page personnalisé pour afficher la liste de votre type de publication personnalisée. Ce modèle est choisi pour la page, que vous souhaitez définir comme page parent.

0
D.A.H