向GET_COMMENTS_LINK()添加过滤器

时间:2016-07-26 作者:timholz

我正在尝试将永久链接#注释xy更改为#自定义名称xy。当我更改corefile注释模板时。php在线754至

$link = $link . \'#customname-\' . $comment->comment_ID;
我达到了预期的结果。但这当然不优雅。

因此,我尝试在函数中添加一个过滤器。php:

/*has no effect*/
function directcommentlink( $link  ) {
    global $post;
    $hash = \'#customname\';
    return get_permalink( $post->ID ) . $hash;
}
add_filter( \'get_comments_link\', \'directcommentlink\' );
但是这个过滤器没有效果。这个过滤器有什么问题?感谢您的关注。西奥

1 个回复
最合适的回答,由SO网友:birgire 整理而成

不建议修改核心代码。

请注意,核心get_comments_link() 函数考虑以下两种情况:$hash:

$hash = get_comments_number( $post_id ) ? \'#comments\' : \'#respond\';
另请注意,第二个输入参数是$post_id.

下面是您修改后的示例:

add_filter( \'get_comments_link\', function( $link, $post_id )
{
    $hash = get_comments_number( $post_id ) ? \'#mycomments\' : \'#myrespond\';
    return get_permalink( $post_id ) . $hash;

}, 10, 2 );
或者,另一种方法可能是简单的替代方法:

add_filter( \'get_comments_link\', function( $link, $post_id )
{
    return str_replace( 
        [\'#comments\', \'#respond\'], 
        [\'#mycomments\',\'#myrespond\'], 
        $link 
    );

}, 10, 2 );
但听起来你想修改get_comment_link() 根据您的行号参考。那么你应该考虑get_comment_link 过滤器:

add_filter( \'get_comment_link\', function( $link, \\WP_Comment $comment )
{
    return str_replace( 
        \'#comment-\', 
        \'#mycomment-\', 
        $link 
    );

}, 10, 2 );