サイドバーにカテゴリを表示するためのもっと良い方法を考えていました。普通のリストスタイルではなく、画像やサムネイルも表示したいです。
現在私は以下を使っています:
<?php wp_list_categories('show_last_updated=1&show_count=1&title_li='); ?>
各カテゴリの名前/リンク+投稿数を表示するだけです。それを維持したいのですが、それにサムネイルも追加したいのです。
私はこのボードを見て答えを探し、またその方法を考えましたが、まだ解決策を見つけることができませんでした。
そのカテゴリの最新の投稿の特集画像を取得する関数を作成する必要があると思います。投稿にさらにカテゴリがある場合でも、問題は発生しません。
そのカテゴリ内に1つの投稿のみを含むループを作成してサムネイルのみを出力することはオプションですが、サムネイルとカテゴリの一致が面倒になるように設定することをお勧めします。もっと良い方法があるはずです。
私はプラグインを探しているのではないので(私はそれがあると確信しているので)、私はそれをハードコーディングしたいです。
誰かがこれに近づくための良いアイデアやアドバイスをお持ちの場合は、私を助けてください。
どうもありがとうございました!
あなたはカスタム ウォーカー を使うことができます。あなたの場合はそのうち最も簡単なものはWalker_Category
であり、それを以下のように拡張します。
class CategoryThumbnail_Walker extends Walker_Category {
// A new element has been stumbled upon and has ended
function end_el( &$output, $category, $depth, $args ) {
// Output the standard link ending
parent::end_el( &$output, $category, $depth, $args );
// Get one post
$posts = get_posts( array(
// ...from this category
'category' => $category->cat_ID,
'numberposts' => 1
) );
// If a post has been found
if ( isset($posts[0]) ) {
// Get its thumbnail and append it to the output
$featured = get_the_post_thumbnail( $posts[0]->ID, 'thumbnail', null );
$output .= $featured;
}
}
}
これであなたのwp_list_categories
はそのような追加のwalker
引数を与えることによってそのウォーカーを利用することができます:
wp_list_categories( array('walker' => new CategoryThumbnail_Walker()) );
ご覧のとおり、カテゴリごとに2つのクエリが追加されています。1つは最新の投稿を取得するためのもの、もう1つはその注目画像を取得するためのものです。
さらに出力をカスタマイズしたい場合は、end_el
クラスのstart_el
またはWalker_Category
のすべての機能をオーバーライドする必要があります。
重複した画像が表示されないようにするには、次のことを行う必要があります。
そのため、コードは次のようになります。
class CategoryThumbnail_Walker extends Walker_Category {
// A new element has been stumbled upon and has ended
function end_el( &$output, $category, $depth, $args ) {
// Output the standard link ending
parent::end_el( &$output, $category, $depth, $args );
// Get one post
$posts = get_posts( array(
// ...from this category
'category' => $category->cat_ID,
'numberposts' => 10
) );
// we'll record the seen images here
if ( !isset($this->images_seen) ) $this->images_seen = array();
foreach ( $posts as $post ) {
// Get its thumbnail and append it to the output
$featured = get_the_post_thumbnail( $post->ID, 'thumbnail', null );
// have we already seen this image?
if ( in_array($featured, $this->images_seen) ) continue;
else {
$this->images_seen []= $featured;
$output .= $featured;
break;
}
}
}
}
私はあなたがあなたがプラグインを使用したくないと言ったことを知っています、しかし、私はまだこれを推薦するつもりです: 分類法イメージ
あなたはいつでもあなたの関数ファイルにそれをハードコードすることができます。それは各カテゴリに特定の画像を追加するためのカテゴリに素晴らしい小さなインターフェースを追加し、あなたのページにその画像を得るためのいくつかの簡単な方法を提供します。カスタム分類法でも問題なく機能します。
私が取り組んでいるプロジェクトのために私があなたの最初のアプローチを試みていたのでそのプラグインについて言及します(ただそのカテゴリーの最新の投稿の特集画像を見せるために)しかし特定の投稿が複数のカテゴリーにあったとき何度も繰り返しファンキーに見えた。
各カテゴリの画像を持つことで、一貫した外観が保たれました。プラグインは使いやすいので、クライアントは問題なく画像を変更できます。私はまた、クライアントが新しいカテゴリーを作成したが、そのカテゴリーの最新の投稿のサムネイルを使用するように画像を追加できなかった場合のちょっとしたif文を書きました(ちょっと長めですがあなたはポイントを得ます)。 :
<?php
while ($my_query->have_posts()) : $my_query->the_post(); ?>
<!--thumbnail -->
<? /*asks if the category has an image...else use the post Thumbnail...then if not use the wedding.jpg */ ?>
<span class="lighten"><a href="<?= add_query_arg('t', strtolower($term->name), home_url( '/videos/' )); ?>">
<?php
$image_link = "<a href=".home_url( '/' ).(strtolower($term->name)).">";
$image = apply_filters( 'taxonomy-images-list-the-terms', '', array(
'taxonomy' => 'video_types',
'image_size' => 'detail',
'after' => '',
'after_image' => '',
'before' => '',
'before_image' => ''
)
);
if ( ! empty( $image ) ) {print $image;}
elseif ( has_post_thumbnail() ) {the_post_thumbnail(); }
else { ?>
<img src="<?php bloginfo('template_directory'); ?>/images/weddings.jpg" alt="<?php echo $term->name;?>" />
<?php } ?></a></span><!--#lighten -->
</div><!--#thumb -->
<?php
endwhile;
?>
<?php
}
}
}
wp_reset_query(); // Restore global post data stomped by the_post().
?>