如何使WooCommerce指定过滤/函数仅在结账页面生效不影响首页缩略图
修复方案:仅在WooCommerce结账页调整购物车商品缩略图尺寸
错误原因
你之前的代码全局生效、is_page判断失效主要有两个原因:
- WooCommerce结账页有官方专属条件判断函数
is_checkout(),比手动用is_page填页面ID/别名的兼容性更强,不会因为后台修改结账页别名/ID导致判断失效 - 你之前大概率是直接在根目录挂载过滤器,此时页面条件还未完成初始化,
is_page判断无法正常返回正确结果,导致规则全局生效
修复代码
首先删除你之前添加的全局缩略图修改代码,将以下代码添加到子主题的functions.php文件中即可:
// 仅在结账页调整购物车商品缩略图尺寸 add_action( 'template_redirect', 'custom_adjust_checkout_cart_image_size' ); function custom_adjust_checkout_cart_image_size() { // 非结账页直接退出,不挂载后续过滤器 if ( ! is_checkout() ) { return; } add_filter( 'woocommerce_cart_item_thumbnail', 'custom_checkout_cart_item_image', 10, 3 ); function custom_checkout_cart_item_image( $product_image, $cart_item, $cart_item_key ) { $product = $cart_item['data']; // 按需修改数组参数:宽、高、是否强制裁剪 $custom_size = array( 100, 100, true ); return $product->get_image( $custom_size ); } }
注意事项
- 代码中的
array(100, 100, true)为自定义尺寸参数,你可以替换为自己需要的数值,第三个参数为true代表强制裁剪为对应宽高,为false则按比例缩放不裁剪 - 如果你需要调用已经注册的图片尺寸别名,也可以把
$custom_size的值替换为别名,比如'thumbnail'、'medium'等 - 修改完成后需要清空站点缓存、浏览器缓存后再测试,避免缓存导致效果不生效
内容的提问来源于stack exchange,提问作者Ashish Agarwal
相关产品推荐
相关产品推荐

