Woocommerce 使用save_post钩子自动创建商业SKU
我需要创建一个独特的SKU,该SKU由3个自定义分类组成,无论何时保存新产品,但在获取自定义分类时遇到困难。这就是我到目前为止所做的:Woocommerce 使用save_post钩子自动创建商业SKU,woocommerce,save,hook,custom-taxonomy,sku,Woocommerce,Save,Hook,Custom Taxonomy,Sku,我需要创建一个独特的SKU,该SKU由3个自定义分类组成,无论何时保存新产品,但在获取自定义分类时遇到困难。这就是我到目前为止所做的: add_action( 'save_post', 'set_sku', 10,3 ); function set_sku( $post_id, $post, $update ) { // Only want to set if this is a new post! if ( $update ){ return; }
add_action( 'save_post', 'set_sku', 10,3 );
function set_sku( $post_id, $post, $update ) {
// Only want to set if this is a new post!
if ( $update ){
return;
}
// Only set for post_type = post!
if ( 'product' !== $post->post_type ) {
return;
}
$producer = strip_tags( get_the_term_list( $post_id, 'producer') );
$vintage = strip_tags( get_the_term_list( $post_id, 'vintage') );
$bottle_size = strip_tags( get_the_term_list( $post_id, 'bottle_size') );
$your_sku = $producer . "|" . $vintage . "|" . $bottle_size;
if( empty( get_post_meta( $post_id, '_sku', true ) ) ) {
update_post_meta( $post_id, '_sku', $your_sku );
}
}
创建新产品时产生的SKU如下所示:
||
PS每个自定义分类法只有一个值
谢谢你的帮助。我在前端使用了一个类似的功能,可以正确显示数据,示例如下:
<?php
$products = new WP_Query( array(
'post_type' => 'product',
'posts_per_page' => -1,
) );
if ( $products->have_posts() ) :
while ( $products->have_posts() ) : $products->the_post(); $id = $product->get_id();?>
<tr>
<td><?php echo $producer = strip_tags( get_the_term_list( $id, 'producer') ); ?</td>
简单的解决方案是在函数中使用wc_get_产品遍历产品。看起来像是在浪费资源,希望只使用当前的post-ID,但它是有效的,而且WP毕竟是建立在循环之上的。经过测试,工作正常,是一种自动化和控制SKU创建的酷方法
add_action( 'save_post', 'set_sku', 10,3 );
function set_sku( $post_id, $post, $update ) {
// Only want to set if this is a new post!
if ( $update ){
return;
}
// Only set for post_type = post!
if ( 'product' !== $post->post_type ) {
return;
}
$args = array(
'limit' => 9999999,
'orderby' => 'name',
);
$productData = wc_get_products( $args );
foreach ( $productData as $product ){
$productId = $product->get_id();
$producer = strip_tags( get_the_term_list( $productId, 'producer') );
$vintage = strip_tags( get_the_term_list( $productId, 'vintage') );
$bottle_size = strip_tags( get_the_term_list( $productId, 'bottle_size') );
$your_sku = $producer . "|" . $vintage . "|" . $bottle_size;
if( empty( get_post_meta( $post_id, '_sku', true ) ) ) {
update_post_meta( $post_id, '_sku', $your_sku );
}
}
}