PHP Deprecated: Il metodo non statico non dovrebbe essere chiamato staticamente
Il mio debug.log contiene il seguente messaggio che punta a /wp-includes/shortcodes.php alla riga 319, che fa parte del core di WordPress e probabilmente non è dove si trova il vero errore nel codice.
PHP Deprecated: Non-static method RSSjbClass::RSSjb_funct() should not be called statically in /.../wp-includes/shortcodes.php on line 319
Ho esaminato la riga 319 ma non mi aiuta a trovare o risolvere il problema. Ho cercato nel codice e ho trovato questo con la Classe e la funzione ma non so quale metodo non statico viene chiamato staticamente.
/**
* Aggiunge shortcode a wordpress
*/
// add_shortcode('RSSjb', 'RSSjb_funct');
add_shortcode('RSSjb', array('RSSjbClass', 'RSSjb_funct'));
/**
* Classe e Funzione Shortcode
*/
class RSSjbClass {
function RSSjb_funct($atts) {
extract(shortcode_atts(array(
// attributi per Google News
"gsearch" => '',
"topic" => '',
"location" => '',
"geo" => '',
"feed" => '', // richiesto
"filter" => '',
"num" => '5',
"ltime" => '',
"list" => 'ul',
"target" => '_blank',
"pubdate" => 'false',
"pubtime" => 'false',
"dformat" => get_option('date_format'),
"tformat" => get_option('time_format'),
"pubauthor" => 'true',
"excerpt" => 'false',
"charex" => '',
"chartle" => '',
"title" => '',
"link" => 'false',
"sort" => 'false',
"cachefeed" => '3600'
), $atts));
seguito da diversi "if" e poi
// chiama la funzione per leggere e visualizzare la lista degli elementi del feed
return $tle . rssjb_List($feed, $filter, $num, $ltime, $list, $target, $pubdate, $pubtime, $dformat, $tformat, $pubauthor, $excerpt, $charex, $chartle, $sort, $cachefeed);
} else {
return '<br>URL del Feed RSS o Atom non fornito. Questo shortcode richiede l\'attributo feed o location (per Google News).<br /> Es: <code>[RSSjb feed = "http://url-del-tuo-feed-rss-o-atom-qui"]</code>.';
}
}
}
Come posso modificarlo per adattarlo a quello che c'è in /wp-includes/shortcodes.php riga 319, che è:
$output = $m[1] . call_user_func( $shortcode_tags[ $tag ], $attr, $content, $tag ) . $m[6];
/**
* Filtra l'output creato da una callback dello shortcode.
*
* @since 4.7.0
*
* @param string $output Output dello shortcode.
* @param string $tag Nome dello shortcode.
* @param array|string $attr Array degli attributi dello shortcode o stringa vuota.
* @param array $m Array di corrispondenza espressione regolare.
*/
return apply_filters( 'do_shortcode_tag', $output, $tag, $attr, $m );
}
Ho cercato nel Manuale PHP ma non contiene nulla sugli shortcode.
Gli shortcode sono una funzionalità di WordPress, motivo per cui non sono presenti nel manuale PHP. Ciò che potresti voler consultare nel manuale PHP è la sezione sulle callback. add_shortcode()
accetta un nome di shortcode e una callback. In quella sezione del manuale PHP puoi vedere i 3 tipi principali di callback:
// Tipo 1: Callback semplice
call_user_func('my_callback_function');
// Tipo 2: Chiamata a metodo statico di una classe
call_user_func(array('MyClass', 'myCallbackMethod'));
// Tipo 3: Chiamata a metodo di un oggetto
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));
La tua funzione di callback per il tuo shortcode è del 2° tipo:
add_shortcode('RSSjb', array('RSSjbClass', 'RSSjb_funct'));
Questo equivale a chiamare RSSjbClass::RSSjb_funct
, che è il modo per chiamare un metodo statico, ma nella tua classe il metodo RSSjb_funct()
non è definito come statico:
function RSSjb_funct($atts) {
Quindi la soluzione più rapida è definire quel metodo come static
:
public static function RSSjb_funct($atts) {
L'altra opzione sarebbe aggiungere lo shortcode all'interno della classe utilizzando $this
, oppure creare un'istanza della classe e poi usarla in add_shortcode()
come nel Tipo 3 sopra.

Grazie per la spiegazione utile. Aggiungere public static ha funzionato. Vorrei votare positivamente la tua risposta ma non ho ancora abbastanza reputazione per farlo. Spero che qualcun altro la voti positivamente.
