WooCommerce Simple Auctions仅剩余3分钟内出价加时功能调试问题
问题根源
你的加时逻辑触发异常,核心问题是剩余秒数的计算方式错误:$interval->format("%s") 只会返回时间间隔的秒数值部分,不会将小时、分钟换算为总秒数。比如剩余4分05秒时,该方法返回的是5而非245,自然会命中$remaining_seconds < 180的判断,导致大于3分钟时仍然加时。
修复后代码
add_action( 'woocommerce_simple_auctions_outbid', 'woocommerce_simple_auctions_extend_time', 50 ); add_action( 'woocommerce_simple_auctions_proxy_outbid', 'woocommerce_simple_auctions_extend_time', 50 ); function woocommerce_simple_auctions_extend_time($data){ $product = wc_get_product( $data['product_id'] ); // 高版本WooCommerce建议用wc_get_product替代已废弃的get_product if ('auction' === $product->get_type() ){ $end_time = new DateTime($product->get_auction_dates_to()); $current_time = new DateTime(); // 直接用时间戳相减得到剩余总秒数,无单位换算误差 $remaining_seconds = $end_time->getTimestamp() - $current_time->getTimestamp(); // 仅当竞拍未结束、且剩余时长小于3分钟时触发加时 if($remaining_seconds > 0 && $remaining_seconds < 180) { $end_time->add(new DateInterval('PT600S')); update_post_meta( $data['product_id'], '_auction_dates_to', $end_time->format('Y-m-d H:i:s') ); } } }
修改说明
- 替换了错误的秒数计算逻辑,直接用时间戳相减得到完整的剩余总秒数,避免了单位换算错误
- 新增了
$remaining_seconds > 0的判断,避免已经结束的竞拍被异常重置加时 - 把废弃的
get_product方法替换为WooCommerce官方推荐的wc_get_product,兼容性更好 - 若站点存在时区偏差,可在创建DateTime对象时指定站点时区,比如
new DateTime('now', new DateTimeZone('Asia/Shanghai'))
内容的提问来源于stack exchange,提问作者Tim Darius
相关产品推荐
相关产品推荐

