add_filter在Wordpress,我怎么知道它是否运行


add_filter in Wordpress, how do I know if it is run?

我想在Wordpress的主菜单中添加一个搜索框。根据网上的一些帖子,可以这样做:

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

由于某些原因无法工作,菜单中没有搜索框。我不习惯PHP和PHP的调试,所以我刚刚安装了这个插件调试。它显示了上面的函数menu_search确实在wp_nav_menu_items上。

我该如何深入研究这个?

更新:我使用调试栏+调试我的插件。它们似乎是非常好的工具。所以我发现了问题:菜单不是WP所期望的。所以这个过滤器没有运行。事实上,菜单是由wp_page_menu设置的。现在我要试着理解为什么会这样,这意味着什么。: -)

我刚刚做了一个关于WPSE的完整答案,让大家去看看。希望这篇文章能对大家有所帮助。

调试-尝试在菜单中添加搜索框

一种快捷的方法是在'hook '函数中调用error_log(),如下所示:

add_filter("the_filter_name", "the_function_name", 10, 4);
function the_function_name($p1, $p2, $p3, $p4)
{
   error_log(__FUNCTION__ . "'n", 3, "/tmp/plugin.log");
}

你可以用一些时间戳信息和换行字符来包装error_log

// simple debug function
function plugin_debug($msg)
{
    error_log( $msg . "'n", 3, "/tmp/plugin.log");
}
  1. 将此代码添加到function.php中。

  2. 显示在标题菜单上。

add_filter('wp_nav_menu_items','menu_search');
function menu_search($items){
  $search = '<li class="search">';
  $search .= '<form method="get" id="searchform" action="'.site_url().'/">';
  $search .= '<input type="text" class="field" name="s" value="'.get_search_query().'" id="s" placeholder="Search" />';
  $search .= '</form>';
  $search .= '</li>';
  return $items . $search;
}

更多信息