Pingbackとtrackback(ping)を有効にしたブログでは、リンクテキストと外部サイトのfaviconをリンクだけでコンパクトなリストで表示したい。日付なし、テキストなし。
どうやってやるの?
最初にやること:通常のコメントとpingbackを分けてください。 comments.php
で両方のtypeパラメータを設定します。
<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>
今、問題があります。承認されたpingがない場合は、空の<ol>
を印刷したくないでしょう。
それでは、単純な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()
が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>";
}
2つの重要な注意事項
</li>
を追加しないでください。 WordPressはあなたのためにそれをするでしょう。t5_external_favicon()
が必要です。 Googleに聞いてみましょう。。
/**
* 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
の外観です。