仅为特色图像生成缩略图

时间:2015-03-21 作者:imrek

我想知道是否有一种简单的方法(自定义代码或插件)来创建缩略图大小only for 我打算用作featured images (index.php、archive.php等),但不适用于帖子中使用的图像(single.php)。我的主要目标是通过不创建我的主题永远不会使用的缩略图来减少服务器空间的使用。

我的缩略图实际上只有两种尺寸,720px宽和328px宽,720px宽的特色图片(仅主页)也有328px宽的图片(用于archive.php和sidebar.php)

目前,我知道的唯一编程方式是generate thumbnails for every image upload, 这是不可取的,因为我上传的大部分都是post图像,我必须手动从服务器上删除很多图像。

我更喜欢自定义代码而不是插件,但插件是可以接受的。我知道有一些图像大小调整插件,但它们已经很久没有更新了(TimThumb,Dynamic Image Resizer).

我还发现了一个similar question 这里是Wordpress SE,但公认的答案并不能真正解决我的问题。

编辑:我需要删除或阻止帖子内图像的缩略图,而不是特色图像的缩略图,即:

(1)Featured image: WP自动生成的其他缩略图正常。

(2)Images used inside the posts: 上载原始图像,不生成任何其他大小。在上传之前,我会裁剪、调整和优化图像,其中一个大小可以满足我的需要。

5 个回复
SO网友:Mathew Tinsley

此函数将通过临时注册图像大小、生成图像(如有必要)和删除大小来生成图像,以便不会以该大小创建新图像。

function lazy_image_size($image_id, $width, $height, $crop) {
    // Temporarily create an image size
    $size_id = \'lazy_\' . $width . \'x\' .$height . \'_\' . ((string) $crop);
    add_image_size($size_id, $width, $height, $crop);

    // Get the attachment data
    $meta = wp_get_attachment_metadata($image_id);

    // If the size does not exist
    if(!isset($meta[\'sizes\'][$size_id])) {
        require_once(ABSPATH . \'wp-admin/includes/image.php\');

        $file = get_attached_file($image_id);
        $new_meta = wp_generate_attachment_metadata($image_id, $file);

        // Merge the sizes so we don\'t lose already generated sizes
        $new_meta[\'sizes\'] = array_merge($meta[\'sizes\'], $new_meta[\'sizes\']);

        // Update the meta data
        wp_update_attachment_metadata($image_id, $new_meta);
    }

    // Fetch the sized image
    $sized = wp_get_attachment_image_src($image_id, $size_id);

    // Remove the image size so new images won\'t be created in this size automatically
    remove_image_size($size_id);
    return $sized;
}
这是“懒惰”的,因为只有在需要图像时才会生成图像。

在您的用例中,您可以将其称为lazy_image_size 使用后期缩略图ID获取所需大小的图像。第一次调用时将生成图像。后续调用将获取现有映像。

要点:https://gist.github.com/mtinsley/be503d90724be73cdda4

SO网友:Jakir Hossain

你可以看到这个link. 有这样的例子

add_action( \'after_setup_theme\', \'baw_theme_setup\' );
function baw_theme_setup() {
  add_image_size( \'category-thumb\', 300 ); // 300 pixels wide (and unlimited height)
  add_image_size( \'homepage-thumb\', 220, 180, true ); // (cropped)
}

SO网友:Trang

1.进入仪表板>设置>媒体
2。取消选中“裁剪缩略图到精确尺寸”(通常缩略图是成比例的)
3。输入0表示所有输入(0表示所有大小)
4。将这些添加到您的函数中。php

// Enable support for Post Thumbnails, and declare sizes.
add_theme_support( \'post-thumbnails\' );
set_post_thumbnail_size( 400, 400, array("center","center") );
function fw_add_image_insert_override($sizes){
    // unset( $sizes[\'thumbnail\']);
    unset( $sizes[\'small\']);
    unset( $sizes[\'medium\']);
    unset( $sizes[\'large\']);
    return $sizes;
}
add_filter(\'intermediate_image_sizes_advanced\', \'fw_add_image_insert_override\' );
5。确保函数中没有代码行。php开始于add_imge_size Note:: 我想您的缩略图大小为400x400。现在,当您上载照片时,它将只创建2个版本,而不是像以前那样至少创建4个版本的照片。

SO网友:timholz

嗨,我也有类似的问题。WooCommerce将目录图像用于目录和相关产品图像。这是不理想的,因为你失去了图像质量或速度。因此,我尝试为我的相关产品添加第四个图像类别。Howdy McGee解决了这个问题。请看Howdy McGees的回答:

修改相关产品图像大小:read his code!

它非常适合我的需要。对于您的问题,可以应用相同的逻辑。希望这有帮助。

当做

西奥

**添加内容:**

我找到了一个有效的解决方案。

Step 1: 在函数中指定新的缩略图大小。php。检查参考号:wp codex!

/*add your custom size*/
add_action( \'after_setup_theme\', \'your_theme_setup\' );
function your_theme_setup() {
add_image_size( \'your-thumb\', 123, 123, true );//insert your values
}
注意:“您的拇指”,稍后将使用此变量名

Step 2: 然后,在要显示特色产品的任何位置添加以下代码:

    <h1>featured products</h1> 
    <div class="woocommerce">
    <ul class= "products">

    <?php
    $args = array( \'post_type\' => \'product\', \'meta_key\' => \'_featured\',\'posts_per_page\' => 4,\'columns\' => \'4\', \'meta_value\' => \'yes\' );
     $loop = new WP_Query( $args );

     while ( $loop->have_posts() ) : $loop->the_post(); global $product; ?>

                    <li class="product post-<?php echo get_the_ID(); ?>">    
                        <a href="<?php echo get_permalink( $loop->post->ID ) ?>" title="<?php echo esc_attr($loop->post->post_title ? $loop->post->post_title : $loop->post->ID); ?>">

                            <?php woocommerce_show_product_sale_flash( $post, $product ); ?>
                            <?php if (has_post_thumbnail( $loop->post->ID )) echo get_the_post_thumbnail($loop->post->ID, \'your-thumb\'); else echo \'<img src="\'.woocommerce_placeholder_img_src().\'" alt="Placeholder" width="123px" height="123px" />\'; ?></a>
                            <h3><?php the_title(); ?></h3><span class="price"><?php echo $product->get_price_html(); ?></span>

                    </li>

    <?php endwhile; ?>
    <?php wp_reset_query(); ?> 
    </ul>
    </div>
参考和信息:(www.haloseeker.com/display-woocommerce-featured-products-without-a-shortcode/)

我把它放在索引中。wootheme mystyle的php(我的主页)。不要忘记在网上使用“拇指”:

<?php if (has_post_thumbnail( $loop->post->ID )) echo get_the_post_thumbnail($loop->post->ID, \'your-thumb\'); else echo \'<img src="\'.woocommerce_placeholder_img_src().\'" alt="Placeholder" width="123px" height="123px" />\'; ?></a>
Step 3: 重新生成缩略图,使用插件https://wordpress.org/plugins/regenerate-thumbnails/

Step 4: 刷新浏览器,检查DOM并比较值

根据您的主题,您可以更改标记和类名。我测试了上述方法,效果很好。

到目前为止,我唯一做不到的就是添加“添加到购物车”按钮,因为我不知道如何将变量写入“添加到购物车”按钮的快捷代码中。代码如下:

<?php echo do_shortcode(\'[add_to_cart id="variable number?"]\'); ?>
我希望这有帮助。

当然,有一种更优雅的方法可以做到这一点。例如,函数中有一个函数。php

当做

西奥

SO网友:aequalsb

为了防止WordPress仅为某些图像制作额外的大小,您必须有一种方法来指示您要上载的图像将仅用于特定目的。这必须在您上载之前发生。

由于在上传操作期间没有这样的界面(开箱即用)来指示这样的选项,因此您无法阻止额外的图像生成,除非有插件添加了此功能。

但是,你为什么不想要额外的图像尺寸呢?当您想使用不同大小的图像时,您永远不知道何时会遇到这种情况。您是否担心存储空间?

您不能像这样使用自己的特定尺寸规格吗?the_post_thumbnail( array(100, 100) );

我在这里读到的大多数答案和评论都解释了如何为图像大小定制WordPress环境,但没有一个提到有条件地这样做。此外,它们都不能解决这样一个事实:在上传图像之前,您必须能够指示图像的用途。

如果你想弥补帖子中太小或太大的图片,你可以利用一些东西。

CSS:您可以在样式表中添加条目,例如.post-entry img { max-width:200px; max-height:300px; }, 这比依赖图像本身的大小更为普遍和有效,这需要大量的photoshop时间。

模板:您可以更改生成posts HTML输出的模板文件,并指定如下图像大小:

查看WordPress上的文档:https://codex.wordpress.org/Function_Reference/the_post_thumbnail

结束

相关推荐

定义`GET_POST_QUALUALY_Images`的大小,它们似乎已调整为150x150

我正在使用get_post_gallery_images 它可以输出150x150的图像。它看起来不需要大小参数,所以我假设它只会显示最大的图像,或者最好是我定义的一个大小。150x150太小了,有没有地方可以声明我想要多大尺寸的画廊图片?例如,我正在做:<?php $gallery = get_post_gallery_images( $post ); foreach ($gallery as $img) { ?> <li><img src