仅为特色图像生成缩略图


10

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

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

目前,我知道的唯一编程方式是为每个图像上传生成缩略图,这是不希望的,因为我的大部分上传都是后期图像,而且我必须手动从服务器中删除很多图像。

与插件相比,我更喜欢自定义代码,但是可以接受插件。我知道那里有一些图像调整大小的插件,但是很长一段时间都没有更新(TimThumb,Dynamic Image Resizer)。

我在Wordpress SE上也找到了类似的问题,但是被接受的答案并不能真正解决我的问题。


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

(1)特色图片:WP自动生成的其他缩略图也可以。

(2)帖子内使用的图像:上传原始图像,并且不会生成任何其他尺寸。在上载图像之前,我将对其进行裁剪,调整大小和优化,然后选择一种尺寸可以满足我的需求。



1
首先,它说可能重复;其次,它可以帮助您解决问题,因为您可以使其适合您的需求;最后但并非最不重要的一点是,“ Dynamic Image Resizer”插件有一个答案,尽管它是一个不同的插件。
Nicolai

2
没有时间去研究它,但是您知道的是缩略图id-meta key:_thumbnail_id-,实际上应该足够了,save_post类似的钩子可能也是一种解决方法。但是请不要忘记,您帖子中的图像可以作为缩略图在​​其他帖子中使用,您可能需要一种机制来解决这一问题。
Nicolai

1
考虑到您写的内容,您不必介意特色图片的其他尺寸,我在想:如果您知道发布缩略图/特色图片是哪个附加图片,则可以删除其他图片的其他图片尺寸,方法是从该过程中排除特色图片。我之前提到了一种可能的限制/缺点。
Nicolai

1
建议:完全禁用大小调整add_filter('intermediate_image_sizes_advanced', '__return_false'),然后使用Glide
gmazzap

Answers:


2

此功能将通过临时注册图像尺寸,生成图像(如有必要)并删除尺寸来生成图像,因此不会以该尺寸创建新图像。

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


0

您可以看到此链接。有一些像

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)
}

2
我只需要为某些图像添加缩略图,而不需要为我上传的所有图像添加缩略图。基本上,当我上传图像时,我想控制是否创建缩略图。
imrek

但为什么?存储空间有问题吗?真的很难想象当有那么多存储空间可用时。
2015年

0

1.转到“仪表板”>“设置”>“媒体”
。2.取消选中“将缩略图裁剪为确切尺寸(通常缩略图是成比例的)”。3.
为所有输入输入0(为所有大小输入0)
。4.将它们添加到您的functions.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.确保functions.php中没有代码行以add_imge_size 注解开头:注意:我想您为缩略图使用了400x400的大小。现在,当您上传照片时,它将仅创建2个版本,而不是至少4个版本的照片。和以前一样。


0

为了防止WordPress仅为某些图像增加尺寸,您必须有一种方法来表明您要上传的图像仅用于特定目的。这必须在您上传之前进行。

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

但是为什么您不想要其他图像尺寸呢?您永远不知道何时要使用其他尺寸的任何图像。您是否担心存储空间?

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

我在这里阅读的大多数答案和评论都说明了如何针对图像大小自定义WordPress环境,但没有人提及有条件地进行操作。此外,它们都没有解决您必须在上传图片之前就表明该图片已被使用的事实。

如果您要补偿帖子中的图片太小或太大,则可以利用一些方法。

  1. CSS:您可以在样式表中添加条目,例如.post-entry img { max-width:200px; max-height:300px; },这比依赖图像本身的大小更通用,更有效-这是很多photoshop的时间。

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

请在WordPress上查看此文档:https : //codex.wordpress.org/Function_Reference/the_post_thumbnail


0

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

修改相关产品图片大小:阅读他的代码

它可以满足我的需求。对于您的问题,可以应用相同的逻辑。希望这可以帮助。

问候,

西奥

**增加:**

我找到了可行的解决方案。

步骤1:在functions.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
}

注意:'您的拇指',您稍后将使用此变量名称

步骤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的index.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>

第3步:重新生成缩略图,请使用插件https://wordpress.org/plugins/regenerate-thumbnails/

步骤4:刷新浏览器并检查DOM并比较值

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

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

<?php echo do_shortcode('[add_to_cart id="variable number?"]'); ?>

我希望这有帮助。

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

问候,

西奥

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.