IT

Woocommerce 변동 상품 가격 획득

itgroup 2023. 2. 27. 22:53
반응형

Woocommerce 변동 상품 가격 획득

변동 드롭다운에 상품 변동 가격을 표시하려고 합니다.드롭다운에서 변형을 선택하면 div 안에 가격이 표시되는 기본 동작을 변경하려고 합니다.

문제는 그 div가 변동 가격을 어디서 구하는지 찾을 수 없다는 것입니다.javascript를 모두 검색했지만 찾을 수 없었습니다.

사용하는 경우:

add_filter('woocommerce_variation_option_name' ,'add_price_to_dropdown');

function add_price_to_dropdown($name){

    global $product;
    return $name.' '.$product->get_price_html();
}

모든 옵션에 대해 최소 변동 가격을 받을 수 있습니다.각 변종별 가격을 알고 싶습니다.단서는?

여기 찾으시는 코드가 있습니다.

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;

    $id = $product->get_id();

    $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 = $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 $term . ' (' . wp_kses( woocommerce_price( $_product->get_price() ), array() ) . ')';
    }
    return $term;

}

이것이 유용하기를 바랍니다.

이것은 여러분에게 도움이 될 것입니다; 새로운 버전의 WC에서 동일한 방법을 검색하는 동안:

global $woocommerce;
$product_variation = new WC_Product_Variation($_POST['variation_id']);
$regular_price = $product_variation->regular_price;

저는 에이잭스를 사용하고 있으며, 포스트 방식으로 바리에이션 아이디를 전달하고 있습니다.

작전본부와 똑같은 질문을 했는데, 내 경우는 좀 달랐어.이 페이지에 접속하는 다른 사용자에게 도움이 될 수 있는 솔루션을 소개합니다.

function get_product_variation_price($variation_id) {
    $product = new WC_Product_Variation($variation_id);
    return $product->product_custom_fields['_price'][0];
}

UPDATE for WooCommerce 2.2.10: 위 코드는 현재 버전의 WooCommerce에서는 작동하지 않습니다.아래 코드는 WooCommerce API를 사용하여 수동 SQL 쿼리를 회피하고 매우 단순하기 때문에 사용할 수 있으며 고려할 가치가 있습니다.

/*
 * You can find the $variation_id in the Product page (go to Product Data > Variations, and it is shown with a preceeding "#" character)
 */
function get_product_variation_price($variation_id) {

    global $woocommerce; // Don't forget this!
    $product = new WC_Product_Variation($variation_id);
    //return $product->product_custom_fields['_price'][0]; // No longer works in new version of WooCommerce
    //return $product->get_price_html(); // Works. Use this if you want the formatted price
    return $product->get_price(); // Works. Use this if you want unformatted price

}

저는 Woocommerce에서 이 코드를 사용하여 변동 가격을 표시하고 있습니다.Woocommerce 2.0으로 업데이트 했을 때 제품을 편집할 때마다 wp-admin/error-log에 데이터베이스 오류가 나타납니다.업데이트 전에 Woocommerce를 오래 사용하지 않았고 오늘까지 오류 로그를 확인하지 않았기 때문에 2.0 업데이트 이전에도 오류가 발생했는지 알 수 없습니다.

예상대로 변동 가격이 표시되었지만 편집용으로 제품을 열 때마다 에러 로그가 다음과 같은 오류로 가득 찼습니다.제가 편집하고 있던 제품과 관련된 모든 변형에 오류가 있었습니다.

WordPress database error You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 8 for query SELECT postmeta.post_id AS product_id
            FROM wp_postmeta AS postmeta
                LEFT JOIN wp_posts AS products ON ( 

products.ID = postmeta.post_id )
            WHERE postmeta.meta_key LIKE 'attribute_%'
                AND postmeta.meta_value = '12'
                AND products.post_parent =  made by 

include('wp-admin/edit-form-advanced.php'), do_meta_boxes, call_user_func, woocommerce_product_data_box, do_action('woocommerce_product_write_panels'), call_user_func_array, variable_product_type_options, include('/plugins/woocommerce/admin/post-types/writepanels/variation-admin-html.php'), apply_filters('woocommerce_variation_option_name'), call_user_func_array, display_price_in_variation_option_name

당신의 코드에서 AND 제품 행을 변경했습니다.post_parent = $product->id", 이 AND 제품에 적용됩니다.post_parent = '$product->id' ";

이제 오류는 없습니다.에러 로그는 빈 상태로 유지됩니다.

혹시 다른 사람이 문제에 부딪힐까 봐 공유하려고요.

오래된 질문인 것은 알지만, 조금 더 효율적이고 심플한 문제를 해결하고자 하는 분들을 위해 솔루션을 게시하려고 합니다.

//Add prices to variations
add_filter( 'woocommerce_variation_option_name', 'display_price_in_variation_option_name',10,4 );

function display_price_in_variation_option_name( $term, $null, $attribute, $product) {
   $var_id = WC_Data_Store::load( 'product' )->find_matching_product_variation($product,['attribute_'.$attribute => $null->slug]);
   return ($var_id && $_product= new WC_Product_Variation($var_id)) ? $term . ' ' .wc_get_price_to_display($_product):$term;                 
} 

최신 Woocommerce: 3.2.1(2017년 10월)에서 작업하는 이 문제에 대한 나의 견해는 드롭다운의 변동 옆에 표시됩니다.

add_filter( 'woocommerce_variation_option_name', 'display_price_in_variation_option_name' );

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

    $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] );
        $_currency = get_woocommerce_currency_symbol();
        return $term . ' ('.$_currency.' '. $_product->get_price()  . ')';
    }
    return $term;

}

이게 도움이 됐으면 좋겠네요.하위 테마 함수에 이 항목을 추가하십시오.php

를 작성할 는, 「 」를 할 수도 .wc_get_product()★★★★★★ 。

다음은 몇 가지 예입니다.

$price = wc_get_product($product_or_variation_id)->get_price();
function get_cart_item_prices() {
  $user_cart = WC()->cart->get_cart();
  foreach ($user_cart as $cart_item) {
    $price = wc_get_product($cart_item['variation_id'])->get_price();
    echo $price;
    echo "<br/>";
  }
}

2022

하고 .$product->get_variation_prices()변동 가격과 변동 ID를 반환합니다.

언급URL : https://stackoverflow.com/questions/12272733/woocommerce-get-variation-product-price

반응형