web-dev-qa-db-de.com

Ist es möglich, diese Funktion/Klasse in einem untergeordneten Thema zu überschreiben?

Ist es möglich, diese widget -Funktion von einem übergeordneten Thema zu überschreiben? Ich habe diesen Blog gesehen, aber es ging um einen einfacheren Fall.

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

elternteil

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" );' ) );

Ich habe versucht, remove_action('widgets_init','???'); zu verwenden, aber bald wurde mir klar, dass ich die Funktion, die sie registriert, nicht erfassen konnte!

Ich habe darüber nachgedacht, die Funktion zu überschreiben und eine Unterklasse zu erstellen. Trotzdem wird sie im übergeordneten Objekt mit dem Namen der übergeordneten Klasse registriert.

Ich habe darüber nachgedacht, nur die gesamte Klasse zu kopieren, aber der untergeordnete functions.php wird vorparents.php geladen.

3
Chloe

Sie müssen lediglich Ihren Code mit einer höheren Priorität ausführen als das übergeordnete Thema. Die Standardfunktion für add_action ist 10, sodass Sie Folgendes verwenden können:

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

Dadurch wird die Registrierung dieses Widgets aufgehoben. Natürlich können Sie immer noch eine neue Klasse erstellen, die die Klasse dieses Widgets erweitert, um die gewünschten Methoden zu überschreiben, und ein neues Widget basierend darauf registrieren:

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

Also hier ist das klare Beispiel:

In functions.php:

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

In child_chocolat_widget.php [Benutzerdefinierte Klassendatei, welcher Name auch immer Sie behalten können]

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