J'utilise des espaces de noms.
J'essaie de créer un widget WordPress (http://codex.wordpress.org/widgets_api)<
p>withs espaces de noms Ce qui suit donne une erreur car les arguments ne peuvent pas être passé (et sans espaces de noms cela fonctionne évidemment comme d'habitude) p>uhm ... Quelle est la syntaxe correcte pour "parent :: wp_widget" en utilisant des espaces de noms? p>
(le message d'erreur complet est: em> p> ) p> Et le débogueur ne montre que rien n'a été passé: em> p> (seul le nom de $ est requis) em> p> p> p> P> P> P> P> P> P> P> P> P> P> P> P> P >
6 Réponses :
Vous voulez appeler une méthode parent? Utilisez simplement Si vous souhaitez appeler le constructeur parent, utilisez parent :: MethodName (); code> p>
parent :: __ construction () code> - si votre constructeur est nommé comme la classe, renommez-le à
__ construire code> qui est le Nom préféré pour un constructeur pendant des années ... P>
Merci, je dois manquer quelque chose que je suis déjà utilisé parent :: wp_widget () déjà mais je suis probablement sur quelque chose?
Il me semble que votre problème n'est pas dans les espaces de noms, le code suivant fonctionne comme un charme: Si vous obtenez un message d'erreur, il peut être utile d'indiquer ce qu'il dit . p> p>
@ Berry-Langerak: Bon à savoir que ce n'est pas ma syntaxe. Alors qu'est-ce que c'est? La classe des parents est par défaut: core.svn.wordpress.org/trunk/wp-includes/widgets
Il semble que WordPress a une méthode de proxy pour les anciens constructeurs de types PHP 4 (YUGH). Vous voudrez peut-être envisager d'utiliser le parent :: __ construire () à la place. En outre, lorsque vous appelez __Construction (), assurez-vous de l'appeler avec au moins i> deux paramètres.
Pourquoi marqueriez-vous une réponse aussi correcte lorsque cela n'est même pas une réponse directe à votre question, si les commentaires conduisent à la résolution de l'erreur, veuillez mettre à jour votre message.
@ROBERTPITTT Le code dans la réponse est le code correct: J'avais besoin de la fonction _Construction, puis de la société parent :: _ Construisez comme dans la réponse par opposition au code de la documentation ici: codex.wardpress.org/widgets_api
regarder la documentation Situé ici semble que seul le nom du nom est requis mais la façon dont PHP fonctionne que vous devez également définir les pré-variables.
Vous avez deux façons de créer la classe: p>
wp_widget __construction ([string $ id_base = false], string $ nom, [array $ widget_options = tableau ()], [array $ contrôler_options = tableau ()]) CODE> LI>
ul> li>
- b:
-
wp_widget wp_widget ($ id_base = false], $ nom de famille, [$ widget_options = array ()], [$ contrôlée = tableau ()]) code> li>
ul> li>
ul> Par préférence Vous devez toujours utiliser la méthode __ construire code> pour initialiser votre objet, je vous réécrireais le code comme: p> xxx pré> Le wp_widget :: wp_widget (..) code> La méthode est uniquement pour PHP4 uniquement et ne doit pas être utilisée dans PHP 5 ou plus. P> Il semble que votre utilisation de PHP 5.3 Votre utilisation d'espaces de nom afin de pouvoir procéder comme suit: p> xxx pré> p>
La fonction __Construction a fait le tour, la réponse n'était qu'une minute plus tard que Berry, donc j'ai marqué Berry comme réponse.
L'ajout Regiser_Widget ne fonctionne pas avec le \ A \ B \ C \, car il se trouve dans la portée de l'espace de noms. Si je supprimais la partie d'espace de noms, il donne "AVERTISSEMENT: type de décalage illégal en C: \ xampp \ htdocs \ wp2 \ wp-inclus \ widgets.php à la ligne 324" alors ... j'utilise le code dans la question pour l'instant et Vérifiez plus tard sur la façon de faire cela. Merci.
Il suffit d'encapsuler le A \ b \ c \ Quelque code> dans une chaîne et supprimez le nouveau mot-clé, il peut s'agir de la manière dont WordPress utilise la valeur.
oui cela fonctionne: add_action ('widgets_init', fonction () {retour register_widget ('a \ b \ c \ thest');}); Merci
Il y a un problème de passage faux pour $ id_base (à partir de WordPress 3.3.1). Dans WP-Admin / Inclus / Widgets.php, $ ID_Base est utilisé dans le cadre d'une expression régulière (ligne 118) et les backslashes de l'espace de noms entraîneront des problèmes. Je suggère de changer vos exemples pour toujours donner un $ ID_BASE Explicitl et notez qu'il ne doit pas contenir de méta-caractères d'expression régulière. En particulier, il ne doit pas contenir de points, ce qui peut ne pas causer de problèmes en tant que méta-caractères, entraînera des problèmes lors de la convertie en soulignement dans le traitement de format.
Je n'utilise pas WordPress, mais en regardant cela, cela ressemble à celui d'une très mauvaise conception de WordPress. Ils semblent utiliser une fonction statique wp_widget qui sert de fabrique mais partage le même nom que le nom de la classe. Ils auraient dû l'appeler l'usine em> si c'est vraiment une usine. P>
Aussi, de ce que vous avez posté dans votre commentaire, vous devez peut-être créer une fonction statique wp_widget () dans votre sous-classe, puis ne pas appeler le parent. Si le script veut vraiment que vous remplacez le wp_widget, c'est ce que vous devriez faire. P>
Mais encore une fois, je n'ai jamais utilisé WordPress, il est difficile de dire sans regarder le script. P>
Vous devez publier le code d'erreur exact ici. P>
J'ai posté le code d'erreur exact complet, je peux ajouter la trace de la pile?
Ceci a fonctionné bien pour moi:
register_widget Accepte Nom de la classe et instance. Si vous devez utiliser un nom de classe, utilisez \ a \ b \ c \ Quelque chose :: Classe code> à la place.
Vous pouvez également utiliser la méthode Native https://www.php.net/manual/fr /function.get-class.php P>
GET_CLASS CODE> GET_CLASS >, qui retournera le nom de l'instanciation de classe comme une chaîne. p>
register_widget (get_class (nouveau \ uci \ wordpress \ widget \ pied de page ())); code> p>
Publier le message d'erreur exact ici. De regarder le code, il ne semble pas que quelque chose ne va pas. Aussi, pourquoi utilisez-vous le parent et pas seulement $ ceci-> wp_widget? Et enfin, WP_Widget est-ce un constructeur de la classe wp_widget? Pourquoi la fonction a-t-elle le même nom que la classe? Si c'est un constructeur, alors mieux utiliser __Construction ()
Non: il y a, l'usine de widget fait partie de WordPress depuis 2.8: Si vous cliquez sur Eclipse sur WP_Widget, vous obtenez la définition de ... core.svn.wordpress.org/trunk/wp-includes/widgets Il doit être écrasé et non par _Construction, voir code source (je ne peux pas l'aider à pas l'écrire)
@dmitri: Les deux parents :: wp_widget et $ this-> wp_widget livrent la même erreur, les deux variantes sont utilisées autour du Web. Wp_widget est la fonction qui devrait être écrasée en fonction du Codex.