WordPress : Problème d’utilisation de remove_filter pour remplacer la fonction dans le thème parent
J’ai du mal à utiliser remove_filter
pour remplacer les liens Lire plus dans mon thème parent.
Voici les fonctions du thème parent :
/* Modify the '[...]' Read More Text */
add_filter( 'the_content_more_link', 'hoot_modify_read_more_link' );
if ( apply_filters( 'hoot_force_excerpt_readmore', true ) ) {
add_filter( 'excerpt_more', 'hoot_insert_excerpt_readmore_quicktag', 11 );
add_filter( 'wp_trim_excerpt', 'hoot_replace_excerpt_readmore_quicktag', 11, 2 );
} else {
add_filter( 'excerpt_more', 'hoot_modify_read_more_link' );
}
/**
* Modify the '[...]' Read More Text
*
* @since 1.0
* @access public
* @return string
*/
function hoot_modify_read_more_link( $more = '[…]' ) {
if ( is_admin() )
return $more;
$read_more = esc_html( hoot_get_mod('read_more') );
$read_more = ( empty( $read_more ) ) ? sprintf( __( 'Read More %s', 'brigsby' ), '→' ) : $read_more;
global $post;
$read_more = '<a class="more-link" href="' . esc_url( get_permalink( $post->ID ) ) . '">' . $read_more . '</a>';
return apply_filters( 'hoot_readmore', $read_more ) ;
}
Et voici mes fonctions dans le fichier function.php de mon thème enfant :
function dw_remove_parent_read_more() {
remove_filter('excerpt_more', 'hoot_modify_read_more_link');
}
add_action('after_setup_theme', 'dw_remove_parent_read_more',999);
function dw_modify_read_more_link($more = '[…]') {
if ( is_admin() )
return $more;
$read_more = esc_html( hoot_get_mod('read_more') );
$read_more = ( empty( $read_more ) ) ? sprintf( __( 'Read More %s', 'brigsby' ), '' ) : $read_more;
global $post;
$read_more = '<div><a class="more-link" href="' . esc_url( get_permalink( $post->ID ) ) . '">' . $read_more . '</a></div>';
return apply_filters( 'hoot_readmore', $read_more ) ;
}
add_filter('excerpt_more', 'dw_modify_read_more_link', 999);
Le résultat actuel est que deux liens de lecture supplémentaires sont maintenant affichés, à la fois celui du thème parent et celui de mon thème enfant. Qu’est-ce que je fais mal 🙂 ?
Solution n°1 trouvée
J’ai compris que le lien « En savoir plus » affiché provenait du wp_trim_excerpt
crochet plutôt que du excerpt_more
crochet. Juste besoin de changer mon add_filter
et remove_filter
de référencer les crochets appropriés.
function dw_remove_parent_read_more() {
remove_filter('wp_trim_excerpt', 'hoot_replace_excerpt_readmore_quicktag', 11, 2);
}
add_action('after_setup_theme', 'dw_remove_parent_read_more',11);
function dw_replace_excerpt_readmore_quicktag( $text, $raw_excerpt ) {
if ( is_admin() )
return $text;
$read_more = dw_modify_read_more_link();
$text = str_replace( '<!--hoot-read-more-quicktag-->', '', $text );
return $text . $read_more ;
}
add_filter('wp_trim_excerpt', 'dw_replace_excerpt_readmore_quicktag', 11,2);
Solution n°2 trouvée
Une note sur les priorités
Notez que si vous essayez de supprimer une fonction à l’aide remove_action()
de ou remove_filter()
et qu’une priorité lui a été attribuée, vous devez inclure la priorité lors de la suppression, sinon cela ne fonctionnera pas.
Donc, si la fonction dans le thème parent ressemble à ceci :
<?php
function parent_function() {
// Contents for your function here.
}
add_action( 'init', 'parent_function', 15 );
?>
<?php
function child_remove_parent_function() {
remove_action( 'widgets_init', 'parent_function', 15 );
}
add_action( 'wp_loaded', 'child_remove_parent_function' );
?>
.
vous devrez inclure la même valeur de priorité lors de sa suppression :
0 commentaire