Ich verwende Namespaces.
Ich versuche, ein WordPress-Widget zu erstellen (http://codex.wordpress.org/Widgets\_API)
Mit Namespaces gibt es einen Fehler, weil die Argumente nicht übergeben werden können (und ohne Namespaces funktioniert es natürlich wie gewohnt)
namespace a\b\c;
class whatever extends \WP_Widget {
function whatever() {
parent::WP_Widget('name1', 'name2');
}
// .. other functions left out
}
add_action('widgets_init',
create_function('', 'return register_widget("a\b\c\whatever");'));
ähm... was ist die korrekte Syntax für "parent::WP_Widget" unter Verwendung von Namespaces?
(die KOMPLETTE Fehlermeldung lautet:
Warning: Missing argument 2 for WP_Widget::__construct(), called in
C:\xampp\htdocs\wp2\wp-includes\widgets.php on line 324 and defined in
C:\xampp\htdocs\wp2\wp-includes\widgets.php on line 93
)
Und der Debugger zeigt an, dass nichts übergeben wurde:
Variables in local scope (#14)
$control_options = Undefined
$id_base = boolean false
$name = Undefined
$widget_options = Undefined
(nur der $Name ist erforderlich)
1 Stimmen
Stellen Sie die genaue Fehlermeldung hier ein. Wenn man sich den Code anschaut, sieht es nicht so aus, als ob etwas falsch wäre. Warum verwenden Sie außerdem parent und nicht einfach $this->WP_Widget? Und schließlich, ist WP_Widget ein Konstruktor der WP_Widget-Klasse? Warum hat die Funktion den gleichen Namen wie die Klasse? Wenn es ein Konstruktor ist, dann besser __construct() verwenden.
0 Stimmen
Nein: es gibt sie, die Widget-Fabrik ist Teil von WordPress seit 2.8: wenn Sie in Eclipse auf WP_Widget klicken, erhalten Sie die Definition, in der sie sich befindet ... core.svn.wordpress.org/trunk/wp-includes/widgets es SOLLTE überschrieben werden und nicht durch _construct, siehe Quellcode (kann nicht helfen, habe es nicht geschrieben)
0 Stimmen
@dmitri: sowohl parent::WP_Widget als auch $this->WP_Widget liefern den gleichen Fehler, beide Varianten werden im Web verwendet. WP_Widget ist die Funktion, die nach dem CODEX überschrieben werden sollte.