使用REMOVE_FILTER覆盖父主题中的函数时出现问题

时间:2018-01-24 作者:dwood7399

我无法使用remove_filter 覆盖父主题中的“阅读更多”链接。

以下是父主题函数:

/* 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 ) ;

}
这是我在我的孩子主题函数中的函数。php:

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 = \'[&hellip;]\') {

    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);
当前的结果是,现在显示了两个“阅读更多”链接,即父主题和我的子主题。我做错了什么:)?

2 个回复
SO网友:Dharmishtha Patel

A Note on Priorities

请注意,如果您试图使用remove_action()remove_filter() 并且该函数已分配了优先级,您必须在删除它时包含优先级,否则它将无法工作。

So if the function in the parent theme looks like this:

<?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\' );
?>
. 
删除时需要包含相同的优先级值:

SO网友:dwood7399

发现显示的“阅读更多”链接来自wp_trim_excerpt 挂钩而不是excerpt_more 钩只需要切换我的add_filterremove_filter 参考适当的挂钩。

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

结束

相关推荐

当返回值为空时,Apply_Filters为什么要返回非空字符串?

因为这个把我的键盘弄坏了。进行了正确的安装,将数据库上载到新的MySQL,并一直在正确使用子主题。但有件事困扰着我,我想不出来。在我的新安装上(ver2.whowhatwhy.com) 我故意将一些小部件留空。我想,当阅读default-widgets.php wp中的文件包括在该小部件上不会显示标题元素。相反,显示标题小部件是因为,出于某种原因,传递的值apply_filters 是一个空格,而不是空白值$instance[\'title\'] 为空。$title = apply_filters( \'