代码之家  ›  专栏  ›  技术社区  ›  Marcus

在WordPress中将图片大小调整为缩略图大小

  •  0
  • Marcus  · 技术社区  · 14 年前

    我正在构建我的第一个WordPress主题,我被一些东西卡住了。

    在我的functions.php中有一个名为get_first_photo()的函数,它会捕获每个帖子上传的第一张图片,并将其放到博客存档页面上。它工作正常,但它加载了完整大小的图像并使用CSS调整大小。我宁愿它加载的图像在它的缩略图大小设置在WP控制面板,所以我没有图像大小的开销。有什么办法做到这一点吗?

    下面是functions.php中的代码:

    function get_first_photo($id) {
        global $wpdb;
        return $wpdb->get_var("SELECT guid FROM wp_posts WHERE post_parent = $id AND post_mime_type = 'image/jpeg' ORDER BY id DESC LIMIT 1");  
    }
    

    以下是博客模板:

    <?php
    
    get_header(); ?>
    <div id="content" class="blog">
        <div id="body">
            <h3 class="title" id="blog">The Ned Leary Blog</h3>
    <?php if (have_posts()) : 
    query_posts("category_name=blog");
    while (have_posts()) : 
    the_post(); 
    $first_photo = get_first_photo(get_the_ID());
    ?>
            <div class="snippet">
    <?php if (!empty($first_photo)) : ?>
                <img src="<?php echo $first_photo; ?>" alt="Thumbnail" />
    <?php else : ?>
                <img src="<?php bloginfo('url'); ?>/images/blog/gravatarBig.jpg" alt="Ned Leary Gravatar" />
    <?php endif; ?>
                <div class="details">
                    <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
                    <h5><?php the_time('D, M j, Y') ?> by <?php the_author('') ?> | <?php comments_popup_link('0 Comments', '1 Comment', '% Comments'); ?></h5>
                    <?php the_excerpt(); ?>
                    <h4><a href="<?php the_permalink(); ?>">Read more&hellip;</a></h4>
                </div>
            </div><!--end snippet-->
    <?php endwhile; endif;// end of the loop. ?>
        </div><!--end body-->
    <?php get_sidebar(); ?>
    </div><!--end content-->
    <?php get_footer(); ?>
    
    4 回复  |  直到 14 年前
        1
  •  1
  •   awats    14 年前

    你只需要为你想要的第一张图片获取post ID,然后通过“get_the_post_thumbnail()”运行它。

    $first_photo = post id of the first image;    
    echo get_the_post_thumbnail( $first_photo );
    

    如果你喜欢的话,你也可以拉自己的自定义缩略图大小。只要你用的是wordpress 2.9+。

    只需将其添加到functions.php

    add_theme_support( 'post-thumbnails' ); //enable thumbs
    add_image_size( 'mycustom-preset', width you want, height you want); //custom size
    

    然后运行相同的功能,但调用新的预设。。。

    $first_photo = post id of the first image;    
    echo get_the_post_thumbnail( $first_photo, 'mycustom-preset' );
    

    http://codex.wordpress.org/Function_Reference/get_the_post_thumbnail

    http://codex.wordpress.org/Function_Reference/add_image_size

    希望能有所帮助。看起来你在获取第一张照片的post id时并没有遇到问题,所以我并没有真正介绍如何获取它。

        2
  •  0
  •   jay.lee    14 年前

    你可以用 GD 或其他一些图像库以编程方式操作图像。但是,最好在上载图像时实现创建缩略图文件的操作。您可以让它在每次加载页面时动态生成一个缩略图,但这样的操作可能在计算上相对昂贵,并且会给ssystem带来不必要的负载。

        3
  •  0
  •   Marcus    14 年前

    多亏约翰·福特给我指出了正确的方向,我才弄明白这一点。

    我的函数中的查询略有变化,获取post id而不是guid。

    function get_first_photo($id) {
        global $wpdb;
        return $wpdb->get_var("SELECT id FROM aire_posts WHERE post_parent = $id AND post_mime_type = 'image/jpeg' ORDER BY id DESC LIMIT 1");  
    }
    

    然后我不得不在我的主题文件中添加另一行:

    $first_photo = get_first_photo(get_the_ID());
    $thumb = wp_get_attachment_image_src($first_photo);
    

    最后,我更新了我的图片src:

    <img src="<?php echo $thumb[0]; ?>" alt="Thumbnail" />
    
        4
  •  0
  •   user961435    14 年前

    您可以使用get_the_post_thumbnail函数或使用像timbthumb这样的php缩略图生成器

                <?php $images = get_children( array( 'post_parent' => $page->ID, 'post_type' => 'attachment', 'post_mime_type' => 'image', 'orderby' => 'menu_order', 'order' => 'ASC', 'numberposts' => 999 ) );
            if ( $images ) {
                $total_images = count( $images );
                $image = array_shift( $images );
                $thumbnail = wp_get_attachment_image_src($image->ID, array(225,125) );
                $thumbnail = $thumbnail[0]; }
                ?>
                 <img class="size-thumbnail alignleft" src="<?php echo $thumbnail; ?>" alt="<?php echo $page->post_title ?>">