WordPress 5.1『回复』链接生成 comment_reply_link 函数更新,生成的回复链接没有了 onclick,导致一部分主题『回复』按钮失效——回复评论时发现要点两次『回复』才能把 @xx 填进评论框,第一次点『回复』会刷新页面,第二次点才不会刷新。并且 comment-form 位置不会移动到要回复的评论下面。
有几种方法可修复此问题:
修改『回复』按钮代码
详见:
使用 js 为 reply 按键添加一个 click 事件监听
来源:樱花庄的白猫,为 reply 按键添加一个 click 事件监听,用 jQuery 实现,代码如下:
$('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 跳转,这句千万别漏了
});
注意:comment-要与主题的评论结构一致,比如有些主题是 comment-评论 ID,有些主题就是 div-comment-评论 ID……如果不一致评论框就嵌套不到评论内容下方。
利用 WordPress 钩子修改“回复”按钮
此方法兼容最佳,在主题 functions 文件里加入如下代码:
/**
* 修改评论回复按钮链接
*/
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;
}
}
来源:后宫学长
Comments:4
这条post怎么之前没看到。
这条js要加载在什么文件里?我在function里加入了
wp_enqueue_script( 'exif', $dir . 'js/onclick.js');
貌似没用。
@老虎 去除了?没看到有。加到主题的 js 文件里面应该可以啊。
@老头 没成功。后来托大发更新了puma,重新换主题了。
@老虎 大发那个 ajax 代码也更新了,跟着更新了一下。