web-dev-qa-db-fra.com

plugins de navigation recommandés avec possibilité de cacher le lien "Home"

J'utilise le plug-in Breadcrumb NavXT dans mes pages, mais je suis maintenant confronté à un problème

Je dois masquer le lien "Accueil" dans certaines pages. Je peux le faire en le cachant en CSS ou en ne le créant pas du tout. en PHP

Si je veux utiliser CSS - je n'ai aucune indication pour le premier lien et son séparateur ">>" - il n'y a pas d'id ou de classe spéciale pour cela

Si je choisis la solution PHP de ne pas le créer du tout dans ces cas - mon problème est que je ne peux pas envoyer de paramètre à la fonction "bcn_display ()"

Puis-je le faire avec mon plug-in actuel ou s'il y en a un meilleur?

merci!

2
zina

Mettre à jour

La réponse de Mtekk fait essentiellement ce que je proposais sans la nécessité de toucher au plugin lui-même, ma réponse est donc plutôt de nature théorique. Il décrit comment faire cela facilement .


Je pense que la meilleure chose à faire étant donné que vous êtes principalement confiant avec le plug-in (dire quelque chose de mineur à changer), ce serait de pirater le plug-in et d'insérer un crochet de filtre. Ensuite, vous pouvez filtrer en fonction de vos besoins. Si vous partagez le code, cela pourrait même en faire le plug-in d'origine, afin que vous puissiez bénéficier des mises à jour.

Exemple:

Voir le fichier breadcrumb_navxt_class.php. J'ai légèrement modifié une seule fonction pour créer un filtre:

/**
 * add
 * 
 * Adds a breadcrumb to the breadcrumb trail
 * 
 * @return pointer to the just added Breadcrumb
 * @param bcn_breadcrumb $object Breadcrumb to add to the trail
 */
function &add(bcn_breadcrumb $object)
{
    $doAdd = true;
    $doAdd = do_filter('_bcn_breadcrumb_trail_add_filter', $doAdd, $object);
    if ($doAdd) {
        $this->trail[] = $object;  
        return $this->trail[count($this->trail) - 1];
    } else {
        return $object; // NOTE: violates function return spec but prevents errors later on.
    }
}

Le filtre introduit est nommé _bcn_breadcrumb_trail_add_filter. Vous pouvez maintenant vous connecter à ce filtre et renvoyer FALSE, ce qui vous évitera d'ajouter $object au fil d'Ariane.

Dans votre filtre, vous pouvez décider en fonction de $object si vous souhaitez ou non l'ajouter. C'est un bcn_breadcrumb afin que vous puissiez vérifier que c'est un membre title à rechercher chez vous ou à peu près:

 $object->title

La seule chose à faire est d'ajouter du code:

 add_filter('_bcn_breadcrumb_trail_add_filter', function($doAdd, $object) {
     if ($object->title === 'Home'
         && /* this is a page I don't want to have it displayed */) {
         $doAdd = false;
     }
     return $doAdd;
 });

BTW, l'auteur du plugin est ici de temps en temps, donc il a probablement des commentaires à ce sujet également.

1
hakre

Sur quel type de pages essayez-vous de cacher le fil d'Ariane? Si cela se trouve uniquement sur la page d’accueil, encapsulez l’appel dans un contrôle pour is_front_page p. Ex. if(!is_front_page){bcn_display();}

Si vous ne voulez pas du tout de la chapelure à la maison, assurez-vous de "placer la chapelure à la maison dans le sentier". n'est pas coché sur la page des paramètres.

Si vous souhaitez supprimer conditionnellement le fil d'Ariane (honnêtement, cela n'a pas de sens de le faire, mais peu importe). Regardez l'action bcn_after_trail. Il transmettra l'objet breadcrumb_trail actuel et vous pourrez supprimer le dernier membre du tableau de chemin (le fil d'Ariane).

Un exemple serait: add_action('bcn_after_fill', 'foo_pop'); function foo_pop(&$trail) { if(is_page('foo')) { array_pop($trail->trail); } }

Cela enlèverait le fil d'Ariane de la piste pour la page avec slug 'foo'.

3
mtekk

Essayez Breadcrumb Trail , j’ai jeté un coup d’œil rapide dans le code source et il semble accepter l’argument approprié 'show_home' => __( 'Home', $textdomain ),

1
Rarst

Vous pouvez également utiliser une fonction personnalisée dans votre thème, suivez un exemple avec "Accueil"; vous pouvez commenter ceci ou supprimer

if ( !function_exists('fb_breadcrumb_nav') ) {
        function fb_breadcrumb_nav() {
                if ( !is_home() || !is_front_page() ) {
                        echo '<p class="breadcrumb"><a href="';
                        echo get_option('home');
                        echo '">';
                        bloginfo('name') . _e('</a> &raquo; ', FB_BASIS_TEXTDOMAIN);
                        if ( is_category() || is_single() ) {
                                $category = get_the_category();
                                $ID = $category[0]->cat_ID;
                                echo get_category_parents($ID, TRUE, __(' &raquo; ', FB_BASIS_TEXTDOMAIN), FALSE );
                        } elseif (is_page() && $post->post_parent ) {
                                _e( get_the_title($post->post_parent) );
                                _e(' &raquo; ');
                                _e( the_title() );
                        } elseif ( is_search() ) {
                                _e('Suche nach: ', FB_BASIS_TEXTDOMAIN) . the_search_query() . _e('</p>');
                        }
                }
        }
}

maintenant un exemple sans maison

if ( !function_exists('fb_breadcrumb_nav') ) {
        function fb_breadcrumb_nav() {
                if ( !is_home() || !is_front_page() ) {
                        echo '<p class="breadcrumb">';
                        _e( ' &raquo; ', FB_BASIS_TEXTDOMAIN );
                        if ( is_category() || is_single() ) {
                                $category = get_the_category();
                                $ID = $category[0]->cat_ID;
                                echo get_category_parents($ID, TRUE, __(' &raquo; ', FB_BASIS_TEXTDOMAIN), FALSE );
                        } elseif (is_page() && $post->post_parent ) {
                                _e( get_the_title($post->post_parent) );
                                _e(' &raquo; ');
                                _e( the_title() );
                        } elseif ( is_search() ) {
                                _e('Suche nach: ', FB_BASIS_TEXTDOMAIN) . the_search_query() . _e('</p>');
                        }
                }
        }
}
1
bueltge

Incroyable mais encore une fois j'ai trouvé la solution moi-même ..

c'est probablement vous qui m'avez inspiré - merci :)

J'ai décidé de passer un paramètre à bcn_display () au cas où je ne voudrais pas obtenir le lien "accueil" dans la trace. Par défaut, le paramètre est défini sur true.
Lorsque je ne veux pas que le lien "accueil" soit affiché) envoyer vrai

maintenant j'ai ajouté la déclaration du paramètre dans ces fonctions et ajouté du code

//in file breadcrumb_navxt_class.php

function do_home($displayhome=true)
{...

if(($this->opt['home_display'])&&($displayhome))

...}

function fill($displayhome=false)
{...

if(!is_front_page())
{

     $this->do_home($displayhome);

}

...}

function display($displayhome=true,$return = false, $linked = true, $reverse = false)
{...}

//in file breadcrumb_navxt_admin.php

function display($displayhome=true,$return = false, $linked = true, $reverse = false)
{
        //Grab the current settings from the DB

        $this->breadcrumb_trail->opt = $this->get_option('bcn_options');

        //Generate the breadcrumb trail

        $this->breadcrumb_trail->fill($displayhome);

        return $this->breadcrumb_trail->display($displayhome,$return, $linked, $reverse);

}

function bcn_display($displayhome=true,$return = false, $linked = true, $reverse = false) {

        global $bcn_admin;

        return $bcn_admin->display($displayhome,$return, $linked, $reverse);

}
1
zina