Отобразить цену вариации Woocommerce и состояние запаса в раскрывающемся списке - PullRequest
0 голосов
/ 08 октября 2018

Я хочу отобразить цену каждого варианта продукта woocommerce и состояние запаса в раскрывающемся списке варианта следующим образом: Цена - Имя варианта - Статус запаса.

Следующий код дает мне Имя цены и варианта в пределахвыпадающий список, но я не уверен в дополнительном коде, необходимом для добавления каждого варианта к текущему состоянию на складе?

// Add Variation Price to Drop Down

add_filter( 'woocommerce_variation_option_name', 
'display_price_in_variation_option_name' );

function display_price_in_variation_option_name( $term ) {
global $wpdb, $product;

if ( empty( $term ) ) return $term;
if ( empty( $product->id ) ) return $term;

$result = $wpdb->get_col( "SELECT slug FROM {$wpdb->prefix}terms WHERE name = '$term'" );

$term_slug = ( !empty( $result ) ) ? $result[0] : $term;

$query = "SELECT postmeta.post_id AS product_id
            FROM {$wpdb->prefix}postmeta AS postmeta
                LEFT JOIN {$wpdb->prefix}posts AS products ON ( products.ID = postmeta.post_id )
            WHERE postmeta.meta_key LIKE 'attribute_%'
                AND postmeta.meta_value = '$term_slug'
                AND products.post_parent = $product->id";

$variation_id = $wpdb->get_col( $query );

$parent = wp_get_post_parent_id( $variation_id[0] );

if ( $parent > 0 ) {
     $_product = new WC_Product_Variation( $variation_id[0] );
     return wp_kses( woocommerce_price( $_product->get_price() ), array() ). ' - ' . $term . '';
}
return $term;

}

Заранее спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Просто если кто-то еще захочет добавить статус запаса с пользовательской формулировкой в ​​выпадающий список вариантов, вот код, который я использовал на основе ответа, предоставленного Kashalo.

add_filter( 'woocommerce_variation_option_name','display_price_in_variation_option_name');

function display_price_in_variation_option_name( $term ) {
global $product;

if ( empty( $term ) ) {
    return $term;
}
if ( empty( $product->id ) ) {
    return $term;
}

$variation_id = $product->get_children();


foreach ( $variation_id as $id ) {
    $_product       = new WC_Product_Variation( $id );
    $variation_data = $_product->get_variation_attributes();
    $stock_status = $_product->get_stock_status();
    $stock_status = str_replace( array('instock','outofstock','onbackorder'), array('In Stock','Out of Stock','Please allow a few extra days for delivery'), $stock_status );

    foreach ( $variation_data as $key => $data ) {

        if ( $data == $term ) {
            $html  = wp_kses( woocommerce_price( $_product->get_price() ), array() );
            $html .= ' - ' . $term;
            $html .= ( $stock_status ) ? ' - ' . $stock_status : '';
            return $html;
        }
    }
}

return $term;

}
0 голосов
/ 08 октября 2018

Я изменил вашу функцию, удалив пользовательский SQL-запрос и использовал встроенные функции WooCommerce для достижения поставленной цели.

add_filter( 'woocommerce_variation_option_name','display_price_in_variation_option_name');

function display_price_in_variation_option_name( $term ) {
    global $product;

    if ( empty( $term ) ) {
        return $term;
    }
    if ( empty( $product->id ) ) {
        return $term;
    }

    $variation_id = $product->get_children();

    foreach ( $variation_id as $id ) {
        $_product       = new WC_Product_Variation( $id );
        $variation_data = $_product->get_variation_attributes();

        foreach ( $variation_data as $key => $data ) {

            if ( $data == $term ) {
                $html  = wp_kses( woocommerce_price( $_product->get_price() ), array() );
                $html .= ' - ' . $term;
                $html .= ( $_product->get_stock_quantity() ) ? ' - ' . $_product->get_stock_quantity() : '';
                return $html;
            }
        }
    }

    return $term;

}

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

Выход:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...