调试-正在尝试将搜索框添加到菜单

时间:2014-03-19 作者:Leo

我已经在stackoverflow上问了一个类似的问题(https://stackoverflow.com/questions/22492292/add-filter-in-wordpress-how-do-i-know-if-it-is-run), 但也许那是个错误的地方?

如您所见,我正在尝试以我看到的推荐方式添加搜索框:

add_filter(\'wp_nav_menu_items\',\'menu_search\');
function menu_search($items){
  $search = \'<li class="search">\';
  $search .= \'<form method="get" id="searchform" action="/">\';
  $search .= \'<input type="text" class="field" name="s" id="s" placeholder="Search" />\';
  $search .= \'</form>\';
  $search .= \'</li>\';
  return $items . $search;
}
但是,我在菜单中没有看到搜索框的痕迹。事实上,添加到add\\u filter的代码似乎没有运行。

这里有几件事我不知道。我在下划线主题的基础上,在一个新主题中这样做(请参见http://underscores.me/) 因为我需要一个很轻的主题。我开始怀疑过滤代码是否在下划线主题中运行。最好的检查方法是什么?(我一点也不知道php调试。我只是添加了调试栏等)这里的下划线主题是否遗漏了什么?我的意思是我应该为它添加任何东西来运行过滤吗?

3 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

wp_nav_menu_items 法典中没有提到,因此没有关于如何使用它的具体描述。

wp_nav_menu_items 可在第347行中找到

wp包括/导航菜单模板。php

$items = apply_filters( \'wp_nav_menu_items\', $items, $args );
wp_nav_menu.

codex, 声明如下

显示在外观中创建的导航菜单→ 菜单面板。

这意味着wp_nav_menu_items 仅当存在在“菜单”面板中创建的导航菜单,而不是在默认导航菜单上创建的导航菜单时,才会激发。在我看来,这是一个设计缺陷。wp_nav_menu_items 实际上也应该包含在默认菜单中。这也是我测试过的任何教程中都没有提到的一个方面。

我还测试了另一个过滤器,wp_list_pages, 这似乎像预期的那样起作用。

不过,您的代码也有问题。当我将其添加到默认导航栏时,我所做的任何搜索都会将我发送到数据库。实际上又是这样。我找不到合适的例子。我最终在一个名为search-box-on-navigation-menu.

<?php
add_filter(\'wp_nav_menu_items\',\'add_search_box\', 10, 2);
function add_search_box($items, $args) {

        ob_start();
        get_search_form();
        $searchform = ob_get_contents();
        ob_end_clean();

        $items .= \'<li>\' . $searchform . \'</li>\';

    return $items;
    }
?>
要使此代码在默认导航栏上工作,只需在代码中添加以下行add_filter(\'wp_list_pages\',\'add_search_box\', 10, 2);, 所以你的最终代码是

<?php
add_filter(\'wp_list_pages\',\'add_search_box\', 10, 2);
add_filter(\'wp_nav_menu_items\',\'add_search_box\', 10, 2);
function add_search_box($items, $args) {

        ob_start();
        get_search_form();
        $searchform = ob_get_contents();
        ob_end_clean();

        $items .= \'<li>\' . $searchform . \'</li>\';

    return $items;
}    
?> 
希望这有帮助

SO网友:umesh

您也可以使用此

add_filter( \'wp_nav_menu_items\',\'add_search_box\', 10, 2 );
function add_search_box( $items, $args ) {
    $items .= \'<li>\' . get_search_form( false ) . \'</li>\';
    return $items;
}

SO网友:rockmandew

这是一个更简单的解决方案-将以下内容添加到函数中。php文件:

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\'>".get_search_form(false)."</li>";
    return $items;
}
在此函数中,您将看到IF语句正在检查所需的位置,具体来说,本示例正在检查主菜单:

if( $args->theme_location == \'primary\' )
您也可以使用类似的方法来确定哪个菜单:

$args->menu->slug == ‘the_menu_slug’
如果有主菜单,它将返回“return$items”引号中的任何内容:

return $items."<li class=\'menu-header-search\'>".get_search_form(false)."</li>";
在本例中,我创建了一个列表项并将get_search_form() WP功能。

最重要的是,要将其作为列表项显示在菜单中,需要将get\\u search\\u form()设置为false:

get_search_form(false)
这是因为get\\u search\\u form()函数中有以下参数:

$echo(bool)(可选)默认为echo,不返回表单。默认值:true

这将在任何特定菜单中成功实现所需的搜索表单。

结束

相关推荐

WordPress在激活WP_DEBUG后出现错误

在根目录中,我查找wp-config.php 在我设置的文件中WP_DEBUG 到true 然后得到以下错误:1) 不推荐:在/home2/root/public\\u html/website/wp-content/plugins/exec-php/exec-php中,不推荐通过引用分配new的返回值。php第22行这是一句话:$GLOBALS[\'g_execphp_manager\'] =& new ExecPhp_Manager();2) 注意:自3.4版以来,add\\u custom\