it-swarm.com.ru

Можно ли переопределить эту функцию/класс в дочерней теме?

Можно ли переопределить эту функцию widget из родительской темы? Я видел этот блог, но он имел дело с более простым делом.

http://venutip.com/content/right-way-override-theme-functions

родитель

class Chocolat_Widget_New_Entrys extends WP_Widget {

  function __construct() {...

  function widget( $args, $instance ) {...
}
add_action( 'widgets_init', create_function( '', 'return register_widget( "Chocolat_Widget_New_Entrys" );' ) );

Я попытался использовать remove_action('widgets_init','???');, но вскоре понял, что не могу получить представление о функции, которая его зарегистрировала!

Я думал о переопределении функции и создании подкласса, но все же он зарегистрирован в родительском элементе по имени родительского класса.

Я думал о том, чтобы просто скопировать весь класс, но дочерний functions.php равен загружен ранееparents.php.

3
Chloe

Вам просто нужно запустить свой код с более высоким приоритетом, чем у родительской темы, по умолчанию для функции add_action установлено значение 10, поэтому вы можете использовать:

function s157343_unregister_widgets() {
     unregister_widget( 'Chocolat_Widget_New_Entrys' );
}
add_action( 'widgets_init', 's157343_unregister_widgets', 20 );

Это отменит регистрацию этого виджета. Конечно, вы все равно можете создать новый класс, который расширяет класс этого виджета, чтобы переопределить нужные вам методы и зарегистрировать новый виджет на основе этого:

class my_Chocolat_Widget_New_Entrys extends Chocolat_Widget_New_Entrys() {
    public function __construct() {}
    public function widget( $args, $instance ) {}
}
add_action( 'widgets_init', create_function( '', 'return register_widget( "my_Chocolat_Widget_New_Entrys" );' ) );
4
a378853

Итак, вот яркий пример:

В functions.php:

add_action( 'widgets_init', function() { 
    require 'child_chocolat_widget.php'; 
    return register_widget(  "Child_Chocolat_Widget_New_Entrys" ); 
} );

В child_chocolat_widget.php [Пользовательский файл класса, любое имя, которое вы можете сохранить]

class my_Chocolat_Widget_New_Entrys extends Chocolat_Widget_New_Entrys() {
    public function __construct() {}
    public function widget( $args, $instance ) { //override method
     }
}
0
Raghavendra