如何从这个循环中的帖子附件中获取缩略图

时间:2012-03-30 作者:Nesha

我使用此代码根据查看次数显示最受欢迎的帖子,但我在帖子内容中没有图像我通过附件(图库)将所有图像附加到帖子

如何将此“thimthumb”缩略图替换为列出帖子的第一个附件?

<div id="popular" class="widgets">
            <?php _e(\'<h2>Popular</h2>\',\'iphoto\');?>
            <ul>
            <?php
            $paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
            $args = array(
                \'meta_key\' => \'views\',
                \'orderby\'   => \'meta_value_num\',
                \'paged\' => $paged,
                \'order\' => DESC,
                \'showposts\' => 9
            );
            query_posts($args);
                while (have_posts()) : the_post();
                $output = preg_match(\'/<img.+src=[\\\'"]([^\\\'"]+)[\\\'"].*>/i\', $post->post_content, $imgs); 
                $cnt = count($imgs);
            ?>
            <li>
            <?php if ( $cnt > 0 ) {  ?>
            <a class="same_cat_posts_img" href="<?php the_permalink() ?>" title="<?php the_title(); ?>"><?php echo \'<img src="\'.get_bloginfo(\'template_url\').\'/timthumb.php?src=\'.$imgs[1].\'&amp;w=60&amp;h=60&amp;zc=1" />\';?></a>
            <?php } else {  ?>
            <a class="same_cat_posts_img" href="<?php the_permalink() ?>" title="<?php the_title(); ?>"><img alt="<?php the_title(); ?>" src="<?php bloginfo(\'template_url\'); ?>/timthumb.php?src=<?php bloginfo(\'template_url\'); ?>/images/default.jpg&amp;w=60&amp;h=60&amp;zc=1" /></a>
            <?php } ?>
            </li>
            <?php endwhile; wp_reset_query(); ?>
            </ul>
            <div class="clear"></div>

2 个回复
SO网友:Simon Blackbourn

如果我正确理解了您的问题,您希望检索每篇文章的第一个附加图像(&M);使用缩略图大小,而不是解析嵌入图像的内容&;使用timthumb?

如果是这样,请在“媒体选项”页面中将缩略图大小设置为所需大小(60x60),确保已按所需顺序拖放附件,然后使用以下代码(请注意,我不喜欢query\\u帖子,我更喜欢使用get\\u帖子)。

$args = array(
        \'meta_key\'       => \'views\',
        \'orderby\'        => \'meta_value_num\',
        \'order\'          => \'DESC\',
        \'posts_per_page\' => 9
    );

$popular_posts = get_posts( $args );

if ( $popular_posts ) {

    echo \'<h2>Popular Posts</h2>\';
    echo \'<ul>\';

    foreach ( $popular_posts as $popular_post ) {

        $kids_args = array(
                \'post_parent\'    => $popular_post->ID,
                \'post_type\'      => \'attachment\',
                \'post_status\'    => null,
                \'post_mime_type\' => \'image\',
                \'orderby\'        => \'menu_order\',
                \'order\'          => \'ASC\',
                \'posts_per_page\' => 1
                );

        $kids = get_posts( $kids_args );

        echo \'<li>\';
        if ( $kids ) {
            foreach ( $kids as $kid ) {
                $img = wp_get_attachment_image_src( $kid->ID );
                printf( \'<a href="%s" title="%s"><img src="%s" width="%s" height="%s"></a>\',
                    get_permalink( $popular_post->ID ),
                    esc_attr( get_the_title( $popular_post->ID ) ),
                    $img[0],
                    $img[1],
                    $img[2]
                    );
            }
        } else {
            printf( \'<a href="%s" title="%s"><img src="%s" width="%s" height="%s"></a>\',
                get_permalink( $popular_post->ID ),
                esc_attr( get_the_title( $popular_post->ID ) ),
                get_bloginfo( \'template_url\' ) . \'/images/default.jpg\',
                60,
                60
                );
        }
        echo \'</li>\';

    }

    echo \'</ul>\';

}
我是凭记忆写的,现在无法测试,所以希望它能工作!

SO网友:keatch

你必须去拿all the attachments via get_posts 然后随心所欲地设计风格。请参见我链接的页面中的示例。

更新:您必须用以下代码替换代码:

     <?php if ( $cnt > 0 ) {  ?>
                <a class="same_cat_posts_img" href="<?php the_permalink() ?>" title="<?php the_title(); ?>"><?php echo \'<img src="\'.get_bloginfo(\'template_url\').\'/timthumb.php?src=\'.$imgs[1].\'&amp;w=60&amp;h=60&amp;zc=1" />\';?></a>
                <?php } else {  ?>
                      <? $args = array( \'post_type\' => \'attachment\', \'numberposts\' => 1, \'post_status\' => null, \'post_parent\' => $post->ID ); 
                       $attachments = get_posts($args);
                       if ($attachments) {
                         foreach ( $attachments as $attachment ) {
                       ?>
                         <a class="same_cat_posts_img" href="<?php the_permalink() ?>" title="<?php   the_title(); ?>">
                         <?php echo \'<img src="\'.get_bloginfo(\'template_url\').\'/timthumb.php?src=\'.<?  wp_get_attachment_url( $attachment->ID );.\'&amp;w=60&amp;h=60&amp;zc=1" />\';?></a>
                        <?    
                        }
                       }
                 } ?>
是的,对于你做的每一篇帖子,你都会进行额外的查询。为了缓解您的问题,您可以使用transient或DB Caching plugin / Caching plugin

结束

相关推荐

How to handle thumbnails

我应该如何处理帖子缩略图?大多数人是否将它们放在自定义字段中?使用插件?ThemeForest上的主题如何处理此问题?不同的主题也会有不同的尺寸要求?所以从一个主题转移到下一个主题可能会导致很多问题?缩略图也可能有不同的大小