翻车了

去别人博客串门的时候,都看到有提到说 WordPress 5.1 评论回复按键失效的问题,但是我自己停留在 5.0.3 版本上面了,也没感觉,本地测试 5.1 一看,还真的翻车了……

好几个问题:
比如 AJAX 无法提交、点回复按钮会刷新页面,反正就是没法用了。

于是来摸索下怎么解决它,发现好几个办法,现在我给大家说下。
方法只用其中一个就可以了,复制代码的话,代码框右上角有一键复制按钮,方便快速!

方法一

用 JS 直接给“回复”按钮添加 Onclick 事件,适合无 PJAX 的主题。
可以在后台填写网页统计代码的地方粘贴:

$('body').on('click', '.comment-reply-link', function () {
    addComment.moveForm("comment-" + $(this).attr('data-commentid'), $(this).attr('data-commentid'), "respond", $(this).attr('data-postid'));
    return false;
});

该方法来自樱花庄的白猫

方法二

直接加载 WordPress 的评论 JS 文件到页面,适合无 PJAX 的主题。
在主题 functions 文件里加入如下代码:

/**
 * 加载评论回复 JS
 */
function comment_reply_scripts()
{
    if (is_singular() && comments_open() && get_option('thread_comments')) {
        wp_enqueue_script('comment-reply');
    }
}

add_action('wp_enqueue_scripts', 'comment_reply_scripts');

该段代码判断页面是否为文章页 + 评论是否开启,然后加载 JS 。

如果你不想写在 functions 文件里面,也可以写在 footer 文件里面,推荐使用函数获取 URL :

<script type="text/javascript" src="<?php echo includes_url( '/js/comment-reply.min.js'); ?>"></script>

方法三

简单粗暴的修改评论模板的“回复”按钮 URL 格式,不限有无 PJAX 的主题。
在评论模板找到这个函数代码并且注释掉或者删掉:

<?php comment_reply_link(array_merge($args, array('depth' => $depth, 'max_depth' => $args['max_depth']))); ?>

然后在相同的位置加入:

<a rel="nofollow" class="comment-reply-link" href="<?php echo get_permalink(); ?>?replytocom=<?php comment_ID(); ?>#respond" onclick="return addComment.moveForm('comment-<?php comment_ID(); ?>', '<?php comment_ID(); ?>', 'respond', '<?php the_ID(); ?>')" aria-label="回复给<?php echo $comment->comment_author; ?>">回复</a>

然后就可以了,简单粗暴的拼接 URL 格式……
2333

该方法来自常阳时光

方法四

利用 WordPress 钩子修改“回复”按钮的 URL 格式,兼容最佳,适合有 PJAX 的主题,推荐!
在主题 functions 文件里加入如下代码:

/**
 * 修改评论回复按钮链接
 */
global $wp_version;
if (version_compare($wp_version, '5.1.1', '>=')) {
    add_filter('comment_reply_link', 'haremu_replace_comment_reply_link', 10, 4);
    function haremu_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;
    }
}

该代码判断 WordPress 的版本是否等于或者大于 5.1.1 版本,是的话就加载钩子。
个人感觉这个方式最佳!

该代码来自俄罗斯WP-KAMA
苦苦寻找半天才在战斗民族的网站上看到,可把我牛逼坏了。

以上代码均测试过,都有效,如果用在你的主题上面去无效,那你自己就要对照修改下啦!
照葫芦画瓢,举一反三 SO EASY !

对你有用的话,可以打赏请我喝水噢,我丝毫不介意,哈哈哈哈


公交车司机终于在众人的指责中将座位让给了老太太