当我们在 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);
从 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 文件中。应该可以。