Php 添加自定义<;李>;到Wordpress导航菜单
我无法完全理解自定义Walker在worpress中的工作原理: theme的home.php中的代码(实际上所有代码都包含在其他文件中,以避免弄乱HTML)如下所示:Php 添加自定义<;李>;到Wordpress导航菜单,php,wordpress,Php,Wordpress,我无法完全理解自定义Walker在worpress中的工作原理: theme的home.php中的代码(实际上所有代码都包含在其他文件中,以避免弄乱HTML)如下所示: /** * Contains wordpress function with array with parameters * @return string HTML output */ function show_main_navigation() { return wp_nav_menu( arr
/**
* Contains wordpress function with array with parameters
* @return string HTML output
*/
function show_main_navigation() {
return wp_nav_menu(
array(
'theme_location' => 'header-menu',
'echo' => false,
'depth' => '-1',
'walker' => new Last_Item_Walker()
)
);
}
class Last_Item_Walker extends Walker_Nav_Menu {
function end_lvl( &$output, $depth = 0, $args = array() ) {
$indent = str_repeat("\t", $depth);
$output .= '<li class="spec"><a href="#" title="title">title</a></li>'; // my custom <li>
$output .= "$indent</ul>\n";
}
}
沃克看起来像这样:
/**
* Contains wordpress function with array with parameters
* @return string HTML output
*/
function show_main_navigation() {
return wp_nav_menu(
array(
'theme_location' => 'header-menu',
'echo' => false,
'depth' => '-1',
'walker' => new Last_Item_Walker()
)
);
}
class Last_Item_Walker extends Walker_Nav_Menu {
function end_lvl( &$output, $depth = 0, $args = array() ) {
$indent = str_repeat("\t", $depth);
$output .= '<li class="spec"><a href="#" title="title">title</a></li>'; // my custom <li>
$output .= "$indent</ul>\n";
}
}
class Last\u Item\u Walker扩展了Walker\u导航菜单{
函数end_lvl(&$output,$depth=0,$args=array()){
$indent=str\u repeat(“\t”,$depth);
$output.=';//我的自定义
$output.=“$indent\n”;
}
}
覆盖方法就是不起作用
如果我尝试覆盖其他方法,例如:
class Last_Item_Walker extends Walker_Nav_Menu {
function end_el( &$output, $item, $depth = 0, $args = array() ) {
$output .= "<br>"; // for demonstration
$output .= "</li>\n";
}
}
class Last\u Item\u Walker扩展了Walker\u导航菜单{
函数end_el(&$output,$item,$depth=0,$args=array()){
$output.=“
”;//用于演示
$output.=“\n”;
}
}
这一个有效,添加了br标签,但这不是我想要的,我想在/ul之前定制最后一个li
有人能帮我吗?如果您不太担心IE8及以下版本,可以使用:last child选择器
li.spec:last-child{
color: red;
}
如果您担心IE8及以下版本,您可以使用a使其正常工作。如果您不太担心IE8及以下版本,您可以使用:last child选择器
li.spec:last-child{
color: red;
}
如果你对IE8和更少的问题感到烦恼,你可以使用一个过滤器使其工作。好的,使用过滤器更容易
/**
* Hardcodes shop item in navigation
* @param string $items HTML with navigation items
* @param object $args navigation menu arguments
* @return string all navigation items HTML
*/
function new_nav_menu_items($items, $args) {
if($args->theme_location == 'header-menu'){
$shop_item = '<li class="spec"><a href="#" title="title">title</a></li>';
$items = $items . $shop_item;
}
return $items;
}
add_filter('wp_nav_menu_items', 'new_nav_menu_items', 10, 2);
/**
*导航中的商店商品硬编码
*@param string$items带导航项的HTML
*@param object$args导航菜单参数
*@return string所有导航项HTML
*/
功能新建导航菜单项($items,$args){
如果($args->theme\u location=='标题菜单'){
$shop_item=';
$items=$items.$shop\u项目;
}
退回$items;
}
添加过滤器(“wp\U导航菜单项”,“新建导航菜单项”,10,2);
好的,使用过滤器更容易
/**
* Hardcodes shop item in navigation
* @param string $items HTML with navigation items
* @param object $args navigation menu arguments
* @return string all navigation items HTML
*/
function new_nav_menu_items($items, $args) {
if($args->theme_location == 'header-menu'){
$shop_item = '<li class="spec"><a href="#" title="title">title</a></li>';
$items = $items . $shop_item;
}
return $items;
}
add_filter('wp_nav_menu_items', 'new_nav_menu_items', 10, 2);
/**
*导航中的商店商品硬编码
*@param string$items带导航项的HTML
*@param object$args导航菜单参数
*@return string所有导航项HTML
*/
功能新建导航菜单项($items,$args){
如果($args->theme\u location=='标题菜单'){
$shop_item=';
$items=$items.$shop\u项目;
}
退回$items;
}
添加过滤器(“wp\U导航菜单项”,“新建导航菜单项”,10,2);
经过更多的测试后,我发现end_lvl只对子菜单有效,而不是菜单。但问题仍然存在,我是如何为顶级lvl菜单做到这一点的。经过更多的测试,我发现end_lvl只在子菜单上工作,而不是菜单上。但问题仍然存在,我如何为顶级lvl菜单做到这一点。我知道我可以用CSS做到这一点,在WorpAddress admin中甚至有向菜单项添加自定义类的选项,但不幸的是,我需要用wordpress代码而不是CSS来做这件事。我明白了。所以当你说定制时,你需要对最后一个元素做什么?你需要添加一个吗?我知道我可以用CSS来做,在WorpAddress admin中甚至有向菜单项添加自定义类的选项,但不幸的是我需要用wordpress代码而不是CSS来做。我明白了。所以当你说定制时,你需要对最后一个元素做什么?您需要添加一个
吗?很高兴您对它进行了排序@Roo。很高兴您对它进行了排序@Roo。