概述
问题描述
今天在我的网站有人留言,我想在网页中直接回复,但是点击【回复】不单是评论框,在网上搜索一番发现果然是 WP的BUG,WordPress 5.1后 更改了的 wp-includescomment-template.php 文件的 get_comment_reply_link()函数,5.0 及以前的版本,该函数输出评论回复链接按钮是绑定有一个 onclick,具体以下代码:
$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
);
而 5.1 版本之后就没有这个 onclick。
BUG修复
找到问题就来解决问题吧。
如果你使用的是 Nana主题或 WordPress 版本的 Blogs主题,那么直接打开主题文件 jsscript.js 文件,找到以下代码:
$(document).ready(function(){
// 移动端输入页码跳转
修改为:
$(document).ready(function(){
$('body').on('click', '.comment-reply-link', function(){
addComment.moveForm( "div-comment-"+$(this).attr('data-commentid'), $(this).attr('data-commentid'), "respond", $(this).attr('data-postid') );
return false;
});
// 移动端输入页码跳转
其他主题的,请自行添加以下 JS 代码到当前主题的 JS 文件即可:
$('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; // 阻止 a tag 跳转,这句千万别漏了
});
如果是 begin 主题,直接在 functions.php 里面找到:zmingcx_scripts 函数,在最后一个 } 之前加上:
// 加载回复 js
if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) {
wp_enqueue_script( 'comment-reply' );
}
这段代码其实就是在页面加载一段 JS:
<script type='text/javascript' src='/wp-includes/js/comment-reply.min.js?ver=5.1.1'></script>
所以,非 begin 主题,只需要在主题的 header.php 加上如下代码即可:
<?php if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) { ?>
<script type='text/javascript' src='/wp-includes/js/comment-reply.min.js?ver=5.1.1'></script>
<?php } ?>
但是以上方法都没有解决,笔者使用的是乐趣公园Git主题,经过我不懈努力,终于找到修复BUG的方法。将以下代码添加至主题functions文件,保存刷新就会恢复评论回复功能。
global $wp_version;
if (version_compare($wp_version, '5.1.0', '>=')) {
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' οnclick='%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钩子修改“回复”按钮的URL格式,当然啦你要判断你的WordPress版本是否大于5.1。
评论回复框能够正常使用了。
参考地址
欢迎访问我的网站:
BruceOu的哔哩哔哩
BruceOu的主页
BruceOu的博客
BruceOu的CSDN博客
BruceOu的简书
接收更多精彩文章及资源推送,请订阅我的微信公众号:
最后
以上就是复杂电灯胆为你收集整理的《WEB开发-WordPress杂记》解决云WordPress 评论回复按钮失效问题的全部内容,希望文章能够帮你解决《WEB开发-WordPress杂记》解决云WordPress 评论回复按钮失效问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复