web-dev-qa-db-fra.com

Ajout de sauts de ligne aux éléments de menu de navigation

Je dois ajouter des sauts de ligne aux titres des éléments de menu de navigation. Je ne savais pas que c'était un problème, car lorsque je suis connecté en tant que super administrateur, je peux très bien ajouter <br/>, mais apparemment, les administrateurs de niveau normal ne le peuvent pas.

J'ai lu cet article Menus personnalisés Description Suppression des balises HTML

mais je suis assez convaincu que les balises sont dépouillées lors de la sauvegarde/mise à jour, je ne vois donc pas immédiatement comment un Custom Walker est la solution, mais mon cerveau est plutôt bien tiré aujourd'hui, alors c'est peut-être évident.

De plus, il ne semble pas y avoir d’assainissement dans wp_save_nav_menu_items() ou wp_update_nav_menu_item().

7
helgatheviking

Suite à la suggestion de @Rarst concernant les caractères sécurisés, voici ce que j'ai fini par faire:

function wpa_105883_menu_title_markup( $title, $id ){
    if ( is_nav_menu_item ( $id ) && ! is_admin() ){
        $title = preg_replace( '/#BR#/', '<br/>', $title );
    }
    return $title;
}
add_filter( 'the_title', 'wpa_105883_menu_title_markup', 10, 2 );

Edit : aussi par le commentaire de Rarst, j'ai remplacé le preg_replace par str_ireplace

function wpa_105883_menu_title_markup( $title, $id ){
    if ( is_nav_menu_item ( $id ) ){
        $title = str_ireplace( "#BR#", "<br/>", $title );
    }
    return $title;
}
add_filter( 'the_title', 'wpa_105883_menu_title_markup', 10, 2 );
9
helgatheviking

Sans tourner la logique de désinfection à l'envers ou coder une interface personnalisée pour elle ... Je voudrais simplement désigner un caractère sûr pour elle (par exemple le tube |) et la remplacer par une balise break en sortie.

Il passe par le filtre the_title dans le lecteur. Il suffit d’ajouter et de supprimer le filtre en temps voulu pour qu’il n’affecte pas les titres ailleurs.

3
Rarst