web-dev-qa-db-fra.com

Appel du widget via une fonction dans des fichiers de thèmes (code dur)

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.

1
drake2300

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à.

2
Chip Bennett