这周我一直在摆弄自定义评论,我想知道什么时候我想用助行器,什么时候我想用回拨器。。。
有些事情我不太明白如何改变,但让我抓狂的是如何给孩子们上课<ul>
标签:
<ul class="children">
是否有一些评论步行者可以做的事情是评论回调所不能做的?。。。反之亦然?作为主题开发人员使用其中一个“更好”吗?例如,我知道当一个主题使用自定义菜单遍历器时,很多菜单插件都不起作用。
无论如何,这里有一个exact same comments, 但一个是使用walker输出的,另一个是使用回调。。。我错过了什么?为什么两者都需要?
注释回调
wp_list_comments( array(
\'callback\' => \'bootstrap_comment_callback\',
));
function bootstrap_comment_callback( $comment, $args, $depth ){
$GLOBALS[\'comment\'] = $comment; ?>
<li id="comment-<?php comment_ID(); ?>" <?php comment_class( empty( $args[\'has_children\'] ) ? \'\' : \'parent\' ); ?>>
<?php if ( 0 != $args[\'avatar_size\'] ): ?>
<div class="media-left">
<a href="<?php echo get_comment_author_url(); ?>" class="media-object"><?php echo get_avatar( $comment, $args[\'avatar_size\'] ); ?></a>
</div>
<?php endif; ?>
<div class="media-body">
<?php printf( \'<h4 class="media-heading">%s</h4>\', get_comment_author_link() ); ?>
<div class="comment-metadata">
<a href="<?php echo esc_url( get_comment_link( $comment->comment_ID, $args ) ); ?>">
<time datetime="<?php comment_time( \'c\' ); ?>">
<?php printf( _x( \'%1$s at %2$s\', \'1: date, 2: time\' ), get_comment_date(), get_comment_time() ); ?>
</time>
</a>
</div><!-- .comment-metadata -->
<?php if ( \'0\' == $comment->comment_approved ) : ?>
<p class="comment-awaiting-moderation label label-info"><?php _e( \'Your comment is awaiting moderation.\' ); ?></p>
<?php endif; ?>
<div class="comment-content">
<?php comment_text(); ?>
</div>
<ul class="list-inline">
<?php edit_comment_link( __( \'Edit\' ), \'<li class="edit-link">\', \'</li>\' ); ?>
<?php
comment_reply_link( array_merge( $args, array(
\'add_below\' => \'div-comment\',
\'depth\' => $depth,
\'max_depth\' => $args[\'max_depth\'],
\'before\' => \'<li class="reply-link">\',
\'after\' => \'</li>\'
) ) );
?>
</ul>
</div>
<?php
}
评论步行者
wp_list_comments( array(
\'walker\' => new Bootstrap_Comment_Walker(),
));
class Bootstrap_Comment_Walker extends Walker_Comment {
protected function html5_comment( $comment, $depth, $args ) {
?><li id="comment-<?php comment_ID(); ?>" <?php comment_class( empty( $args[\'has_children\'] ) ? \'\' : \'parent\' ); ?>>
<?php if ( 0 != $args[\'avatar_size\'] ): ?>
<div class="media-left">
<a href="<?php echo get_comment_author_url(); ?>" class="media-object"><?php echo get_avatar( $comment, $args[\'avatar_size\'] ); ?></a>
</div>
<?php endif; ?>
<div class="media-body">
<?php printf( \'<h4 class="media-heading">%s</h4>\', get_comment_author_link() ); ?>
<div class="comment-metadata">
<a href="<?php echo esc_url( get_comment_link( $comment->comment_ID, $args ) ); ?>">
<time datetime="<?php comment_time( \'c\' ); ?>">
<?php printf( _x( \'%1$s at %2$s\', \'1: date, 2: time\' ), get_comment_date(), get_comment_time() ); ?>
</time>
</a>
</div><!-- .comment-metadata -->
<?php if ( \'0\' == $comment->comment_approved ) : ?>
<p class="comment-awaiting-moderation label label-info"><?php _e( \'Your comment is awaiting moderation.\' ); ?></p>
<?php endif; ?>
<div class="comment-content">
<?php comment_text(); ?>
</div>
<ul class="list-inline">
<?php edit_comment_link( __( \'Edit\' ), \'<li class="edit-link">\', \'</li>\' ); ?>
<?php
comment_reply_link( array_merge( $args, array(
\'add_below\' => \'div-comment\',
\'depth\' => $depth,
\'max_depth\' => $args[\'max_depth\'],
\'before\' => \'<li class="reply-link">\',
\'after\' => \'</li>\'
) ) );
?>
</ul>
</div>
<?php
}
}
SO网友:birgire
我们可以重写:
wp_list_comments( array(
\'callback\' => \'bootstrap_comment_callback\',
));
使用空值
walker
参数:
wp_list_comments( array(
\'walker\' => null,
\'callback\' => \'bootstrap_comment_callback\',
));
这意味着我们使用的是默认值
Walker_Comment
类别:
wp_list_comments( array(
\'walker\' => new Walker_Comment,
\'callback\' => \'bootstrap_comment_callback\',
));
The
Walker_Comment::start_el()
方法只是以下受保护方法之一的包装:
Walker_Comment::comment()
Walker_Comment::html5_comment()
Walker_Comment::ping()
这取决于上下文,当沿着注释树行走时,会将每个注释附加到输出字符串。
使用自定义walker类扩展Walker_Comment
类,使我们能够重写这些公共方法:
Walker_Comment::start_el()
Walker_Comment::end_el()
Walker_Comment::start_lvl()
Walker_Comment::end_lvl()
Walker_Comment::display_element()
除上述受保护的以外。
如果我们只需要修改start_el()
方法,我们只需要使用callback
中的参数wp_list_comments()
.