web-dev-qa-db-fra.com

Recherche de type d'entrée dans le menu

Salut comme un noob je veux atteindre le suivant. Je veux apporter un champ de saisie de recherche dans un menu enregistré. J'ai donc lu un tutoriel sur wpbeginner.com, qui suit essentiellement une approche avec un crochet de filtre.

add_filter('wp_nav_menu_items','add_search_box_to_menu', 10, 2);
function add_search_box_to_menu( $items, $args ) {
    if( $args->theme_location == 'primary' ){
        return $items."<li class='menu-header-search'><form action='http://example.com/' id='searchform' method='get'><input type='text' name='s' id='s' placeholder='Search'></form></li>";
        }
    return $items;
}

Cela semble donc devenir le premier crochet de filtre de ma vie. Afin d'obtenir une sortie html, qui est similaire à la sortie "search-widget", je viens à cette solution et à mon avis de débutants, cela semble être un exemple de pire codage.

function add_search_box_to_menu($items, $args) {
        if ($args->theme_location == 'menu-1') {
            return $items . "<li class='search-field'>"
                    . "<form action='"
                    . esc_url(home_url())
                    . "' id='searchform'"
                    . " method='get'"
                    . "role ='search'>"
                    . "<label>"
                    . "<span class='screen-reader-text'>" 
                    . esc_html__('Search for:', 'bloook')
                    . "</span>"
                    . "<input type='search' name='s' id='s' "
                    . "placeholder='" 
                    . esc_html__('Search', 'bloook') 
                    . "'>" 
                    . "</label>"
                    . "<input class='search-submit' value ='"
                    . esc_html__('Search', 'bloook')
                    . "' type='submit'>"
                    . "</form></li>";
        }
        return $items;
    }
    add_filter('wp_nav_menu_items', 'add_search_box_to_menu', 10, 2);

Bien que cela semble fonctionner ... Voici mes questions:

En tant que Noob (PHP, WP & English), je me demande s’il existe un moyen plus facile à gérer ou plus clair d’atteindre mon objectif?

Ou ... Suis-je seulement auto-irrité par mes faibles compétences en php? Ou cela ressemble-t-il à du code normal pour vous?

Où est un bon endroit pour un crochet de filtre comme celui-ci (en fait, il est placé dans mon functions.php directement sous l’enregistrement de la navigation)?

Merci d'avance

1
Friedrich Siever

C'est bien, mais si vous voulez que les choses aient l'air plus "propres" et plus faciles à modifier, vous pouvez créer un nouveau fichier menu-search.php et y ajouter votre code HTML, puis peaufiner un peu votre fonction (n'oubliez pas de préfixer vos fonctions)

function myprefix_add_search_box_to_menu($items, $args) {
if ( $args->theme_location == 'menu-1' ) {
    ob_start();
    get_template_part( 'menu-search' );
    $items .= ob_get_clean();
}
return $items;

} add_filter ('wp_nav_menu_items', 'myprefix_add_search_box_to_menu', 10, 2);

1
WPExplorer