web-dev-qa-db-fra.com

Quel est le moyen le plus simple de dupliquer un menu de navigation complet?

Quel est le moyen le plus simple de dupliquer un menu de navigation complet? Je ne me soucie pas si cela implique des commandes SQL ou quoi. J'ai juste de très gros menus que j'aimerais reproduire. Je n'ai pas vu de plugin pour faire ça.

Pour plus de clarté, je souhaite dupliquer le menu afin de pouvoir le modifier et l'utiliser comme autre menu. Je n'essaye pas d'afficher le menu deux fois.

2
cwd

MISE À JOUR: Le moyen le plus "facile" consiste à utiliser mon nouveau plugin: http://wordpress.org/extend/plugins/enhanced-menu-editor/

Ce n'est pas encore approuvé, mais une fois que ce sera fait, je publierai le widget. Cela permet non seulement de copier les menus, mais vous pouvez également synchroniser la structure de menu que vous établissez dans l'éditeur de menu avec la hiérarchie des pages. Vous pouvez donc utiliser la fraîcheur ajax cool par glisser-déposer au lieu de modifier manuellement des centaines de pages.

ANCIENNE REPONSE:

La méthode la plus "simple" consiste à utiliser du code. Vous voudrez utiliser deux fonctions:

wp_create_nav_menu() qui crée le menu lui-même et retourne le menu_id wp_update_nav_menu_item() qui créera un nouvel élément de menu si vous transmettez 0 pour le paramètre id de l'élément de menu.

Vous pouvez ensuite utiliser une classe de programme de déplacement wp_nav_menu pour effectuer une itération sur chacun des éléments existants dans un menu. Ce site Web vous donnera un bon point de départ pour commencer.

http://www.kriesi.at/archives/improve-your-wordpress-navigation-menu-output

Donc, vous appelez d'abord la fonction Créer un menu de navigation.

Ensuite, implémentez le nav walker sur une page donnée. Dans la fonction start_el de votre classe de marcheur, vous aurez accès au paramètre $ item qui vous permettra d’appeler wp_update_nav_menu_item () avec des propriétés identiques à celles du menu existant, mais il suffit de passer 0 au lieu du véritable identifiant de élément du menu.

La seule autre propriété à prendre en compte est le menu-item-parent-id car vous souhaiterez qu'il fasse référence à l'élément de menu que vous venez de créer et non à l'ancien de l'autre menu. Pour cela, vous devez créer un tableau qui garde la trace des anciens identifiants vers les nouveaux.

Si vous souhaitez un exemple concret de cette solution, écrivez-moi à marcuspope.com et nous verrons ce que je peux préparer.

J'espère que cela pourra aider! -Marcus

2
Marcus Pope

Donc, je me débattais avec un problème similaire

  1. Je voulais créer de nombreux menus à afficher en fonction des autorisations ... la plupart des éléments étaient des doublons, etc. Il était donc facile de copier quelque chose qui existait déjà.

  2. J'ai ensuite eu besoin de migrer tous ces menus vers plusieurs blogs qui partagent les mêmes autorisations.

Mais je ne suis qu'un programmeur sans conviction.

C'est donc la solution Kludge mais cela semble fonctionner, aucune programmation n'est requise

WP a une fonction d'exportation - si vous avez un blog propre (et peut-être même si vous ne l'avez pas déjà fait), il semble que tous les éléments de menu soient listés dans la même partie du fichier d'exportation.

Il y a seulement 2 choses (éventuellement) si vous avez affaire à un seul blog qui doit être changé, car les articles et les pages seront de toute façon ignorés en raison de la duplication des slugs

C'est la définition de la catégorie personnalisée du menu. Vous devez changer le slug et le CDATA (où est dit "FA" dans mon exemple)

<wp:term><wp:term_id>3</wp:term_id><wp:term_taxonomy>nav_menu</wp:term_taxonomy><wp:term_slug>FA</wp:term_slug><wp:term_name><![CDATA[FA]]></wp:term_name></wp:term>

Ensuite, vous devez rechercher et remplacer tous les éléments de menu liés à ce slug/catégorie.

<category domain="nav_menu" nicename="FA"><![CDATA[FA]]></category>

Encore une fois chercher le "FA"

Enregistrez le XML avec un nom de fichier propre et agréable.

Ensuite, vous utilisez le plug-in importateur WP pour importer le fichier XML.

YMMV mais WFM et m'a sauvé une tonne de temps

2
AndyBeard