Как получить вариационный класс доставки в Woocommerce - PullRequest
2 голосов
/ 20 марта 2019

Я хотел бы отобразить переменные классы доставки товаров, установленные для каждого варианта.Я понимаю, что мне может понадобиться смесь php и Javascript, но я бы хотел сначала получить правильную сторону PHP.

Я предполагаю, что лучший способ начать это использовать:

if( $product->is_type( 'simple' ) ) {
    $product = wc_get_product();

    $shipping_class = $product->get_shipping_class();
} elseif( $product->is_type( 'variable' ) ) {
    $product = wc_get_product();
    $shipping_class = $product->get_shipping_class();
}

Но я не уверен, как получить класс доставки варианта продукта или я делаю это правильно.Изучите wc_get_product_variation или вариант, чтобы увидеть, есть ли ответ.

Буду признателен за любую помощь, возможно, отобразить все в виде массива и использовать JavaScript, чтобы скрыть выбранное.

Как получить вариант класса доставки?

enter image description here

1 Ответ

1 голос
/ 22 марта 2019

Чтобы получить варианты доставки вариантов идентификатора продукта определенной переменной, можно двумя способами:

1) Использование функции wp_get_post_terms() для product_shipping_class таксономии:

// Get the WC_Product_Variable instance Object (if needed)
$product = wc_get_product( $product_id );

// Initializing
$shipping_classes = array();

// Loop through the visible variations IDs 
foreach ( $product->get_visible_children() as $variation_id ) {
    // Get the variation shipping class WP_Term object
    $term = wp_get_post_terms( $variation_id, 'product_shipping_class' ); 

    if( empty($term) ) {
        // Get the parent product shipping class WP_Term object
        $term = wp_get_post_terms( $product->get_id(), 'product_shipping_class' ); 

        // Set the shipping class slug in an indexed array
        $shipping_classes[$variation_id] = $term->slug;
    }
}

// Raw output (for testing)
var_dump($shipping_classes);

Это даст вам массив пар вариантов Id / класса доставки.


2) Использование метода get_shipping_class_id() WC_Product:

// Get the WC_Product_Variable instance Object (if needed)
$product = wc_get_product( $product_id );

// Initializing
$shipping_classes = array();

// Loop through the visible variations IDs 
foreach ( $product->get_visible_children() as $variation_id ) {
    // Get the Product Variation instance Object
    $variation = wc_get_product($variation_id); 

    // Get the shipping class ID
    $term_id = $variation->get_shipping_class_id(); 

    // The shipping class WP_Term Object
    $term = get_term_by('term_id', $term_id, 'product_shipping_class'); 

    // Set the shipping class slug in an indexed array
    $shipping_classes[$variation_id] = $term->slug;
}

// Raw output (for testing)
var_dump($shipping_classes);
...