Автоматически создавать SKU Woocommerce с помощью кнопки save_post - PullRequest
0 голосов
/ 05 марта 2020

Мне нужно создать уникальный 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;
    }

    // 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>

1 Ответ

0 голосов
/ 05 марта 2020

Простым решением было l oop через продукты, использующие wc_get_products внутри функции. Выглядит как пустая трата ресурсов и надеялся просто использовать текущий идентификатор сообщения, но он работает, и 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 );
            }
        }


}
...