嗨,作为一个noob,我想实现以下目标。我想在注册菜单中加入搜索输入字段。因此我读了一本WP初学者的书。com教程,它基本上遵循一个带有过滤器挂钩的aproach。
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;
}
因此,这似乎成为我生命中的第一个过滤器挂钩。为了获得类似于“搜索小部件”输出的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技能感到恼火吗?或者它看起来像你的普通代码?
哪里是这样的过滤器挂钩的好地方(实际上它直接放在my functions.php的导航注册下)?
非常感谢
最合适的回答,由SO网友:WPExplorer 整理而成
这很好,但是如果您想让事情看起来“更干净”并且更容易修改,您可以创建一个新的文件菜单搜索。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\\u filter(\'wp\\u nav\\u menu items\',\'myprefix\\u add\\u search\\u box\\u to\\u menu\',10,2);