web-dev-qa-db-fra.com

Remplacement des fonctionnalités du menu WordPress par un plugin

J'ai déjà posé cette question à StackOverflow.com avant de réaliser qu'il existait un StackExchange spécifiquement pour WordPress. Voici le lien vers l'ancienne question (pour la suppression du modérateur):

https://stackoverflow.com/questions/6862887/replacing- wordpress-core-functionality-with-a-plugin

Je crée un plugin WordPress pour une disposition de menu personnalisée. Je suis bien conscient que je pourrais tout aussi facilement implémenter ce menu directement dans le thème et que j'ai lu assez complètement sur les fonctionnalités et les limitations de wp_nav_menu(), en plus j'ai déjà essayé et testé chaque plugin déjà créé pour remplacer le menu WordPress par défaut .

Je souhaite utiliser un plugin car mon client l'implémentera sur plusieurs sites WordPress différents, dont la plupart tournent autour de thèmes différents. La plupart d'entre eux sont des thèmes que je n'ai pas créés et que je ne souhaite pas réécrire leur code. cas, ils mettent à jour le thème à l'avenir.

Lorsque j'ai examiné une façon d'implémenter le menu dans le thème, j'ai constaté qu'il n'y avait que deux bonnes méthodes car il n'y a pas de hook ou de filtre appelé au moment de l'affichage du menu. La première consiste à changer le thème pour rechercher le plugin (ceci est similaire à la méthode utilisée par PixoPoint et de nombreux autres plugins de menu):

header.php:

if(function_exists('pixopoint_menu')){
    pixopoint_menu();
} else {
    wp_nav_menu();
}

La deuxième méthode est une classe de marcheur:

plugin.php:

class my_walker_class Extends Walker_Nav_Menu {
    function start_el(&$output, $item, $depth, $args) {
        /*
        *  Etc. Etc.
        */
    }
}

header.php:

wp_nav_menu( Array( 'walker' => 'my_walker_class' ) );

Cependant, comme vous le remarquerez, ces deux méthodes nécessitent une modification du fichier standard header.php.

Idéalement, j'aimerais simplement remplacer la fonction wp_nav_menu() si mon plugin est chargé, car cela donnerait à mon plugin le support de la majorité des thèmes sans avoir à éditer les fichiers de thème. Y at-il un bon moyen de le faire? Ou y a-t-il un meilleur moyen d'écrire un plugin de menu que je ne vois pas?

1
stevendesu

Euh ... Il y a beaucoup de filtres sur le système de menus.

Le filtre 'wp_nav_menu' est appelé en sortie de l'appel de la fonction wp_nav_menu (). Donc, si vous avez besoin de modifier la sortie du menu, vous pouvez l'utiliser.

Le filtre 'wp_nav_menu_items' est appelé sur le tableau d'éléments résultant (essentiellement tous les éléments LI).

Si vous devez modifier les arguments passés dans wp_nav_menu, par exemple pour ajouter de manière dynamique votre propre lecteur, vous pouvez utiliser le filtre 'wp_nav_menu_args'.

Il y a beaucoup plus de filtres qui sont plus spécifiques et peuvent probablement être utilisés pour changer les choses de manière plus subtile. Ce sont en quelque sorte les principaux filtres de type club qui changent tout.

2
Otto