我有一个菜单wp_nav_menu
看起来像
<ul class="nav-menu" id="menu-top-nav">
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-43" id="menu-item-43"><a href="http://www.example.com/item1.com">Item 1</a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-44" id="menu-item-44"><a href="http://www.example.com/item2.com">Item 2</a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-45" id="menu-item-45"><a href="http://www.example.com/item3.com">Item 3</a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-46" id="menu-item-46"><a href="http://www.example.com/item4.com">Item 4</a></li>
</ul>
我想通过使用我的插件在“项目3”中添加一个子菜单来修改上面的菜单,所以下面是我想要的输出。
<ul class="nav-menu" id="menu-top-nav"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-43" id="menu-item-43"><a href="http://www.example.com/item1.com">Item 1</a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-44" id="menu-item-44"><a href="http://www.example.com/item2.com">Item 2</a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-45" id="menu-item-45"><a href="http://www.example.com/item3.com">Item 3</a>
<ul class="sub-menu">
<li class="menu-item" id="menu-item-48"><a href="http://www.example.com/child1.com">child 1</a></li>
<li class="menu-item" id="menu-item-49"><a href="http://www.example.com/child2.com">child 2</a></li>
<li class="menu-item" id="menu-item-50"><a href="http://www.example.com/child3.com">child 3</a></li>
</ul>
</li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-46" id="menu-item-46"><a href="http://www.example.com/item4.com">Item 4</a></li>
</ul>
我尝试了以下过滤器,但这些并没有帮助我实现上述输出。
wp_setup_nav_menu_item
wp_get_nav_menu_items
wp_nav_menu_items
Workaround 1:
add_filter(\'wp_nav_menu_items\', \'my_custom_menu_item\', 10, 2);
function my_custom_menu_item($items, $args)
{
$parent_item_number = 3;
$pos = nth_strpos($items, \'</a>\', $parent_item_number) + 4;
$cat_id = 9;
$args = array(\'numberposts\' => 5, \'category\' => $cat_id);
$myposts = get_posts($args);
if (!empty($myposts))
{
$str_to_insert = \'<ul class="sub-menu">\';
global $post;
foreach ($myposts as $post) :
setup_postdata($post);
$str_to_insert .= \'<li><a href="\' . get_permalink() . \'">\' . get_the_title() . \'</a></li>\';
endforeach;
$str_to_insert .= \'</ul>\';
$items = substr($items, 0, $pos) . $str_to_insert . substr($items, $pos);
}
return $items;
}
function nth_strpos($str, $substr, $n, $stri = false)
{
if ($stri)
{
$str = strtolower($str);
$substr = strtolower($substr);
}
$ct = 0;
$pos = 0;
while (($pos = strpos($str, $substr, $pos)) !== false)
{
if (++$ct == $n)
{
return $pos;
}
$pos++;
}
return false;
}
上述解决方案可行,但我认为这不是实现预期结果的正确方法。我希望你能给我一个好的解决方案。