You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 17:45:04