Pokud používáte ve WordPressu debug mód (v souboru wp-config.php máte WP_DEBUG na hodnotě true), zřejmě jste si všimli následující chybové hlášky :
<b>Notice</b>: The called constructor method for WP_Widget is <strong>deprecated</strong> since version 4.3.0! Use <pre>__construct()</pre> instead. in <b>/data/web/virtuals/83452/virtual/www/domains/papik-wordpress.cz/wp-includes/functions.php</b> on line <b>3457</b><br />
V kostruktoru vašeho widgetu je třeba použít klíčové slovo __construct místo metody kopírující název této nebo rodičovské třídy. Je to z toho důvodu, že od nejnovější verze PHP 7.0 je tato verze konstruktoru považována za zastaralou. (http://php.net/manual/en/language.oop5.decon.php)
Jak vypadá tedy špatně a správně?
Špatně:
class Some_Widget extends WP_Widget
{
public function Some_Widget()
{
parent::WP_Widget(‚Some Widget‘, __(‚Some Widget name‘,’textdomain‘), array(‚classname‘ => ‚Some_Widget‘, ‚description‘ => __(‚This is my awesome widget‘,’textdomain‘) ));
}
…
}
Správný a doporučený postup:
class Some_Widget extends WP_Widget
{
public function __construct()
{
parent::__construct(‚Some Widget‘, __(‚Some Widget name‘,’textdomain‘), array(‚classname‘ => ‚Some_Widget‘, ‚description‘ => __(‚This is my awesome widget‘,’textdomain‘) ));
}
…
}
Všimněte si, že jak u vlastní třídy, tak i u rodičovské je vždy použit konstruktor s názvem __construct. Je to navíc i přehlednější :).
Pokud chcete nadále využívat debug mód wordpressu, máte velké množství pluginů na úpravu, ale zároveň z libovolného důvodu jej nechcete měnit, můžete místo toho vložit následující kód do souboru functions.php:
add_filter('deprecated_constructor_trigger_error', '__return_false');
Podotýkám, že se ale jedná pouze o dočasné řešení(!)