首先要做的是:分离常规注释和pingback。在您的comments.php
为以下两者设置类型参数:
<ol class="commentlist">
<?php
// show regular comments
wp_list_comments(
array (
\'type\' => \'comment\',
\'style\' => \'ul\'
)
);
?></ol>
<ol class="pinglist">
<?php
// show pingbacks and trackbacks, short: "pings"
wp_list_comments(
array (
\'type\' => \'pings\',
\'style\' => \'ul\'
)
);
?></ol>
现在,有一个问题:您不想打印空的
<ol>
如果没有批准的ping。
因此,我们使用一个简单的ping计数器:
/**
* Count amount of pingbacks + trackbacks for a post.
*
* @param int $post_id Post ID for comment query. Default is current post.
* @return int
*/
function t5_count_pings( $post_id = NULL )
{
$pings = 0;
$comments = FALSE;
if ( NULL !== $post_id )
{
$comments = get_comments(
array (
\'post_id\' => $post_id, # Note: post_ID will not work!
\'status\' => \'approve\'
)
);
}
elseif ( ! empty ( $GLOBALS[\'wp_query\']->comments ) )
{
$comments = $GLOBALS[\'wp_query\']->comments;
}
if ( ! $comments )
return 0;
foreach ( $comments as $c )
if ( in_array ( $c->comment_type, array ( \'pingback\', \'trackback\' ) ) )
$pings += 1;
return $pings;
}
现在,我们将ping列表包装成一个条件:
if ( $num = t5_count_pings() )
{
?>
<h2 id="pingbacks"><?php
printf( _n( \'One pingback\', \'%d pingbacks\', $num, \'t5_theme\' ), $num );
?></h2>
<ol class="pinglist">
<?php
wp_list_comments(
array (
\'type\' => \'pings\',
\'style\' => \'ul\'
)
);
?></ol>
<?php
}
如果
t5_count_pings()
返回a
0
, PHP会像
FALSE
并且不会打印列表容器。
现在开始格式化。wp_list_comments()
接受参数callback
, 我们可以使用它来渲染每个ping的内容。我给我的命名t5_list_pings_callback()
并添加如下内容:
wp_list_comments(
array (
\'type\' => \'pings\',
\'style\' => \'ul\',
\'callback\' => \'t5_list_pings_callback\'
)
);
此函数的内容非常简单:
/**
* Callback for wp_list_comments( array ( \'type\' => \'pings\' ) )
*
* @param object $comment
* @return string
*/
function t5_list_pings_callback( $comment )
{
$url = esc_url( $comment->comment_author_url );
$icon = t5_external_favicon( $url );
$name = esc_html( $comment->comment_author );
print "<li><a href=\'$url\'>$icon $name</a>";
}
两个重要注意事项:
不要添加结束符</li>
. WordPress会帮你做的我们需要一个函数t5_external_favicon()
. 让我们问问谷歌。
/**
* Get an img element for a favicon from Google.
*
* @param string $url
* @param string $class class attribute
* @param int $size
* @param string $alt
* @return string
*/
function t5_external_favicon( $url, $class = \'icon\', $size = 16, $alt = \'\' )
{
$host = parse_url( $url, PHP_URL_HOST );
$icon_url = "https://plus.google.com/_/favicon?domain=$host";
return "<img class=\'$class\' width=\'$size\' height=\'$size\' alt=\'$alt\' src=\'$icon_url\' />";
}
我们使用空的
alt
属性,因为图像实际上只是装饰。以及
width
和
height
应该始终设置,因为有些网站使用非常大的图标。
就这样。这就是它的样子wpkrauts.com
: