Enfin, j'ai fini d'écrire mon widget et je veux maintenant l'appeler en utilisant la fonction dans les fichiers php des thèmes. Mon widget ressemble à ceci:
function reg_custom_widget () { register_widget ('wp_custom_widget'); } classe wp_custom_widget étend WP_Widget { function wp_custom_widget () {/ * constructeur * /} widget de fonction ($ args, $ instance) {/ * voici le code qui utilise les fonctions 'principales' pour générer le résultat et l'afficher * /} function shortcode_handler ( $ atts) {/ * le même code que dans widget () avec quelques fonctionnalités * /} /* voici des fonctions de base, étroitement liées. ils exécutent la fonctionnalité principale du widget */ fonction core_func_one ($ input) {} fonction core_func_two ($ input) {} fonction core_func_three ($ input) {} fonction core_func_four ($ input) {} function core_func_five ($ input) {} mise à jour de la fonction ($ new_instance, $ old_instance) {/ * mise à jour des paramètres * /} formulaire de fonction ($ instance) {/ * formulaire de configuration du widget * /} }
Je connais déjà les méthodes suivantes, ce widget d'appel et peut être placé dans des fichiers de thèmes:
1. appel via shortcode avec do_shortcode()
wp;
2. appel du widget avec the_widget()
wp;
Ces deux méthodes fonctionnent très bien, mais mon concepteur les a rejetées.
Il veut coder en appelant le widget de cette façon: if(function_exists('custom_widget')) { custom_widget(); }
Comment puis-je réaliser cette option? Peut-être est-il raisonnable de créer une autre fonction dans la classe de widget, de la rendre globale ou quelque chose du genre, le widget sera lancé de l'intérieur? Cela ressemble à du délire, mais je ne comprends pas vraiment comment résoudre ce problème.
Utiliserthe_widget()
est la bonne façon de "coder en dur" un Widget arbitraire dans un fichier de modèle:
<?php the_widget( 'foobar_widget', $instance, $args ); ?>
Puisque the_widget()
renvoie simplement si 'foobar_widget'
n'est pas un widget enregistré, son fonctionnement est équivalent à l'utilisation d'une condition if ( function_exists( $function ) )
.
Vous pourriez regarder dans le noyau pour voir comment the_widget()
vérifie que 'foobar_widget'
est un widget enregistré (if ! is_a( $widget_obj, 'foobar_widget' ) )
); mais vraiment, pourquoi s'embêter? Il suffit d'appeler the_widget()
. C'est pour ça que c'est là.