当我们在 WooCommerce 中创建或更新产品时,如果 SKU(_sku)字段少于 13 位数字,我们必须填写零以始终达到 13 位数字。例如,如果字段不包含任何内容,...
当我们在 WooCommerce 中创建或更新产品时,如果 SKU(_sku)字段少于 13 位数字,我们必须填写零以始终达到 13 位数字。
p2
p3
p4
p5
我有以下代码,部分可行,这意味着它可以有效地调整后端的数字,但当我在前端根据 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,如下所示:
function ensure_13_digit_sku( $sku ) {
return str_pad($sku, 13, '0', STR_PAD_LEFT);
}
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 文件中。它应该可以工作。
尽量避免使用 WordPress 帖子元函数和钩子,因为它们不会刷新或同步数据。