如何以编程方式在自定义菜单中添加元素

时间:2014-08-21 作者:drake035

在我的WP自定义菜单中,有一个项目下面有一个下拉列表,其中列出了一些CPT的所有实例。

我知道的唯一方法是使用PHP在DOM中的其他地方创建列表,然后使用Javascript将该列表移到自定义菜单项中。

问题:这需要Javascript。

有没有一种方法可以通过“黑客”构建自定义菜单的函数来做同样的事情,这样当菜单由PHP创建时,它就已经包含了这个CPT实例列表?

1 个回复
SO网友:BA_Webimax

你想做的事是可以做到的。它不太可能真的干净整洁。

您可以通过使用自定义Walker Class 对于wp_nav_menu() 插入时。

class My_Walker_Class extends Walker_Nav_Menu {

    function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
        $output .= sprintf( "\\n<li><a href=\'%s\'%s>%s</a></li>\\n",
            $item->url,
            ( $item->object_id === get_the_ID() ) ? \' class="current"\' : \'\',
            $item->title
        );

        /**
         * Here you will need to add a conditional to see if the parent menu item was found
         * and if so go into a subroutine that grabs your CPT list. Add it all to $output.
         */

        if ( $item->object_id == 111 ) // Match by ID
        {
            // Call external function that generates CPT list
            $output .= my_get_cpt_list();
        }
    }

}

$args = array(
    \'theme_location\'  => \'my_theme_location\',
    \'menu\'            => \'my_menu\',
    \'container\'       => \'div\',
    \'container_class\' => \'\',
    \'container_id\'    => \'\',
    \'menu_class\'      => \'menu\',
    \'menu_id\'         => \'\',
    \'echo\'            => true,
    \'fallback_cb\'     => \'wp_page_menu\',
    \'before\'          => \'\',
    \'after\'           => \'\',
    \'link_before\'     => \'\',
    \'link_after\'      => \'\',
    \'items_wrap\'      => \'<ul id="%1$s" class="%2$s">%3$s</ul>\',
    \'depth\'           => 0,
    \'walker\'          => new My_Walker_Class()
);

wp_nav_menu( $args );
当然,根据需要进行调整,使其实际工作。

结束

相关推荐

How to add taxonomy in menus?

书籍(自定义帖子类型)小说(税)科学(税)历史(税)--书籍体裁(税务)小说(术语)科学(学期)历史(学期)以下哪一项是做这件事的“好方法”?对于前一个(这是我目前在管理菜单中的功能,我为每个功能都提供了“register\\u taxonomy”功能),我无法选择要在菜单中显示的“Tax”。而对于后者,我可以将它们添加到菜单中,只需要一个“register\\u taxonomy”函数。