哪个钩子为Woocommerce单品缩略图src链接替换

时间:2018-02-15 09:15:05

标签: php wordpress woocommerce product hook-woocommerce

是否有任何钩子可以更改单个产品缩略图?我在SO以及互联网上搜索了很多,但没有运气。

使用缩略图'我并不是指改变当前图像的大小,但我想根据某种情况用新图像完全更改/替换产品图像(缩略图)。

public function pn_change_product_image_link( $html, $post_id ){

    $url =  get_post_meta( $post_id );
    $alt = get_post_field( 'post_title', $post_id ) . ' ' .  __( 'thumbnail', 'txtdomain' );
    $attr = array( 'alt' => $alt );
    $attr = apply_filters( 'wp_get_attachment_image_attributes', $attr, NULL );
    $attr = array_map( 'esc_attr', $attr );
    $html = sprintf( '<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/3/38/WP_Suspension_logo.svg/2000px-WP_Suspension_logo.svg.png"', esc_url($url) );
    foreach ( $attr as $name => $value ) {
        $html .= " $name=" . '"' . $value . '"';
    }
    $html .= ' />';
    return $html;
}

这就是我现在正在做的事情,但却引发了错误。

过滤,挂钩:

post_thumbnail_html

2 个答案:

答案 0 :(得分:3)

在模板single-product/product-image.php上,您可以看到在单个产品页面上显示图像的所有源代码。

您可以使用我在评论中建议的woocommerce_single_product_image_thumbnail_html,但它并不是真正有用,因为您要为主图像设置自定义源链接。

在模板源代码中,您将看到它使用WordPress函数wp_get_attachment_image_src(),在其源代码中,您将看到可以使用过滤器挂钩'wp_get_attachment_image_src',这非常方便你想做什么......

现在您可以在其上构建代码:

add_filter( 'wp_get_attachment_image_src', array( $this, 'pn_change_product_image_link'), 50, 4 );
public function pn_change_product_image_link( $image, $attachment_id, $size, $icon ){
    if( ! is_product() ) return $image; // Only on single product pages
    if( $size == 'shop_thumbnail' ) return $image; // Not for gallery thumbnails (optional)

    // Your source image link
    $src = 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/38/WP_Suspension_logo.svg/2000px-WP_Suspension_logo.svg.png';
    $width  = ''; // <== (optional) define the width
    $height = ''; // <== (optional) define the height
    $image  = array( $src, $width, $height );

    return $image;
}

此代码包含任何带有构造函数的插件文件(但不在function.php文件中)

代码经过测试并有效。

  

您可以使用$attachment_id函数参数动态定位不同的图像源...

主题function.php文件版本

只需替换:

add_filter( 'wp_get_attachment_image_src', array( $this, 'pn_change_product_image_link'), 50, 4 );

通过这个

add_filter( 'wp_get_attachment_image_src', 'pn_change_product_image_link', 50, 4 );

此代码位于您的活动子主题(或主题)的function.php文件中。

答案 1 :(得分:-1)

你可以试试这个 -

// define the woocommerce_single_product_image_thumbnail_html callback 
function filter_woocommerce_single_product_image_thumbnail_html( $sprintf, $post_id ) { 
    // make filter magic happen here... 
    // here you have product id too, fetch your data or re evalute things and return final image HTML
    return $sprintf; 
}; 

// add the filter 
add_filter( 'woocommerce_single_product_image_thumbnail_html', 'filter_woocommerce_single_product_image_thumbnail_html', 10, 2 );