如何使用 Polylang 使订单编号连续并为每种语言使用不同的前缀

问题描述 投票:0回答:1

大家早上好,新年快乐。我需要一些关于如何进行以下实施的建议。对于我使用 Polylang 作为插件的多种语言网站,我需要对订单进行单独且连续的编号。例如:意大利语:IT-2024-01、IT-2024-02、IT-2024-03 德语:DE-2024-01、DE-2024-02、DE-2024-03。感谢您的有趣见解。 现在我只是用这个片段来表示意大利语:

/**

  • 订单前缀 */

add_filter( 'woocommerce_order_number', 'change_woocommerce_order_number' );

函数change_woocommerce_order_number($ order_id){ $order = wc_get_order( $order_id );

if ( $order && $order->get_date_created() ) {
    $order_year = $order->get_date_created()->format( 'Y' );
    $prefix = 'IT-' . $order_year . '-';
    $new_order_id = $prefix . $order_id;
    return $new_order_id;
}

return $order_id;

}

衷心感谢!

javascript php wordpress woocommerce polylang
1个回答
0
投票

我已分两部分解决了该问题。

  1. 首先我使用polylang函数获取当前语言

  2. 然后我向它传递两个自定义函数,填充所需的序列

    //Orders Prefix
    add_filter( 'woocommerce_order_number', 'change_woocommerce_order_number' );
    
    function change_woocommerce_order_number( $order_id ) {
        $order = wc_get_order( $order_id );
        if ( $order && $order->get_date_created() ) {
            $order_year = $order->get_date_created()->format( 'Y' );
            $language_code = pll_current_language(); // Detect current language
            $new_order_id = generate_woo_order_sequence($language_code);
    
            return $new_order_id;
        }
    
        return $order_id;
    }
    
    // Generate the sequence with language code passed
    function generate_woo_order_sequence($language_code) {
        $year = date('Y');
        $option_name = "wc_custom_series_{$language_code}";
    
        // Reset if year has changed
        $stored_year = get_option($option_name . "_year", -1);
        if ($year > $stored_year) {
            update_option($option_name, 1);
            update_option($option_name . "_year", $year);
        }
    
        $current_number = get_option($option_name, 1);
        update_option($option_name, $current_number + 1);
    
        return strtoupper($language_code) . '-' . $year . '-' . str_pad($current_number, 3, '0', STR_PAD_LEFT);
    }
    

注意:我已经考虑过前导零最多 3 位的前缀。

例如,EN-2024-001 将是第一个订单号。

© www.soinside.com 2019 - 2024. All rights reserved.