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






评论 (0)