web-dev-qa-db-ja.com

メニューでの入力タイプ検索

こんにちは、私は次のことを達成したいのです。検索入力欄を登録メニューにしたいそのため、私はwpbeginner.comチュートリアルを読みました。これは基本的にはフィルタフックを使ったアプローチに従っています。

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;
}

だからこれは私の人生で最初のフィルターフックになるようです。 "search-widget"出力に似たhtml出力を得るために、私はこの解決策を思いつきます。私の初心者の意見では、それはより悪いコーディングの例であるように思われます。

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);

うまくいっているようですが…。これが私の質問です。

私の目標を達成するためのより保守可能な、またはより明確な方法があるかどうか、私は思っています(PHP、WPおよび英語)のnoobとして?

それとも…私は自分の低レベルのphpスキルだけでイライラしていませんか?それともあなたにとって普通のコードのように見えますか?

このようなフィルタフックのための良い場所はどこにありますか(実際にはナビゲーションの登録のすぐ下のfunctions.phpに置かれています)?

事前に感謝します

1

これは問題ありませんが、物事を「きれいに」見せ、変更しやすくしたい場合は、代わりに新しいファイルmenu-search.phpを作成してそこにHTMLを追加してから、関数を少し微調整してください。あなたの機能)

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