PHP Desativado: o método não-estático não deve ser chamado de forma estática

Meu debug.log tem a seguinte mensagem que aponta para /wp-includes/shortcodes.php na linha 319, que faz parte do núcleo do WordPress e provavelmente não é onde o erro real está no código.

PHP Deprecated: Non-static method RSSjbClass::RSSjb_funct() should not be called statically in /.../wp-includes/shortcodes.php on line 319 

Olhei para a linha 319 e não me ajuda a encontrar ou resolver o problema. Eu procurei o código e encontrei isso com a Classe e funcionei, mas eu não sei o que é não-estático sendo chamado de forma estática.

 /** * Add shortcode to wordpress */ // add_shortcode('RSSjb', 'RSSjb_funct'); add_shortcode('RSSjb', array('RSSjbClass', 'RSSjb_funct')); /** * Shortcode Class and Function */ class RSSjbClass { function RSSjb_funct($atts) { extract(shortcode_atts(array( // attributes for Google News "gsearch" => '', "topic" => '', "location" => '', "geo" => '', "feed" => '', // required "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)); 

seguido por vários “ifs” e depois

  // call the function to read and display the feed items list return $tle . rssjb_List($feed, $filter, $num, $ltime, $list, $target, $pubdate, $pubtime, $dformat, $tformat, $pubauthor, $excerpt, $charex, $chartle, $sort, $cachefeed); } else { return '
RSS or Atom Feed URL not provided. This shortcode does require the attribute feed or location (if Google News).
Ex: [RSSjb feed = "http://your-rss-or-atom-feed-URL-here"].'; } } }

Como eu modifico isso para caber com o que está em /wp-includes/shortcodes.php linha 319, que é:

  $output = $m[1] . call_user_func( $shortcode_tags[ $tag ], $attr, $content, $tag ) . $m[6]; /** * Filters the output created by a shortcode callback. * * @since 4.7.0 * * @param string $output Shortcode output. * @param string $tag Shortcode name. * @param array|string $attr Shortcode attributes array or empty string. * @param array $m Regular expression match array. */ return apply_filters( 'do_shortcode_tag', $output, $tag, $attr, $m ); } 

Procurei no Manual do PHP e não tem nada sobre shortcodes.

Solutions Collecting From Web of "PHP Desativado: o método não-estático não deve ser chamado de forma estática"

Shortcodes é uma coisa do WordPress, portanto, não está no manual do PHP. O que você quer ver no manual do PHP é a seção sobre retorno de chamada . add_shortcode() aceita um nome curto e um retorno de chamada . Nessa seção do manual do PHP, você pode ver os 3 principais tipos de retorno de chamada:

 // Type 1: Simple callback call_user_func('my_callback_function'); // Type 2: Static class method call call_user_func(array('MyClass', 'myCallbackMethod')); // Type 3: Object method call $obj = new MyClass(); call_user_func(array($obj, 'myCallbackMethod')); 

Sua function de retorno de chamada para seu shortcode é o 2º tipo:

 add_shortcode('RSSjb', array('RSSjbClass', 'RSSjb_funct')); 

Isso é o mesmo que chamar RSSjbClass::RSSjb_funct , que é como você chama um método estático, mas em sua class o método RSSjb_funct() não está definido de forma estática:

 function RSSjb_funct($atts) { 

Portanto, a correção mais rápida é definir esse método como static :

 public static function RSSjb_funct($atts) { 

A outra opção seria adicionar o shortcode dentro da class usando $this , ou para criar uma instância da class e depois usá-la em add_shortcode() como Type 3 acima.