Je voudrais ajouter par programme des widgets à mes deux barres latérales que j'ai. Je n'ai pas trouvé de moyen officiel de le faire?
J'ai commencé à chercher dans la base de données. J'ai constaté que c'est l'option 'sidebars_widgets' qui place les widgets dans les barres latérales. Lorsque vous examinez les options, un nom est ajouté à la fin du nom du widget, par exemple: nom_du_green-6. D'où vient ce nombre?
Une idée pour savoir comment régler ça?
Réponses:
Quand j'ai commencé cette réponse, cela ne devrait être qu'une petite note. Eh bien, j'ai échoué. Pardon! Reste avec moi, il y a un goody caché au fond…
Comment les widgets WordPress sont stockés
La liste des widgets est stockée dans une option nommée
'sidebars_widgets'
. Avar_export()
peut donner quelque chose comme ce qui suit:Ignorer
'wp_inactive_widgets'
et'array_version'
. Nous n'avons pas à nous soucier de ceux-ci.Les autres clés sont l'identifiant des barres latérales enregistrées. Dans ce cas, les barres latérales peuvent avoir été enregistrées avec ce code:
Par défaut, les barres latérales sont vides après l'enregistrement. Bien sûr.
Pour chaque classe de widget enregistrée, une option distincte est créée, contenant toutes les options nécessaires. L'option est préfixée par la chaîne
widget_
. Pour obtenir les options pour tous les widgets RSS actifs, nous devons examiner…Sortie possible:
Notez le nombre 2 . Les arguments de plusieurs instances sont tous stockés dans cette seule option triée par nombre.
Pour voir quelles classes de widgets sont déjà connues de WordPress, allez à
wp-admin/options.php
et faites défiler l'écran jusqu'à ce que vous voyiez quelque chose comme ceci:Oui, données sérialisées. Non, vous ne pouvez pas les lire ici. Ne t'inquiète pas, tu n'es pas obligé.
Un widget de démonstration
Pour mieux illustrer le fonctionnement interne, j'ai écrit un widget de démonstration très simple:
Notez le constructeur:
't5_demo_widget'
est$id_base
l'identifiant de ce widget. Comme vous pouvez le voir sur la capture d'écran, ses arguments sont stockés dans l'optionwidget_t5_demo_widget
. Tous vos widgets personnalisés seront traités comme ceci. Vous n'avez pas à deviner le nom. Et puisque vous avez écrit (probablement) vos widgets, vous connaissez tous les arguments des$instance
paramètres de votre classe .Bases de thème
Vous devez d’abord enregistrer des barres latérales et le widget personnalisé. L'action appropriée pour cela est facile à retenir:
'widgets_init'
. Mettez tout dans un conteneur - une classe ou une fonction. Pour plus de simplicité, je vais utiliser une fonction nomméet5_default_widget_demo()
.Tout le code suivant va dans le
functions.php
. La classeT5_Demo_Widget
devrait déjà être chargée. Je viens de le mettre dans le même fichier…Jusqu'ici, si simple. Notre thème est maintenant prêt pour le widget, le widget de démonstration est connu. Maintenant l'amusement.
Vous ne voulez vraiment pas détruire les paramètres utilisateur. S'il y a déjà du contenu dans les barres latérales, votre code ne devrait pas l'exécuter. C'est pourquoi nous nous arrêtons dans ce cas.
OK, supposons que les barres latérales sont vides… nous avons besoin d'un compteur:
Les widgets sont numérotés . Ces numéros sont des identifiants secondaires pour WordPress.
Voyons le tableau pour le changer:
Nous avons aussi besoin d'un compteur (plus à ce sujet plus tard):
Et voici comment nous utilisons le compteur, les noms de la barre latérale et les arguments du widget (enfin, nous n’avons qu’un argument:)
text
.Notez comment l'identificateur de widget est créé: le
id_base
, un moins-
et le compteur. Le contenu du widget est stocké dans une autre variable$demo_widget_content
. Voici le compteur la clé et les arguments du widget sont stockés dans un tableau.Nous incrémentons le compteur de un lorsque nous avons terminé pour éviter les collisions.
C'était facile. Maintenant un widget RSS. Plus de champs, plus de plaisir!
Voici quelque chose de nouveau:
update_option()
cela stockera l'argument du widget RSS dans une option séparée. WordPress les trouvera automatiquement plus tard.Nous n'avons pas enregistré les arguments du widget de démonstration car nous avons ajouté une deuxième instance à notre deuxième barre latérale maintenant…
… Et conservez tous les arguments pour le tout
t5_demo_widget
en un. Pas besoin de mettre à jour la même option deux fois.Eh bien, assez de widgets pour aujourd'hui, sauvons le
sidebars_widgets
aussi:Maintenant, WordPress saura qu'il existe des widgets enregistrés et où sont stockés les arguments de chaque widget. Un
var_export()
des sidebar_widgets ressemblera à ceci:Le code complet à nouveau:
Si vous allez
wp-admin/widgets.php
maintenant, vous verrez trois widgets prédéfinis:Et c'est tout. Utilisation …
… Pour imprimer les widgets.
Il y a un petit problème: vous devez charger le front-end deux fois pour l'enregistrement initial. Si quelqu'un peut aider ici, je vous en serai très reconnaissant.
la source
widget_t5_demo_widget
référence iciupdate_option( 'widget_t5_demo_widget', $demo_widget_content );
:?Merci de partager votre solution. J'ai utilisé ce qui a été décrit dans cette question pour créer un morceau de code qui peut être utilisé pour initialiser très facilement des barres latérales. C'est très flexible, vous pouvez créer autant de widgets que vous voulez sans avoir à modifier le code. Utilisez simplement les crochets de filtre et passez des arguments dans un tableau. Voici le code commenté:
Il s'agit d'une fonction d'assistance qui vérifie si la barre latérale contient déjà du contenu:
Nous devons maintenant créer une fonction liée à l’action 'sidebar_init'.
Et maintenant l'initialisation du widget:
La dernière action consiste à créer les widgets dans chaque barre latérale:
Cette fonction permet de savoir combien d'instances d'un widget spécifique ont déjà été définies:
La dernière chose à faire est d’attribuer des valeurs. Utilisez les fonctions de filtre suivantes:
Et:
Idéalement, vous appelez initialize_sidebars dans une fonction de configuration appelée lors de l'activation d'un plugin ou d'un thème, comme suit: Activation du thème:
Activation du plugin:
Pour résumer l’utilisation de ce conglomérat de fonctions:
créez une fonction qui initialise les barres latérales qui est connectée au filtre 'alter_initialization_sidebars'.
créez une fonction pour chaque barre latérale que vous venez d'ajouter, qui est liée au filtre 'alter_initialization_widgets_ $ sidebarname'. Remplacez $ sidebarname par le nom de chaque barre latérale créée à l'étape 1.
Vous pouvez également simplement copier ce code non commenté dans votre fichier de fonctions et commencer à créer vos fonctions de filtrage immédiatement: Code sur pastie (sans fonctions de filtrage d'initialisation)
la source
Tout d’abord, merci à @toscho pour la réponse détaillée.
Ceci est un exemple simple pour ceux qui recherchent une solution simple et des options de widget par défaut:
Remarque 1: Vous pouvez accéder
sidebar-id
au menu des widgets et inspecter la barre latérale souhaitée. Le premier<div id="widgets-holder-wrap">
est<div>
enfant asidebar-id
.Remarque 2: Vous pouvez accéder
widget_name
au menu des widgets et inspecter le widget souhaité. Vous verrez quelque chose comme<div id="widget-6_widget_name-__i__" class="widget ui-draggable">
.Je souhaite que cela aide.
la source
Voici comment vous le faites:
(ATTENTION, ceci pourrait ENLEVER tous les widgets précédents si vous ne remettiez pas les widgets d'origine dans le
widgets
tableau.)Le numéro peut être utilisé si vous souhaitez ajouter ultérieurement des options au widget avec quelque chose comme:
la source
$widgets = get_option( 'sidebars_widgets' );