让代码更简单

WordPress5.1+评论回复函数get_comment_reply_link无点击事件解决办法

重要:本文最后更新于2019-10-24 08:46:02,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗

这段时间一直没搞过WordPress开发,找我的单子都推了,今天在做一个仿站单子时发现评论回复函数get_comment_reply_link()的结构发生了变化,搞了好久才发现问题!真坑!主要是WordPress官方修改了该函数的输出结构,去掉了一个绑定的点击事件,所以解决办法很简单,那就是自己添加一个点击事件,使用class、ID筛选作为点击事件,除此之外还可以使用WordPress钩子,重构下这个函数,把它还原成之前的样子就可以了。

WordPress教程

WordPress教程

解决方案一:JavaScript添加点击事件

复制
 $('.comment-reply-link').on('click', function(){
            var that = $(this)
            if( !that.attr('onclick') && that.data('belowelement') && that.data('commentid') && that.data('respondelement') && that.data('postid') ){
                return addComment.moveForm( that.data('belowelement'), that.data('commentid'), that.data('respondelement'), that.data('postid') )
            }
        })

添加上面这段js就可以了,使用jQuery的class选择器给回复标签添加了点击事件,该点击事件就是以前的addComment点击事件。使用DMD主题,或者DUX主题的朋友可以直接复制上面的代码到js文件中即可。

解决方案二:WordPress钩子重写get_comment_reply_link函数

复制
/**
 * 修改评论回复按钮链接
 */
global $wp_version;
if (version_compare($wp_version, '5.1.1', '>=')) {
    add_filter('comment_reply_link', 'theme_replace_comment_reply_link', 10, 4);
    function theme_replace_comment_reply_link($link, $args, $comment, $post)
    {
        if (get_option('comment_registration') && !is_user_logged_in()) {
            $link = sprintf(
                '<a rel="nofollow" class="comment-reply-login" href="%s">%s</a>',
                esc_url(wp_login_url(get_permalink())),
                $args['login_text']
            );
        } else {
            $onclick = sprintf(
                'return addComment.moveForm( "%1$s-%2$s", "%2$s", "%3$s", "%4$s" )',
                $args['add_below'],
                $comment->comment_ID,
                $args['respond_id'],
                $post->ID
            );
            $link = sprintf(
                "<a rel='nofollow' class='comment-reply-link' href='%s' onclick='%s' aria-label='%s'>%s</a>",
                esc_url(add_query_arg('replytocom', $comment->comment_ID, get_permalink($post->ID))) . "#" . $args['respond_id'],
                $onclick,
                esc_attr(sprintf($args['reply_to_text'], $comment->comment_author)),
                $args['reply_text']
            );
        }
        return $link;
    }
}

如果你不会js,直接复制上面的PHP代码到WordPress的functions.php文件中即可恢复回复评论框跟随效果。上面的代码主要判断了当前WordPress版本,大于等于5.1时会对get_comment_reply_link()函数的结构重写。

几个月不碰WordPress就出现这种事,真坑!

感觉很棒!可以赞赏支持我哟~

3 打赏

评论 (0)

登录后评论
QQ咨询 邮件咨询 狗哥推荐