翻车了
去别人博客串门的时候,都看到有提到说 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 !
对你有用的话,可以打赏请我喝水噢,我丝毫不介意,哈哈哈哈
叨叨几句... 17 条评论
创业博客 博主
这个主题真是太骚了
后宫学长 博主
@创业博客
嘿嘿,可以换不骚的图。
老杨 博主
后面那个钩子方法,赞!
后宫学长 博主
@老杨
这个方法很难找到呢。
都没 博主
「 该评论为私密评论 」
后宫学长 博主
@都没
「 该评论为私密评论 」
LiarOnce 博主
奇怪了为啥同样是Siren,我的居然没有问题
后宫学长 博主
@LiarOnce
还说正常,你点击一下你的回复按钮试试,页面是不是刷新了。
触及到评论有任何 AJAX 行为的主题,基本翻车。
LiarOnce 博主
@后宫学长
奇怪了我盯了老半天没有刷新,难道我用了假的5.1?
后宫学长 博主
@LiarOnce
是回复别人的评论。
LiarOnce 博主
@后宫学长
我去还真翻了
LiarOnce 博主
@后宫学长
平时用WP客户端回复的,没注意到
后宫学长 博主
@LiarOnce
还有你那破加载动画,经常过不了,还要刷新页面。
LiarOnce 博主
@后宫学长
等久一点就可以了,毕竟博客绕了这么多年还是回到了美国
后宫学长 博主
@LiarOnce
速度还行吧 只是动画有问题
虫子菌 博主
感谢分享的方法,使用老毛子的代码完美解决,微信小小打赏了一下,不成敬意
后宫学长 博主
@虫子菌
凌晨五点的是你呀。
我有空再更新打赏了。