programing

제품 바리에이션 속성 값 용어 ID 및 이름 가져오기

css3 2023. 3. 16. 21:40

제품 바리에이션 속성 값 용어 ID 및 이름 가져오기

WooCommerce에서는$product->get_variation_attributes()제품의 변동 속성을 가져옵니다.이 함수는 ID가 없는 이름의 배열을 반환합니다.

다음과 같이 합니다.

                   [pa_color-shirt] => Array
                        (
                            [0] => red
                            [7] => grey
                            [14] => yellow
                        )

                    [pa_color-sweater] => Array
                        (
                            [0] => red
                            [1] => green
                            [2] => blue
                            [3] => grey
                            [4] => yellow
                            [5] => pink
                            [6] => dark-blue
                        )

제가 만들고 있는 AJAX 숍에는 다양한 ID가 필요합니다.따라서 ID와 이름을 선택 상자에 추가할 수 있습니다(woocommerce처럼).
며칠을 찾아봤지만 해결책을 찾을 수가 없었다.

이 코드를 작성했습니다.

if($product->has_child()) {
                $attributes = $product->get_attributes();
                $variations = $product->get_available_variations();
                $variationsArray = array();
                foreach ($attributes as $attr => $attr_deets) {
                    $variationArray = array();
                    $attribute_label = wc_attribute_label($attr);
                    $variationArray["attribute_label"] = $attribute_label;
                    if (isset($attributes[$attr]) || isset($attributes['pa_' . $attr])) {
                        $attribute = isset($attributes[$attr]) ? $attributes[$attr] : $attributes['pa_' . $attr];
                        if ($attribute['is_taxonomy'] && $attribute['is_visible']) {
                            $variationArray["attribute_name"] = $attribute['name'];
                            $variationIds = array();
                            $variationNames = array();
                            $variationPrices = array();
                            foreach ($variations as $variation) {
                                if (!empty($variation['attributes']['attribute_' . $attribute['name']])) {
                                    array_push($variationIds, $variation['variation_id']);
                                    $taxonomy = $attribute['name'];
                                    $meta = get_post_meta($variation['variation_id'], 'attribute_'.$taxonomy, true);
                                    $term = get_term_by('slug', $meta, $taxonomy);
                                    $variation_name = $term->name;
                                    array_push($variationNames, $variation_name);
                                    array_push($variationPrices, $variation['display_regular_price']);
                                }
                            }
                            $variationArray["variation_prices"] = $variationPrices;
                            $variationArray["variations"] = array_combine($variationIds, $variationNames);
                        }
                    }
                    array_push($variationsArray, $variationArray);
                }
            }

            $product_variations = $variationsArray;

이 코드는 https://hastebin.com/ecebewumoz.php을 반환합니다.

코드는 작동하지만 중복된 이름과 ID를 반환합니다.

제가 궁금한 건 제가 어떻게 이 같은 일을 할 수 있는지 아는 사람이 있나요?get_variation_attributes()신분증으로요?

WooCommerce 버전 3 이상 업데이트

foreach( $product->get_variation_attributes() as $taxonomy => $terms_slug ){
    // To get the attribute label (in WooCommerce 3+)
    $taxonomy_label = wc_attribute_label( $taxonomy, $product );

    // Setting some data in an array
    $variations_attributes_and_values[$taxonomy] = array('label' => $taxonomy_label);

    foreach($terms_slug as $term){

        // Getting the term object from the slug
        $term_obj  = get_term_by('slug', $term, $taxonomy);

        $term_id   = $term_obj->term_id; // The ID  <==  <==  <==  <==  <==  <==  HERE
        $term_name = $term_obj->name; // The Name
        $term_slug = $term_obj->slug; // The Slug
        // $term_description = $term_obj->description; // The Description

        // Setting the terms ID and values in the array
        $variations_attributes_and_values[$taxonomy]['terms'][$term_id] = array(
            'name'        => $term_name,
            'slug'        => $term_slug
        );
    }
}

WooCommerce 버전 3 이하

미가공 데이터 어레이에 중복된 변형 ID가 없습니다.질문이 명확하지 않기 때문에 누락된 ID가 무엇인지 추측하기가 어렵습니다.그런 다음 위험을 감수하고 대답합니다.결손된 ID는 속성값에서 ID라는 용어가 될 수 있습니다.

이 용어 ID를 얻으려면 다음과 같이 워드프레스 기능을 사용합니다.

foreach( $product->get_variation_attributes() as $taxonomy => $terms_slug ){
    // To get the taxonomy object
    $taxonomy_obj = get_taxonomy( $taxonomy );

    $taxonomy_name = $taxonomy_obj->name; // Name (we already got it)
    $taxonomy_label = $taxonomy_obj->label; // Label

    // Setting some data in an array
    $variations_attributes_and_values[$taxonomy] = array('label' => $taxonomy_obj->label);

    foreach($terms_slug as $term){

        // Getting the term object from the slug
        $term_obj  = get_term_by('slug', $term, $taxonomy);

        $term_id   = $term_obj->term_id; // The ID  <==  <==  <==  <==  <==  <==  HERE
        $term_name = $term_obj->name; // The Name
        $term_slug = $term_obj->slug; // The Slug
        // $term_description = $term_obj->description; // The Description

        // Setting the terms ID and values in the array
        $variations_attributes_and_values[$taxonomy]['terms'][$term_id] = array(
            'name'        => $term_name,
            'slug'        => $term_slug
        );
    }
}

또, 이하에 대해서:

echo '<pre>'; print_r($variations_attributes_and_values);echo '</pre>';

다음과 같은 출력과 함께 제품 바리에이션의 속성에 대한 실제 용어 ID가 표시됩니다(어레이 출력을 보다 콤팩트하게 하기 위해 배열했습니다).

Array(
    [pa_color] => Array(
        [label] => Color
        [terms] => Array(
            [8] => Array(
                [name] => Black
                [slug] => black'
            )
            [9] => Array(
                [name] => Blue
                [slug] => blue
            )
            [11] => Array(
                [name] => Green
                [slug] => green
            )
        ) 
    )
    [pa_bulk_quantity] => Array(
        [label] => Bulk quantity
        [terms] => Array(
            [44] => Array(
                [name] => Pack of 10 dozen
                [slug] => pack-of-10-dozen
            )
            [45] => Array(
                [name] => Case of 50 dozens
                [slug] => case-of-50-dozens
            )
        )
    )
)

언급URL : https://stackoverflow.com/questions/42497051/get-the-product-variations-attributes-values-term-id-and-name