WordPress : Comment remplacer cette fonction de thème dans le thème enfant
Je travaille dans un thème enfant et j’ai besoin de remplacer une fonction afin de supprimer certains éléments indésirables d’un menu supérieur. J’ai donc fait un peu de recherche et trouvé beaucoup de docs, vraiment, comme ça, ça et ça entre autres mais toujours pas clair du tout pour moi comment y parvenir sur mon cas spécifique. J’espère donc que quelqu’un ici pourra m’orienter sur la bonne direction. J’ai ces fonctions dans le functions.php
fichier de thème d’origine :
function udesign_nav() {
if ( function_exists( 'wp_nav_menu' ) ) {
$defaults = array(
'container_class' => 'navigation-menu',
'container_id' => 'navigation-menu',
'menu_id' => 'main-top-menu',
'menu_class' => 'sf-menu',
'link_before'=> '<span>',
'link_after' => '</span>',
'theme_location' => 'primary',
'fallback_cb' => 'udesign_nav_fallback'
);
wp_nav_menu( $defaults );
} else {
udesign_nav_fallback();
}
}
function udesign_nav_fallback() {
$menu_html = '<div id="navigation-menu" class="navigation-menu">';
$menu_html .= '<ul id="main-top-menu" class="sf-menu">';
$menu_html .= is_front_page() ? "<li class='current_page_item'>" : "<li>";
$menu_html .= '<a href="'.home_url().'"><span>'.esc_html__('Home', 'udesign').'</span></a></li>';
$menu_html .= wp_list_pages('depth=5&title_li=0&sort_column=menu_order&link_before=<span>&link_after=</span>&echo=0');
$menu_html .= '</ul>';
$menu_html .= '</div>';
echo $menu_html;
}
Et ça s’appelle, je crois, ici :
// Setup the main menu
function udesign_top_main_menu() {
ob_start(); ?>
<div class="clear"></div>
<div id="main-menu">
<div id="dropdown-holder" class="container_24">
<?php udesign_nav(); // this function calls the main menu ?>
</div>
<!-- end dropdown-holder -->
</div>
<!-- end top-main-menu -->
<?php
$main_menu_html = ob_get_clean();
echo apply_filters( 'udesign_get_top_main_menu', $main_menu_html );
}
add_action('udesign_top_wrapper_bottom', 'udesign_top_main_menu', 10);
Ce que j’ai besoin de remplacer, c’est simplement de supprimer ces deux lignes de udesign_nav_fallback()
la fonction :
$menu_html .= is_front_page() ? "<li class='current_page_item'>" : "<li>";
$menu_html .= '<a href="'.home_url().'"><span>'.esc_html__('Home', 'udesign').'</span></a></li>';
Que dois-je faire pour y parvenir en utilisant le functions.php
thème enfant?
Solution n°1 trouvée
Vous ne pouvez pas remplacer la ou les fonctions. Ils ne sont pas destinés à être écrasés. Voir : « Remplacer la fonction du thème parent qui n’est pas accrochée ou dans le fichier functions.php » et « Est-il possible de désactiver une fonction d’un thème parent ? ». C’est la réponse directe à votre question.
Cependant, vous pouvez presque certainement obtenir le résultat souhaité en utilisant le filtre fourni par le thème udesign_get_top_main_menu
— — ou n’importe quel nombre de filtres fournis par wp_nav_menu()
ou par la Walker_Nav_menu
classe — peut -être wp_nav_menu_objects
ou wp_nav_menu_items
.
Selon la question, vous souhaitez supprimer :
$menu_html .= is_front_page() ? "<li class='current_page_item'>" : "<li>"; $menu_html .= '<a href="'.home_url().'"><span>'.esc_html__('Home', 'udesign').'</span></a></li>';
D’accord. Vous devez probablement utiliser le filtre fourni dans le code posté :
function udesign_strip($menu) {
var_dump($menu);
$menu_html = is_front_page() ? "<li class='current_page_item'>" : "<li>";
$menu_html .= '<a href="'.home_url().'"><span>'.esc_html__('Home', 'udesign').'</span></a></li>';
$menu = str_replace($menu_html,'',$menu);
return $menu;
}
add_filter('udesign_get_top_main_menu','udesign_strip');
Je n’aime pas str_replace
le balisage mais c’est probablement la meilleure façon dans ce cas.
0 commentaire