it-swarm.com.de

Ändern Sie eine Funktion, ohne die Vorlage zu bearbeiten

Ich frage mich, wie ich eine Funktion ändern kann, ohne die Vorlagendatei zu berühren.

Die folgende Funktion wird in meinem Thema in der Datei template-functions.php aufgerufen:

    if( ! function_exists( 'book_landing_page_footer_credit' ) ) :
/**
 * Footer Credits 
 */
function book_landing_page_footer_credit(){

    echo '<div class="site-info">';
    esc_html_e( 'Copyright &copy;&nbsp;', 'book-landing-page' ); 
    echo esc_html( date_i18n( 'Y' ) );
    echo ' <a href="' . esc_url( home_url( '/' ) ) . '">' . esc_html( get_bloginfo( 'name' ) ) . '&#46;&nbsp;</a>';
    printf('<a href="%1$s">Book Landing Page By %2$s</a>&#46;&nbsp;', esc_url( __( 'http://raratheme.com/wordpress-themes/book-landing-page/', 'book-landing-page' ) ), 'Rara Theme');
    printf( esc_html__( 'Powered by %s', 'book-landing-page' ), '<a href="'. esc_url( __( 'https://wordpress.org/', 'book-landing-page' ) ) .'" target="_blank">WordPress&#46;</a>' );
    echo '</div>';

}
endif;

Was in der template-hooks.php-Datei wie folgt referenziert wird:

add_action( 'book_landing_page_footer', 'book_landing_page_footer_credit', 40 );

Meine Frage ist, wie kann ich diese Funktion ändern, ohne die Vorlagendateien zu berühren?

Ich habe Folgendes versucht, aber es funktioniert nicht:

if (!function_exists('new_credit')) {
    function new_credit() {
        echo 'This is my site';
    }
    add_filter('book_landing_page_footer_credit', 'new_credit');
}
1
brandozz

Offensichtlich müssen Sie etwas bearbeiten, wenn Sie es ändern möchten. Daher erstellen Sie am besten ein untergeordnetes Thema mit einer eigenen Funktionsdatei.

Ein Filter, wie Sie es versucht haben, funktioniert nicht, da die Funktion, die Sie ändern möchten, keinen Filter-Hook enthält. Sie können die Aktion entfernen , mit der die Fußzeile gedruckt wird, und dann eine neue Aktion am selben Hook hinzufügen. So was:

add_action ('wp_head','wpse252108_remove_add_action');

function wpse252108_remove_add_action() {
  remove_action ('book_landing_page_footer', 'book_landing_page_footer_credit', 40);
  add_action ('book_landing_page_footer', 'new_credit', 40)
  }

Da unklar ist, wo im Flow template-hooks.php, dem Ort, an dem die ursprüngliche Aktion hinzugefügt wird, geladen wird, ist wp_head möglicherweise zu früh, um die Aktion zum Hinzufügen/Entfernen auszuführen. Vielleicht ist wp_footer besser, obwohl das wiederum zu spät sein könnte.

1
cjbj