web-dev-qa-db-fra.com

Comment var_dump les éléments de menu de navigation de n'importe où?

Je veux prévisualiser tous les champs contenus dans le tableau de navigation $ item. Existe-t-il une fonction permettant de le récupérer n'importe où et de le placer dans var_dump?

3
daniel.tosaba

Les éléments sont configurés dans wp_nav_menu() . Il existe un filtre utile que vous pouvez utiliser: 'wp_nav_menu_objects'. Il propose les éléments sous la forme $sorted_menu_items et les arguments de l'appel wp_nav_menu() sous la forme $args.

De wp-includes/nav-menu-template.php::wp_nav_menu():

$sorted_menu_items = apply_filters( 'wp_nav_menu_objects', $sorted_menu_items, $args );

Alors …

  • accrocher dans ce filtre,
  • stocker les données quelque part,
  • renvoyer le $sorted_menu_items inchangé et
  • imprimer les données collectées une fois que tous les menus sont terminés.

Dans mon exemple suivant, j’imprime les données sur 'shutdown' - c’est le dernier crochet que WordPress lance.

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

S'il n'y a pas de menu de navigation, rien ne se passe. Mais si nous pouvions collecter des données, nous obtenons une longue liste de Nice à la fin d'un document avec toutes les propriétés d'élément que nous pouvons utiliser dans d'autres filtres.

5
fuxia