在 WooCommerce 存档页面上悬停时切换产品图像

Posted

技术标签:

【中文标题】在 WooCommerce 存档页面上悬停时切换产品图像【英文标题】:Switch product image on hover on WooCommerce archive page 【发布时间】:2020-09-17 04:19:04 【问题描述】:

有没有办法(可能通过functions.php)在woocommerce商店(存档页面)中使用产品的第一个附加图库图像来更改产品图像?我找不到如何针对两者。我想一定是这样的:

add_action( 'woocommerce_shop_loop_item', 'change_image_on_hover', 10 );
function change_image_on_hover() 
     $product->get_gallery_image_ids();
     print 'woocommerce_gallery_image';

【问题讨论】:

【参考方案1】:

假设您的安装是某种标准的 WooC 安装,我认为您想要做的是利用循环项目操作挂钩来添加所需的悬停图像。

add_action( 'woocommerce_before_shop_loop_item_title', 'add_on_hover_shop_loop_image' ) ; 

function add_on_hover_shop_loop_image() 

    $image_id = wc_get_product()->get_gallery_image_ids()[1] ; 

    if ( $image_id ) 

        echo wp_get_attachment_image( $image_id ) ;

     else   //assuming not all products have galleries set

        echo wp_get_attachment_image( wc_get_product()->get_image_id() ) ; 

    


初步 CSS:

/* CUSTOM ON-HOVER IMAGE */
.woocommerce ul.products li.product a img  
    /* FORMAT ALL IMAGES TO FILL EQUIVALENT SPACE,
    to remove jitter on replacement */
    height: 150px;
    width: 150px;
    object-fit: cover;
    padding: 0;
    margin: 0 auto;

.woocommerce ul.products li.product a img:nth-of-type(2) 
    display: none;

.woocommerce ul.products li.product a:hover img:nth-of-type(2) 
    display: block

.woocommerce ul.products li.product a:hover img:nth-of-type(1) 
    display: none;

以上将获得您想要的一种商店档案展示,以实现简单的替换,但您可能需要或想要为您的网站定制许多细节。例如,150x150px 可能不适合您的主题。或者你可能决定你需要用不同的集合完全替换默认图像,为了获得特定的过渡效果,或者为了与你网站上使用的其他效果保持一致,你需要一种不同的 CSS 方法,并且可能到 javascript

【讨论】:

太棒了,这很有效,非常感谢。不幸的是,它打印了 150x150px 版本的画廊图像。你知道用 600x600px 获得更好质量的图像吗? CSS 不是解决方案。 当然 - wp_get_attachment_image() 默认为“缩略图”。如果您的主题已将 600x600 注册为图像大小(“中”?、“大”?),则只需将其添加为第二个参数。或尝试 'array('600', '600') (并适当调整 CSS) - 更多示例请参见 developer.wordpress.org/reference/functions/… (“中”和“大”更可能在安装设置/媒体中设置) 获取第一张画廊图片我认为应该是:get_gallery_image_ids()[0] 我认为 [0] 图像是特色图像......但我已经有一段时间没有回答这个问题了。如果你还没有这样做,我会稍后再检查。 【参考方案2】:

如果您没有删除 WooCommerce 的默认操作和过滤器,您可以使用该插件。

这里是插件link

【讨论】:

非常感谢,总的来说这个插件是可以工作的,但是如果你把鼠标放在图片上,它会无限循环地前后翻转,而不是只有当你移开鼠标时才会向后翻转。 【参考方案3】:

CSS 可以检测用户何时将鼠标悬停在图像上。您是否可以加载两张图片,然后在检测到悬停时关闭一张再打开一张?

代码如下所示:

html

<a id="home">
<img class="image_on" src="images/productImage.png"" />
<img class="image_off" src="images/galleryImage.png" />
</a>

CSS:

.image_off, #home:hover .image_on
     display:none

.image_on, #home:hover .image_off
     display:block

如果这不起作用,请查看 this thread 以了解使用 js/jquery 的其他解决方案

【讨论】:

【参考方案4】:

这是你要找的吗?

WooCommerce Product Image Flipper

它似乎还没有通过最新的 3 个主要 Wordpress 版本进行测试。你还是可以试试看的。

这个thread 似乎也解释了你的需要。

【讨论】:

【参考方案5】:

使用此代码运行良好 | Wocomerce 最新版本 在 WooCommerce 存档页面上悬停时切换产品图片

add_action( 'woocommerce_before_shop_loop_item_title', 'add_on_hover_shop_loop_image' ) ; 

function add_on_hover_shop_loop_image() 

    $image_id = wc_get_product()->get_gallery_image_ids()[0] ; 

    if ( $image_id ) 

        echo wp_get_attachment_image( $image_id ) ;

     else   //assuming not all products have galleries set

        echo wp_get_attachment_image( wc_get_product()->get_image_id() ) ; 

    


【讨论】:

【参考方案6】:

使用这个你会得到产品的全尺寸图片

add_action('woocommerce_before_shop_loop_item_title', 'add_on_hover_shop_loop_image');

函数 add_on_hover_shop_loop_image()

$image_id = wc_get_product()->get_gallery_image_ids()[1] ; 
$img_size = wc_get_image_size( $image_id, 'full' );

if ( $image_id ) 

    echo wp_get_attachment_image( $image_id, 'full' ) ;

 else   //assuming not all products have galleries set

    echo wp_get_attachment_image( wc_get_product()->get_image_id() ) ; 


【讨论】:

以上是关于在 WooCommerce 存档页面上悬停时切换产品图像的主要内容,如果未能解决你的问题,请参考以下文章

Woocommerce 在悬停图像叠加层上显示产品标题

Woocommerce - 在存档页面上重新定位标题

php [在存档页面上显示产品尺寸]在存档页面上显示WooCommerce 3.0+产品尺寸,位于产品标题下方。

php [在存档页面上显示产品尺寸]在存档页面上显示WooCommerce 3.0+产品尺寸,位于产品标题下方。

php [在存档页面上显示产品尺寸]在存档页面上显示WooCommerce 3.0+产品尺寸,位于产品标题下方。

在 WooCommerce 存档产品页面上更改分页基础 slug