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

如何在Woocommerce单品短描述下方显示预购可用日期

WooCommerce 预购日期移至单品短描述下方的解决方案

问题背景

需要将WooCommerce预购商品的可用日期移至单品短描述下方,尝试调用元数据的代码未生效;后续找到插件自带的显示函数,但替换hook后覆盖了短描述内容,需实现正确调整位置且保留原有短描述的效果。


方案一:修复元数据调用代码

原代码未生效可能是元数据键名不匹配、日期格式验证缺失或产品对象调用问题,以下是修正后的代码:

// 调整WooCommerce预购日期至短描述下方
add_filter( 'woocommerce_short_description', 'woo_add_preorder_date_after_excerpt', 20, 1 );

function woo_add_preorder_date_after_excerpt( $post_excerpt ) {
    // 仅在单品页且属于指定预购分类时执行
    if ( is_product() && has_term( array( 'Comic Book Pre-orders', 'DC Comics Pre-orders', 'Marvel Comics Pre-orders', 'Other Publisher Pre-orders' ), 'product_cat' ) ) {
        global $product;
        
        // 获取预购日期元数据,若插件使用其他键名需自行替换
        $preorder_datetime = $product->get_meta( '_wc_pre_orders_availability_datetime', true );
        
        // 验证日期有效性后格式化追加
        if ( ! empty( $preorder_datetime ) && strtotime( $preorder_datetime ) ) {
            $formatted_date = date( 'F d, Y', strtotime( $preorder_datetime ) );
            $post_excerpt .= '<p class="pre-order-date"><strong>Release date: </strong>' . $formatted_date . '</p>';
        }
    }
    return $post_excerpt;
}

注意事项

如果仍未生效,需确认插件存储预购日期的元数据键名:可通过查看WordPress数据库的wp_postmeta表,找到对应预购产品的日期字段,替换代码中的_wc_pre_orders_availability_datetime。


方案二:利用插件自带显示函数调整位置

插件默认通过woocommerce_single_product_summary action显示预购信息,直接替换为woocommerce_short_description会覆盖内容,正确做法是先移除默认action,再将显示函数挂到合适位置:

步骤1:移除插件默认的预购信息显示

// 移除插件默认的预购日期显示
add_action( 'init', 'remove_default_preorder_message' );

function remove_default_preorder_message() {
    // 获取预购插件实例,不同插件实例名可能不同,需根据插件调整
    global $wc_pre_orders;
    if ( isset( $wc_pre_orders ) ) {
        remove_action( 'woocommerce_single_product_summary', array( $wc_pre_orders, 'add_pre_order_product_message' ), 11 );
    }
}

步骤2:将预购信息挂到短描述之后

方式A:挂到产品摘要的对应优先级(推荐)

woocommerce_single_product_summary中短描述的优先级为20,因此设置更高优先级(如25)即可在短描述后显示:

// 将预购日期挂到短描述之后的位置
add_action( 'woocommerce_single_product_summary', 'add_preorder_after_short_description', 25 );

function add_preorder_after_short_description() {
    global $wc_pre_orders, $product;
    
    // 仅在预购产品且属于指定分类时显示
    if ( isset( $wc_pre_orders ) && $product->is_pre_order() && has_term( array( 'Comic Book Pre-orders', 'DC Comics Pre-orders', 'Marvel Comics Pre-orders', 'Other Publisher Pre-orders' ), 'product_cat' ) ) {
        $wc_pre_orders->add_pre_order_product_message();
    }
}

方式B:直接追加到短描述末尾

通过输出缓冲捕获插件函数的内容,追加到短描述后:

// 将预购日期追加到短描述末尾
add_filter( 'woocommerce_short_description', 'append_preorder_message_to_excerpt', 20, 1 );

function append_preorder_message_to_excerpt( $post_excerpt ) {
    global $wc_pre_orders, $product;
    
    if ( is_product() && isset( $wc_pre_orders ) && $product->is_pre_order() && has_term( array( 'Comic Book Pre-orders', 'DC Comics Pre-orders', 'Marvel Comics Pre-orders', 'Other Publisher Pre-orders' ), 'product_cat' ) ) {
        // 捕获插件函数输出
        ob_start();
        $wc_pre_orders->add_pre_order_product_message();
        $preorder_message = ob_get_clean();
        $post_excerpt .= $preorder_message;
    }
    return $post_excerpt;
}

注意事项

若无法获取插件实例,可查看插件代码中的实例获取方式,例如部分插件使用WC_Pre_Orders::instance(),此时需将代码中的global $wc_pre_orders替换为$wc_pre_orders = WC_Pre_Orders::instance();。


内容的提问来源于stack exchange,提问作者JapeNZ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 23:27:18