Jak zastąpić funkcje nadrzędne w motywach potomnych?

29

Czytam i próbuję wymyślić, jak to zrobić, ale z jakiegoś powodu nie mogę zastąpić funkcji nadrzędnych w motywie potomnym.

Używam TwentyTen jako rodzica - czy ktoś może mi powiedzieć, dlaczego ta funkcja w moim motywie podrzędnym nie zastępuje funkcji nadrzędnej?

// Override read more link
function osu_twentyten_continue_reading_link() {
 return ' <a href="'. get_permalink() . '">' . __( 'Read on <span class="meta-nav">&rarr;</span>', 'twentyten-child' ) . '</a>';
}
function osu_twentyten_auto_excerpt_more( $more ) {
 return ' &hellip;' . osu_twentyten_continue_reading_link();
}
remove_filter( 'excerpt_more', 'twentyten_auto_excerpt_more' );
add_filter( 'excerpt_more', 'osu_twentyten_auto_excerpt_more' );

Myślałem, że musisz usunąć filtr / akcję itp. Przed ponownym dodaniem go, prawda?

Dzięki,

osu

Osu
źródło

Odpowiedzi:

32

Powinieneś uruchomić kod po ustawieniu motywu.

function osu_twentyten_continue_reading_link() {
    return ' <a href="'. get_permalink() . '">' . __( 'Read on <span class="meta-nav">&rarr;</span>', 'twentyten-child' ) . '</a>';
}

function osu_twentyten_auto_excerpt_more( $more ) {
    return ' &hellip;' . osu_twentyten_continue_reading_link();
}

function my_child_theme_setup() {
    remove_filter( 'excerpt_more', 'twentyten_auto_excerpt_more' );
    add_filter( 'excerpt_more', 'osu_twentyten_auto_excerpt_more' );
}

add_action( 'after_setup_theme', 'my_child_theme_setup' );
sorich87
źródło
2
Tak. Powodem, dla którego nie działa bezpośrednio, jest to, że kod motywu podrzędnego jest ładowany przed motywem nadrzędnym.
Rarst 23.01.11