web-dev-qa-db-fra.com

Comment puis-je accrocher et modifier le texte d'une balise wp_nav_menu <a>?

J'essaie de changer le texte affiché pour les balises d'ancrage dans le wp_nav_menu li.

En fait, j’ai réussi à le faire avec jQuery, rien d’exceptionnel, car je ne suis certainement pas un professionnel. Vous pouvez voir le code de base ici:

jQuery(document).ready(function () {

    jQuery('.menu-item-30 > a').html('<i class="fas fa-home"></i>');

});

Cela fonctionne, ce code trouvera la balise d'ancrage dans le menu de navigation souhaité li et changera l'icône en une toute petite maison pour la page d'accueil. Le problème est que lorsque je charge la page, pendant un court instant, avant que la maison ne se charge, je peux voir le texte original dans cette balise d'ancrage qui est "home" et qui ne semble pas professionnelle. Ce que j'essaie de dire, c'est que la page se charge et ensuite ce code fonctionne sensiblement après.

Par conséquent, j’ai pensé que c’est peut-être là que les filtres et les crochets entrent en jeu. Cependant, d'après ce que j'ai compris, vous ne pouvez pas vraiment insérer jQuery dans PHP et le définir en tant que filtre, n'est-ce pas? Peut-être ai-je juste besoin de changer "prêt" dans jQuery pour autre chose.

Par conséquent, comment puis-je changer le texte entre <a> et </a> de 'Home' à <i class="fas fa-home"></i> pendant que, simultanément, il se charge pendant le chargement de la page et non après?

1
Ruke

Un moyen d'obtenir un tel effet serait d'utiliser wp_nav_menu_objects hook.

function modify_home_in_nav_menu_objects( $items, $args ) {
    foreach ( $items as $k => $object ) {
        // you can also target given page using this if:
        // if ( 'page' == $object->object && 2 == $object->object_id ) {
        if ( 30 == $object->ID ) {
            $object->title = '<i class="fas fa-home"></i>';
        }
    }
    return $items;
}
add_filter( 'wp_nav_menu_objects', 'modify_home_in_nav_menu_objects', 10, 2 );

PS Devrait-il vraiment y avoir fas et non fa?

0