• Привет всем. У меня плагин написанный на заказ для генерации постов и страниц. Долгое время плагин работал безупречно. Но сегодня он начал выдавать ошибку:

    The same name as their class will not be constructors in a future version of PHP; WP_Posts_Generator has a deprecated constructor in .../wp-content/plugins/wp-post-generator/wp-post-generator.php on line 14
    WP_Posts_Generator::$plugin in /home2/appliat1/public_html/intelfixar/wp-content/plugins/wp-posts-generator/wp-posts-generator.php on line 38
    Notice: Undefined property: WP_Posts_Generator::$slug in /home2/appliat1/public_html/intelfixar/wp-content/plugins/wp-posts-generator/wp-posts-generator.php on line 69

    Что это за ошибка и как можно с ней справиться.
    Файл от строчки 14 до 74:

    class WP_Posts_Generator {
        
        static private $instance = NULL;
    
        static public function getInstance() {
            
            if (self::$instance == NULL) {
                self::$instance = new WP_Posts_Generator();
            }
            
            return self::$instance;
        }
    
        function WP_Posts_Generator() {
            
            $this->Init();
            
        }
        
        function Init() {
            
            add_action( 'wp_ajax_wppg_autocomplete', array($this,'Ajax_autocomplete') );
            add_action('admin_init',array($this,'Enqueue'));
            add_action('admin_menu', array($this,'Menu_add'));
            add_filter("plugin_action_links_$this->plugin", array($this,'Action_links') );
            
        }
        
        function Ajax_autocomplete() {
            
            global $wpdb;
            
            $term    = htmlspecialchars($_REQUEST['term']);
            $results = $wpdb->get_results("SELECT * FROM ".$wpdb->prefix."posts WHERE post_title LIKE '$term%' AND post_status IN ('publish','draft') LIMIT 15;");
            
            $json    = array();
            foreach($results as $result) {
                
                $json[] = array('id' => $result->ID, 'value' => $result->post_title);
                
            }
            
            echo json_encode($json);
                    
            wp_die();
        }
        
        function Menu_add() {
            
            add_submenu_page('tools.php', 'Posts generator', 'Posts generator', 'manage_options', 'posts-generator', array($this,'Menu'));
        
        }
        
        function Menu() {
            
            $page = trim(str_replace($this->slug,'',$_REQUEST['page']));
            $file = dirname(__FILE__).'/includes/pages/page-'.$page.'.php';
            
            if (file_exists($file)) { @include($file); }
            
        }
Просмотр 1 ответа (всего 1)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP

    Эта ошибка связана с переходом на новую версию PHP (если вы её не меняли — это мог сделать хостинг-провайдер). В PHP 7 конструкторы классов, объявленные в стиле PHP 4 (методы с тем же именем, что и сам класс), больше не поддерживаются.

    Для исправления нужно заменить function WP_Posts_Generator() на function __construct().

    Notice: Undefined property: WP_Posts_Generator::$slug

    Это просто уведомление, что переменная $this->slug нигде не определена. Сообщения типа Notice на большинстве сайтов игнорируются, поскольку имеют смысл только для разработчиков плагинов и тем.

    Можно либо убрать лишний вызов str_replace(), либо переключить PHP в менее строгий режим сообщения об ошибках.

Просмотр 1 ответа (всего 1)
  • Тема «Плагин стал выдавать ошибку.» закрыта для новых ответов.