Изменение размера изображения по размеру миниатюры в WordPress - PullRequest
0 голосов
/ 21 октября 2010

Я создаю свою первую тему 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 ]

1 голос
/ 21 октября 2010

Все, что вам нужно, это захватить идентификатор записи для первого изображения, которое вы хотите, а затем запустить его через 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

Надеюсь, это поможет. Не похоже, что у вас возникли проблемы с получением почтового идентификатора для первой фотографии, поэтому я не совсем понял, как его получить.

0 голосов
/ 23 октября 2010

вы можете использовать функцию get_the_post_thumbnail или использовать генератор миниатюр php, например timbthumb

            <?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 ?>">
0 голосов
/ 21 октября 2010

Спасибо Джону Форду за то, что он указал мне правильное направление, я смог понять это.

Запрос в моей функции немного изменился, вместо идентификатора 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" />
0 голосов
/ 21 октября 2010

Вы можете использовать GD или другую библиотеку изображений для программной манипуляции с изображением.Однако было бы лучше реализовать операцию для создания файла миниатюр, когда изображение загружено.Вы можете динамически генерировать миниатюру каждый раз, когда страница загружается, но такая операция может быть относительно вычислительно дорогой и привести к ненужной нагрузке на систему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...