17713433920 info@mac163.com

WordPress注释模板(回调)不仅是创建自定义WordPress主题时较为复杂的步骤之一,而且自定义默认注释代码也相当复杂。如果您是主题开发人员,并且想尝试自定义注释以使其看起来像您想要的样子而陷于困境,但是不能这样做,因为您需要添加额外的div类或必须删除一些div类,那么您需要查看这篇文章。我将向您展示如何轻松创建WordPress将用于评论结构的自定义回叫模板,以便您可以完全控制评论设计。

如何在WordPress中创建自定义评论回调
如何在WordPress中创建自定义评论回调

给开发人员的说明。在为WordPress.org目录构建WordPress主题或在其他任何市场上进行重新分发时,最好保留默认的注释设计,以确保与第三方插件没有任何可能的冲突。本教程主要适用于在其活动站点上寻求定制解决方案的用户(通过子主题进行修改)或为客户开发定制设计的用户。

现在进入实际教程,如果您对我们如何改进指南有任何疑问或建议,请在指南下方的评论部分中告诉我。

步骤1:建立Better-comments.php

为您的父主题或子主题创建一个新的php文件(您可以命名为任何东西,但我喜欢将其命名为Better-comments.php),然后将以下代码粘贴。

<?php
// My custom comments output html
function better_comments( $comment, $args, $depth ) {

	// Get correct tag used for the comments
	if ( 'div' === $args['style'] ) {
		$tag       = 'div';
		$add_below = 'comment';
	} else {
		$tag       = 'li';
		$add_below = 'div-comment';
	} ?>

	<<?php echo $tag; ?> <?php comment_class( empty( $args['has_children'] ) ? '' : 'parent' ); ?> id="comment-<?php comment_ID() ?>">

	<?php
	// Switch between different comment types
	switch ( $comment->comment_type ) :
		case 'pingback' :
		case 'trackback' : ?>
		<div class="pingback-entry"><span class="pingback-heading"><?php esc_html_e( 'Pingback:', 'textdomain' ); ?></span> <?php comment_author_link(); ?></div>
	<?php
		break;
		default :

		if ( 'div' != $args['style'] ) { ?>
			<div id="div-comment-<?php comment_ID() ?>" class="comment-body">
		<?php } ?>
			<div class="comment-author vcard">
				<?php
				// Display avatar unless size is set to 0
				if ( $args['avatar_size'] != 0 ) {
					$avatar_size = ! empty( $args['avatar_size'] ) ? $args['avatar_size'] : 70; // set default avatar size
						echo get_avatar( $comment, $avatar_size );
				}
				// Display author name
				printf( __( '<cite class="fn">%s</cite> <span class="says">says:</span>', 'textdomain' ), get_comment_author_link() ); ?>
			</div><!-- .comment-author -->
			<div class="comment-details">
				<div class="comment-meta commentmetadata">
					<a href="<?php echo htmlspecialchars( get_comment_link( $comment->comment_ID ) ); ?>"><?php
						/* translators: 1: date, 2: time */
						printf(
							__( '%1$s at %2$s', 'textdomain' ),
							get_comment_date(),
							get_comment_time()
						); ?>
					</a><?php
					edit_comment_link( __( '(Edit)', 'textdomain' ), '  ', '' ); ?>
				</div><!-- .comment-meta -->
				<div class="comment-text"><?php comment_text(); ?></div><!-- .comment-text -->
				<?php
				// Display comment moderation text
				if ( $comment->comment_approved == '0' ) { ?>
					<em class="comment-awaiting-moderation"><?php _e( 'Your comment is awaiting moderation.', 'textdomain' ); ?></em><br/><?php
				} ?>
				<div class="reply"><?php
				// Display comment reply link
				comment_reply_link( array_merge( $args, array(
					'add_below' => $add_below,
					'depth'     => $depth,
					'max_depth' => $args['max_depth']
				) ) ); ?>
				</div>
			</div><!-- .comment-details -->
	<?php
		if ( 'div' != $args['style'] ) { ?>
			</div>
		<?php }
	// IMPORTANT: Note that we do NOT close the opening tag, WordPress does this for us
		break;
	endswitch; // End comment_type check.
}

这是一个供您使用的入门模板,其中包括您希望用于注释的基本输出,还包括一些额外的div,以简化样式。

步骤2:加入新的Better-comments.php模板

将新创建的文件放在您的父主题或子主题中,然后转到您的functions.php文件,并使用require_once函数加载文件。请参见下面的示例(如果已将Better-comments.php文件添加到主题的其他子文件夹中,请确保更改位置–我通常将自定义函数放在函数或inc文件夹中,以使其与核心分开模板文件)。

注意:以下代码段包含2个示例,您需要使用正确的代码行,具体取决于您是将模板添加到父主题还是子主题。

// Include better comments file from a Parent theme
require_once get_parent_theme_file_path( '/functions/better-comments.php' );

// Or include via a child theme
require_once get_stylesheet_directory() . '/functions/better-comments.php';

您可以在functions.php文件中的任何位置添加代码,只需确保将其添加在<?php和?>标记内。

步骤3:向wp_list_comments添加更好的评论回调

现在,我们只需要告诉WordPress将我们的自定义输出模板用于注释即可。有两种方法可以执行此操作,具体取决于您是与父级一起工作还是更改默认的父主题功能(又称子主题或插件)。

父主题:如果您正在使用父主题,则需要找到comment.php文件,并希望编辑wp_list_comments函数以在参数数组中包含回调,例如:

<?php
// Display comments
wp_list_comments( array(
    'callback' => 'better_comments'
) ); ?>

子主题或插件:如果您正在使用子主题或插件,并且想要过滤注释html输出,则不希望使用wp_list_comments_args过滤器并传递新的回调参数,例如:

// Filter the comment list arguments
add_filter( 'wp_list_comments_args', function( $args ) {
    $args[ 'callback' ] = 'better_comments';
	return $args;
} );

当然,在两种情况下,我们都引用了在步骤1中使用的函数名称(better_comments)。

步骤4:调整自定义HTML输出

如果一切操作正确,WordPress现在将在主题中使用您的better_comments函数作为注释html输出。与仅使用wp_list_comments函数相反,您现在可以编辑将与每个注释一起显示的所有代码。现在,“天空是极限”。编辑您的函数,使WordPress注释看起来像您想要的样子。以下是一些您可以做的令人敬畏的事情的示例:

以不同方式显示Pingback和常规注释

如果看一下代码,您会发现它具有一个switch语句,该语句用于显示pingback / trackback与标准注释不同。虽然我们通常建议您在网站上使用pingback / trackback或希望它们对最终产品看起来不错(如果您是主题开发人员),则可以使用此方法根据评论完全更改输出类型。

显示评论用户“徽章”

如果您正在运行社区风格的博客,您的读者已登录,则可以为每个评论插入一个“徽章”,以显示留下评论的人的“角色”。因此,您可以为订阅者,贡献者,作者,管理员等显示徽章。

global $wp_roles;
if ( $wp_roles ) {
	$user_id = $comment->user_id;
	if ( $user_id && $user = new WP_User( $user_id ) ) {
		if ( isset( $user->roles[0] ) ) { ?>
			<div class="comment-user-badge <?php echo esc_attr( $user->roles[0] ); ?>"><?php esc_html( translate_user_role( $wp_roles->roles[ $user->roles[0] ]['name'] ) ); ?></div>'
		<?php }
	} else { ?>
		<div class="comment-user-badge guest"><?php esc_html_e( 'Guest', 'textdomain' ); ?></div>
	<?php }
}

更改墓碑大小

您可以用更好的注释执行的另一项很酷的操作是更改头像大小,我们相信,您可以通过wp_list_comments数组手动更改它,也可以使用wp_list_comments_args过滤器更改它,但是现在您也可以手动更改它,这意味着您甚至可以根据评论使用不同的大小(也许您希望作者的头像更大,这可能会很酷)。

更改默认Gravatar或将其完全删除

如果要手动设置默认头像图标的URL,则可以修改get_avatar函数以为默认图片添加第3个参数。这意味着您可以添加一个与您的网站匹配的有趣的默认头像。或者,如果您不使用头像代码,则可以将其完全删除(这对于带有大量注释的网站来说是个好主意,因为gravatars的加载速度可能会变慢,并且会使网站膨胀。)

<?php echo get_avatar( $comment, $avatar_size, 'URL TO CUSTOM DEFAULT AVATAR' ); ?>

奖励:突出作者评论

从技术上讲,这与您的自定义评论输出无关,但是值得一提,因为许多主题默认情况下都不集成此主题。在comment_class输出中,如果评论是由帖子的作者做出的,则该评论将包含bypostauthor类名,这使您可以  将帖子作者的评论样式设置为与其他评论不同,从而使它们脱颖而出。

.bypostauthor {background: #ffff99;}

微信二维码

微信扫描二维码联系我们!
我们在微信上24小时期待你的声音
提供外贸路由器设备产品,轻松翻墙,解答:WP主题推荐,WP网站建设,Google SEO,百度SEO,专业服务器环境搭建等!


需要提供WordPress主题/插件的汉化服务可以随时联系我们!另外成品WordPress网站以及半成品WordPress网站建设,海外Google SEO优化托管服务,百度SEO优化托管服务,Centos/Debian服务器WP专用环境搭建,WP缓存服务器搭建,我们都是你的首选,拥有多年WP开源程序服务经验,我们一直在坚持客户体验,没有最好,只有更好!
回到顶部