2016-08-14 2 views
1

Я хочу оживить старую тему WordPress. У этой темы есть некоторые устаревшие функции, поэтому я пытаюсь их разрешить.Конструктор WordPress устарел

Примечание: Вызываемый метод конструктора для WP_Widget в Custom_Recent_Posts является устаревшим, начиная с версии 4.3.0! Вместо этого используйте __construct().

Это говорит мне, что метод конструктор для WP_Widget является устаревшим, так что должна быть эта линия:

$this->WP_Widget('Custom_Recent_Posts', 'Custom Recent Posts', $widget_ops); 

Но эта линия кажется хорошо? Я не могу найти, что с этим не так.

Полный сценарий таков:

class Custom_Recent_Posts extends WP_Widget { 
    function Custom_Recent_Posts() { 
     $widget_ops = array('classname' => 'Custom_Recent_Posts', 'description' => 'The recent posts with thumbnails'); 
     $this->WP_Widget('Custom_Recent_Posts', 'Custom Recent Posts', $widget_ops); 
    } 

    function widget($args, $instance) { 
     extract($args, EXTR_SKIP); 

     echo $before_widget; 
     $items = empty($instance['items']) ? ' ' : apply_filters('widget_title', $instance['items']); 

     if(!is_numeric($items)) 
     { 
      $items = 3; 
     } 

     if(!empty($items)) 
     { 
      pp_posts('recent', $items, TRUE); 
     } 

     echo $after_widget; 
    } 

    function update($new_instance, $old_instance) { 
     $instance = $old_instance; 
     $instance['items'] = strip_tags($new_instance['items']); 

     return $instance; 
    } 

    function form($instance) { 
     $instance = wp_parse_args((array) $instance, array('items' => '')); 
     $items = strip_tags($instance['items']); 

?> 
      <p><label for="<?php echo $this->get_field_id('items'); ?>">Items (default 3): <input class="widefat" id="<?php echo $this->get_field_id('items'); ?>" name="<?php echo $this->get_field_name('items'); ?>" type="text" value="<?php echo esc_attr($items); ?>" /></label></p> 
<?php 
    } 
} 

register_widget('Custom_Recent_Posts'); 

Любая помощь будет большим.


Так что теперь у меня есть это:

class Custom_Recent_Posts extends WP_Widget { 
    public function __construct() { 
     $widget_ops = array('classname' => 'Custom_Recent_Posts', 'description' => 'The recent posts with thumbnails'); 
     $this->WP_Widget('Custom_Recent_Posts', 'Custom Recent Posts', $widget_ops); 
    } 

    function widget($args, $instance) { 
     extract($args, EXTR_SKIP); 

     echo $before_widget; 
     $items = empty($instance['items']) ? ' ' : apply_filters('widget_title', $instance['items']); 

     if(!is_numeric($items)) 
     { 
      $items = 3; 
     } 

     if(!empty($items)) 
     { 
      pp_posts('recent', $items, TRUE); 
     } 

     echo $after_widget; 
    } 

    function update($new_instance, $old_instance) { 
     $instance = $old_instance; 
     $instance['items'] = strip_tags($new_instance['items']); 

     return $instance; 
    } 

    function form($instance) { 
     $instance = wp_parse_args((array) $instance, array('items' => '')); 
     $items = strip_tags($instance['items']); 

?> 
      <p><label for="<?php echo $this->get_field_id('items'); ?>">Items (default 3): <input class="widefat" id="<?php echo $this->get_field_id('items'); ?>" name="<?php echo $this->get_field_name('items'); ?>" type="text" value="<?php echo esc_attr($items); ?>" /></label></p> 
<?php 
    } 
} 

register_widget('Custom_Recent_Posts'); 
+0

Именование конструктора так же, как класс __deprecated__. Вы пытались найти текст ошибки? –

+0

@u_mulder Так что давая конструктору другое имя, оно решит его? Что вы имеете в виду с текстом ошибки? –

ответ

1

Это должно измениться на

function Custom_Recent_Posts() { 
    $widget_ops = array('classname' => 'Custom_Recent_Posts', 'description' => 'The recent posts with thumbnails'); 
    $this->WP_Widget('Custom_Recent_Posts', 'Custom Recent Posts', $widget_ops); 
} 

это

public function __construct() { 
    $widget_ops = array('classname' => 'Custom_Recent_Posts', 'description' => 'The recent posts with thumbnails'); 
    $this->WP_Widget('Custom_Recent_Posts', 'Custom Recent Posts', $widget_ops); 
} 

Читать эти

  1. [closed] constructor method for WP_Widget is deprecated since 4.3.0
  2. The called constructor method for WP_Widget is deprecated since version 4.3.0
+0

Я все еще получаю ту же ошибку, я делаю что-то неправильно? Я обновил свой код в вопросе. –

+0

@ J.Doe добавить это 'add_filter ('deprecated_constructor_trigger_error', '__return_false');' Проверить 2-ую ссылку –

+0

Так что ошибка не исчезнет, ​​даже если я ее исправлю? –

0

В этом коде:

class Custom_Recent_Posts extends WP_Widget { 
    function Custom_Recent_Posts() { 
     $widget_ops = array('classname' => 'Custom_Recent_Posts', 'description' => 'The recent posts with thumbnails'); 
     $this->WP_Widget('Custom_Recent_Posts', 'Custom Recent Posts', $widget_ops); 
    } 

Класс назван Custom_Recent_Posts, и поэтому его конструктор. Это конструктор стиля PHP 4.x, начиная с того дня, когда PHP так отчаянно хотел быть похожим на Java.

Когда PHP 5.x пришел, PHP понял, что ему не нужно действовать, как Java. Это был его собственный язык и популярный. Таким образом, он ввел метод __construct, который похож на другие методы PHP magic. Но он сохранил конструкторы стиля PHP 4.x, поэтому он не нарушил устаревший код.

В версии 4.3 WordPress они решили использовать новый, более похожий на PHP синтаксис __construct вместо подхода wannabe-Java. Вот почему вы видите ошибку. Чтобы это исправить, необходимо изменить две вещи: конструктор

  1. вашего класса должен быть назван __construct
  2. Когда он вызывает конструктор WP_Widget, он должен вызвать его __construct.

Первый простой. Просто переименуйте функцию Custom_Recent_Posts() в __construct. Готово. Принимает 5 секунд.

Второй сначала легкий. Просто измените $this->WP_Widget на $this->__construct, правильно? За исключением $this->__construct относится к методу __construct вашего класса. Вам нужно позвонить parent::__construct, чтобы сообщить PHP, какой метод __construct этого класса нужно вызвать.

Так исправленный код будет выглядеть так:

class Custom_Recent_Posts extends WP_Widget { 
    function __construct() { 
     $widget_ops = array('classname' => 'Custom_Recent_Posts', 'description' => 'The recent posts with thumbnails'); 
     parent::__construct('Custom_Recent_Posts', 'Custom Recent Posts', $widget_ops); 
    } 

Смотрите Widgets API sample code на WordPress Codex.

Смежные вопросы