WooCommerce 产品 - 始终确保 SKU 包含 13 位数字

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

当我们在 WooCommerce 中创建或更新产品时,如果 SKU (_sku) 字段少于 13 位数字,我们必须填写零以始终达到 13 位数字。

  • 例如,如果该字段不包含任何内容,那么我们应该在该字段中添加 13 个零。

  • 例如,如果该字段包含123456,那么我们应该在它前面添加7个零。

  • 例如,如果该字段包含123456789,那么我们应该在它前面添加3个零。

  • 例如,如果该字段包含 1234567891234,那么我们不应该执行任何操作,因为它有 13 位数字。

我有下面的代码,它部分起作用,这意味着它有效地调整了后端的位数,但是当我在前端根据SKU搜索产品时,我没有找到该产品,所以我猜它工作得不好。有人可以帮忙解决这个问题吗?谢谢

function ensure_13_digit_sku($sku) {
    return str_pad($sku, 13, '0', STR_PAD_LEFT);
}
function ensure_sku_length_on_save($post_id, $post, $update) {
    if ($post->post_type !== 'product') {
        return;
    }
    $sku = get_post_meta($post_id, '_sku', true);
    if (!$sku || strlen($sku) < 13) {
        $new_sku = ensure_13_digit_sku($sku);
        update_post_meta($post_id, '_sku', $new_sku);
    }
}
add_action('save_post', 'ensure_sku_length_on_save', 10, 3);
php wordpress woocommerce format sku
1个回答
0
投票

从 WooCommerce 3 开始,您应该使用

WC_Product
set_sku()
setter 方法和管理产品相关挂钩,来调整产品 SKU,例如:

add_action('woocommerce_admin_process_product_object', 'pre_process_product_sku');
function pre_process_product_sku( $product ) {
    $sku = isset($_POST['_sku']) ? wc_clean( wp_unslash($_POST['_sku']) ) : '';

    $product->set_sku( ensure_13_digit_sku($sku) );
}

add_action('woocommerce_admin_process_variation_object', 'pre_process_variation_sku');
function pre_process_variation_sku( $variation, $i ) {
    $sku = isset($_POST['variable_sku'][$i]) ? wc_clean( wp_unslash($_POST['variable_sku'][$i]) ) : '';

    $variation->set_sku( ensure_13_digit_sku($sku) );
}

代码位于活动子主题(或活动主题)的functions.php 文件中。应该可以。

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