Je développe un thème enfant en utilisant Wordpress 3.4.2 et la version de développement du cadre d'options par David Price . Ceci est mon premier thème et je suis relativement nouveau dans ce domaine, j'ai donc jeté un œil au codex Wordpress et vérifié l'enregistrement des éléments dans l'API.
Sans altérer aucun fichier externe en dehors de mon thème, je me demandais s'il y avait un moyen de réorganiser l'emplacement de la page Options de thème dans la hiérarchie du menu Apparence - donc lorsque mon thème est activé, la position n'est pas comme la première image mais comme la seconde.
Je sais que vous pouvez créer un menu (tel que l' onglet Apparence , Plugins , Utilisateurs, etc.) ou un sous-menu ( Thèmes , Widgets , Menus, etc.), mais comment pourrais-je procéder pour définir un sous-menu, disons, deuxième du haut?
D'après ce que je comprends, quelque part, une commande est appelée et toute autre page supplémentaire du functions.php
fichier est placée après celles-ci?
Dans mon fichier functions.php:
// Add our "Theme Options" page to the Wordpress API admin menu.
if ( !function_exists( 'optionsframework_init' ) ) {
define( 'OPTIONS_FRAMEWORK_DIRECTORY', get_template_directory_uri() . '/inc/' );
require_once dirname( __FILE__ ) . '/inc/options-framework.php';
}
Merci.
la source
Warning: Invalid argument supplied for foreach() in /wp-content/themes/mythemename/functions.php on line 1444
Ligne 1444:foreach ($submenu[$menus] as $index => $value){
etWarning: ksort() expects parameter 1 to be array, null given in /wp-content/themes/mythemename/functions.php on line 1468
ligne 1468:ksort($submenu[$menus]);
Réponses:
Voici un exemple;
Tout d'abord pour comprendre l'ordre des éléments du sous-menu en fonction de sa clé de tableau, vous pouvez faire un
var_dump
sur la variable globale $ submenu qui produira ce qui suit;(J'utilise le menu et le sous-menu Messages comme exemple)
Nous pouvons voir que mon élément de sous-menu est ajouté dans le tableau avec une clé de 17 après les éléments par défaut.
Si, par exemple, je veux ajouter mon élément de sous-menu, directement après l' élément de sous-menu Tous les messages , je dois le faire en définissant ma clé de tableau sur 6, 7, 8 ou 9 (n'importe quoi après 5 et avant 10 respectivement.
Voici comment vous le faites ...
Résultat,
... essayez-le et dites-nous comment vous allez!
Mise à jour 1:
Ajoutez ceci à votre fichier functions.php;
Ma mise à jour comprend un moyen un peu plus simple de gérer le réglage de la position de votre menu, il vous suffit de préciser le nom de votre page de sous-menu et la position que vous souhaitez dans le menu.
Cependant, si vous sélectionnez une page de sous-menuPour contourner cela, l'exemple de Kaiser fournit une vérification de base pour cela.$location
égale à celle d'une clé existante, elle remplacera cette clé par la vôtre, ainsi l'élément de menu disparaîtra avec votre élément de menu à sa place. Augmentez ou décrémentez le nombre pour commander correctement votre menu si tel est le cas. De même, si quelqu'un installe un plugin qui affecte la même zone de menu et qui a le même$location
que votre élément de sous-menu, le même problème se produira.Mise à jour 2:
J'ai ajouté un bloc de code supplémentaire qui vérifie toutes les clés existantes dans le tableau par rapport à nos souhaits
$location
et si une correspondance est trouvée, nous augmenterons notre$location
valeur1
afin d'éviter que les éléments de menu ne se remplacent. Ceci est le code responsable de cela,Mise à jour 3: (script révisé pour permettre le tri de plusieurs éléments de sous-menu)
Dans l'exemple ci-dessus, vous pouvez cibler plusieurs sous-menus et plusieurs éléments par sous-menu en définissant les paramètres en conséquence dans la
$target_menu
variable qui contient un tableau multidimensionnel de valeurs.Cette révision empêchera les éléments de sous-menu de se remplacer les uns les autres s'ils ont la même clé (position), car elle passera en revue jusqu'à ce qu'elle trouve une clé (position) disponible qui n'existe pas.
la source
Warning: Invalid argument supplied for foreach() in /wp-content/themes/mythemename/functions.php on line 1444
Ligne 1444:foreach ($submenu[$menus] as $index => $value){
etWarning: ksort() expects parameter 1 to be array, null given in /wp-content/themes/mythemename/functions.php on line 1468
ligne 1468:ksort($submenu[$menus]);
Le menu admin (et ses problèmes)
Comme le menu d'administration manque sérieusement de crochets et d'une API publique (qui permet de déplacer les éléments), vous devez utiliser certaines solutions de contournement. La réponse suivante vous montre ce qui vous attend dans le futur et comment vous pouvez contourner tant que nous avons l'état de base actuel.
Je dois d'abord noter que scribu travaille sur un correctif du menu d'administration qui devrait faciliter la manipulation. La structure actuelle est assez foirée et j'ai écrit un article à ce sujet qui sera bientôt dépassé. Attendez-vous à ce que WP 3.6 change complètement les choses.
Ensuite, il y a aussi le point, que vous ne devriez plus utiliser les pages Options pour les thèmes. Il y a - de nos jours - le »Theme Customizer« pour ça.
Le plugin
J'ai écrit un plugin qui teste cela avec la page "Options de thème" par défaut pour la page d'options TwentyEleven / Ten. Comme vous pouvez le voir, il n'y a pas de véritable API qui autorise n'importe quelle position. Nous devons donc intercepter le global.
En bref: suivez simplement les commentaires et jetez un œil aux avis de l'administrateur, que j'ai ajoutés pour vous donner une sortie de débogage.
Bonne chance et amusez-vous bien.
la source
Filtres personnalisés
Il existe une autre possibilité d'y parvenir. Ne me demandez pas pourquoi je n'y ai pas pensé plus tôt. Quoi qu'il en soit, il existe un filtre dédié à un ordre de menu personnalisé. Réglez-le simplement sur
true
pour autoriser une commande personnalisée. Ensuite, vous avez obtenu un deuxième crochet pour commander les éléments du menu principal. Là-bas, nous interceptons simplementglobal $submenu
et basculons autour de nos éléments de sous-menu.Cet exemple déplace l' élément Menus au - dessus de l' élément Widgets pour montrer sa fonctionnalité. Vous pouvez l'adapter à ce que vous aimez.
la source
function wpse70916_custom_submenu_order( $menu )
pour dire, réorganiser non seulement le menu , mais aussi le thème Options , widgets , éditeur, etc., ce qui le rend assez flexible et aussi pour que les éléments ne se remplacent pas? Je vous remercie.