这段时间一直没搞过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)