如何从任何地方转储导航菜单项?

时间:2012-03-19 作者:daniel.tosaba

我想预览nav菜单$项数组包含的所有字段。是否有一个函数可以从任何地方获取它并将其放置在var\\u dump中?

1 个回复
最合适的回答,由SO网友:fuxia 整理而成

项目在中设置wp_nav_menu(). 您可以使用一个有用的过滤器:\'wp_nav_menu_objects\'. 它提供以下项目:$sorted_menu_items 以及wp_nav_menu() 呼叫方式$args.

从…起wp-includes/nav-menu-template.php::wp_nav_menu():

$sorted_menu_items = apply_filters( \'wp_nav_menu_objects\', $sorted_menu_items, $args );
所以…

钩住此筛选器,将数据存储在某处,返回$sorted_menu_items 完成所有菜单后,保持不变并打印收集的数据在下面的示例中,我将数据打印到\'shutdown\' – 这是WordPress发布的最新钩子。

<?php # -*- coding: utf-8 -*-
/**
 * Plugin Name: T5 Collect Nav Menu Items
 * Description: Appends debug information about currently processed nav menu items to pages.
 */

add_filter( \'wp_nav_menu_objects\', array ( \'T5_Nav_Menu_Collector\', \'collect\' ), 99, 2 );

class T5_Nav_Menu_Collector
{
    /**
     * Stores the data
     * @type array
     */
    protected static $collection = array ();

    /**
     * Collect nav menu data.
     *
     * @wp-hook wp_nav_menu_objects
     * @param   array $sorted_menu_items
     * @param   array $args
     * @return  array $sorted_menu_items   Not changed.
     */
    public static function collect( $sorted_menu_items, $args )
    {
        // Since we *know* we have data, we register the print action.
        add_action( \'shutdown\', array ( __CLASS__, \'print_collection\' ) );

        self::$collection[] = array(
            \'args\'  => $args,
            \'items\' => $sorted_menu_items
        );
        return $sorted_menu_items;
    }

    /**
     * Dump the collected data.
     *
     * @wp-hook shutdown
     * @return  void
     */
    public static function print_collection()
    {
        $output = htmlspecialchars( print_r( self::$collection, TRUE ) );
        print "<pre><b>Nav Menu Data</b>\\n\\n$output</pre>";
    }
}
如果没有导航菜单,则什么也不会发生。但是,如果我们可以收集一些数据,我们会在文档末尾得到一个很长的列表,其中包含可以在其他过滤器中使用的所有项属性。

结束

相关推荐

Wordpress Custom Menus Issue

在我的模板中,我使用这样的调用来输出一些自定义菜单:<?php wp_nav_menu(array(\'container_class\' => \'secondary-navigation\', \'theme_location\' => \'secondary\')); ?> 自从升级到WordPress 3.1.4后,我就可以获得完整的页面列表,而不是自定义菜单我看到修复程序(通过谷歌)说我应该添加以下内容来修复此问题:\'fallback_cb\' => f