我有一个常规的WordPress小部件,可以使用WP_Query
我正试图找到一种方法,将第一篇文章的缩略图显示为整个widget div的背景图像。下面是我需要的视觉表示:
我现在使用的代码为每篇文章显示缩略图:
<div class="widget-wrap-sidebar">
<div class="my-widget">
<?php
// THE QUERY
?>
<?php
global $wp_query;
$metakey = \'post_views_count\';
$recent_posts = new WP_Query( array( \'cat\' => $categories, \'orderby\' => $orderby, \'meta_key\' => $metakey, \'posts_per_page\' => $posts ) );
$temp_query = $wp_query;
$wp_query = null;
$wp_query = $recent_posts;
?>
<?php while( $recent_posts->have_posts() ): $recent_posts->the_post(); ?>
<div class="big-image">
<?php if ( \'\' != get_the_post_thumbnail() ) : ?>
<?php $thumbnail_url = get_the_post_thumbnail( get_the_ID(), \'big-image\' ); ?>
<?php echo wp_kses_post( $thumbnail_url ); ?>
<?php endif;?>
</div>
<div class="the-title">
<h3>
<a href="<?php echo get_permalink(); ?>" title="<?php echo get_the_title(); ?>">
<?php echo get_the_title(); ?>
</a>
</h3>
</div>
<?php endwhile; ?>
<?php wp_reset_query(); ?>
</div><?php // end of my-widget ?>
</div><?php // end of widget-wrap-sidebar ?>
基本上,我需要一种方法来调用第一个缩略图URL
widget-wrap-sidebar
分区类似于:
<div class="widget-wrap-sidebar" style="background-image:url(\'<?php echo $thumbnail_url ?>\')">
然而,我无法使上述代码正常工作
*请不要考虑我可以轻松完成的CSS部分。
最合适的回答,由SO网友:birgire 整理而成
注意事项:
只需使用the_title()
; 而不是echo get_the_title();
使用the_title_attribute()
用于标题属性无需覆盖全局$wp_query
使用辅助查询时然后使用wp_reset_postdata()
在二次查询循环之后使用the_permalink()
这逃脱了永久的束缚,而不是未被超越的echo get_permalink();
这里有has_post_thumbnail()
检查是否设置了帖子缩略图请注意get_the_post_thumbnail()
返回后期缩略图图像标记,而不是url退房the_post_thumbnail_url()
获取缩略图url要检查第二个最近的帖子循环中的第一个项目,可以使用if( 0 === $recent_posts->current_post ){
在这个循环中
$recent_posts = new WP_Query( $args );
if( $recent_posts )
{
$thumbnail_url = \'https://example.tld/default.png\'; // fallback post thumbnail url
$data = [];
// Loop
while( $recent_posts->have_posts() )
{
$recent_posts->the_post();
// Post thumbnail from the first post
if( 0 === $recent_posts->current_post )
$thumbnail_url = get_the_post_thumbnail_url( get_the_ID(), \'medium\' );
// Collect post titles
$data[] = the_title(
sprintf(
\'<div class="title"><h3><a href="%s">\',
esc_url( get_permalink() )
), // before
\'</a></h2></div>\', // after
false // echo
);
}
wp_reset_postdata();
// Output
if( $data )
printf(
\'<div class="widget-wrap-sidebar" style="background-image: url(%s)">
<div class="my-widget">%s</div>
</div>\',
esc_url( $thumbnail_url ),
join( \'\', $data )
);
}
希望有帮助。