在Woocommerce中为子类别和产品使用不同大小的缩略图

时间:2017-09-14 11:59:11

标签: wordpress woocommerce

我需要为子类别和产品设置不同大小的拇指,这可能吗?

我需要用拇指500 x 100显示子类别列表以及缩略图300 x 390的产品列表。

我已经设置了woocommerce>设置>产品>显示>产品图片,但我无法为子类别或产品设置不同的尺寸。

4 个答案:

答案 0 :(得分:2)

大声笑我开发了一个干净的解决方案:

function register_size_image() {
   add_image_size( 'category_thumb', 1170, 585,true );
   add_image_size( 'product_thumb', 750, 940,true );
}

add_action( 'after_setup_theme', 'register_size_image' );


function size_of_category_thumb($u)
{
    return array(1170, 585,true);
}
add_filter('subcategory_archive_thumbnail_size', 'size_of_category_thumb');

function size_of_product_thumb($u)
{
    return array(750, 940,true);
}
add_filter('single_product_archive_thumbnail_size', 'size_of_product_thumb');

答案 1 :(得分:0)

是的,这很有可能。请按照以下步骤进行操作 -

  1. 添加新图片尺寸。为此,请将以下代码添加到主题的functions.php

    add_image_size('your-custom-size',500,100); //您可以通过使用不同的值(根据需要)重复此行来添加多个图像大小

  2. 此步骤后上传图片。 如果您再次上传图片的费用很高,则可以使用this plugin

    这将创建包含所有指定尺寸的缩略图。

  3. 现在,在您的主题中,无论您使用的功能如何显示图像 -

    the_post_thumbnail('your-custom-size')或wp_get_attachment_image(42,'your-custom-size'),将图片大小名称作为参数传递。

答案 2 :(得分:0)

我决定覆盖woocommerce的功能,我把它放在我的functions.php

add_image_size( 'category_thumb', 500, 100,1 );
add_image_size( 'product_thumb', 300, 390,1 );

function woocommerce_subcategory_thumbnail( $category ) {
    $small_thumbnail_size       = 'category_thumb';
    $thumbnail_id           = get_woocommerce_term_meta( $category->term_id, 'thumbnail_id', true );

    if ( $thumbnail_id ) {
            $image        = wp_get_attachment_image_src( $thumbnail_id, $small_thumbnail_size );
            $image        = $image[0];
            $image_srcset = function_exists( 'wp_get_attachment_image_srcset' ) ? wp_get_attachment_image_srcset( $thumbnail_id, $small_thumbnail_size ) : false;
            $image_sizes  = function_exists( 'wp_get_attachment_image_sizes' ) ? wp_get_attachment_image_sizes( $thumbnail_id, $small_thumbnail_size ) : false;
    } else {
            $image        = wc_placeholder_img_src();
            $image_srcset = $image_sizes = false;
    }

    if ( $image ) {
            // Prevent esc_url from breaking spaces in urls for image embeds
            // Ref: https://core.trac.wordpress.org/ticket/23605
            $image = str_replace( ' ', '%20', $image );

            // Add responsive image markup if available
            if ( $image_srcset && $image_sizes ) {
                    echo '<img src="' . esc_url( $image ) . '" alt="' . esc_attr( $category->name ) . '" width="' . esc_attr( $dimensions['width'] ) . '" height="' . esc_attr( $dimensions['height'] ) . '" srcset="' . esc_attr( $image_srcset ) . '" sizes="' . esc_attr( $image_sizes ) . '" />';
            } else {
                    echo '<img src="' . esc_url( $image ) . '" alt="' . esc_attr( $category->name ) . '" width="' . esc_attr( $dimensions['width'] ) . '" height="' . esc_attr( $dimensions['height'] ) . '" />';
            }
    }
}

function woocommerce_get_product_thumbnail( $size = 'shop_catalog', $deprecated1 = 0, $deprecated2 = 0 ) 
{
      global $product;
//        $image_size = apply_filters( 'single_product_archive_thumbnail_size', $size );
    return $product ? $product->get_image( 'product_thumb' ) : '';
   }

它有效!

答案 3 :(得分:0)

function yourFunctionName()
{
    return array(1140, 300,true);
}
add_filter('subcategory_archive_thumbnail_size', 'yourFunctionName');

为我工作