제품 바리에이션 속성 값 용어 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
'programing' 카테고리의 다른 글
지정되지 않은 경우 암시되는 액세스 수식자는 무엇입니까? (0) | 2023.03.16 |
---|---|
React JS:Formik을 사용하여 이미지/파일 업로드를 처리하는 방법 (0) | 2023.03.16 |
AngularJS 오류: 크로스 오리진 요청은 프로토콜 체계(http, data, chrome-extension, https)에서만 지원됩니다. (0) | 2023.03.16 |
BODY에서 POST 요청을 신속하게 보내는 방법 (0) | 2023.03.16 |
css 모듈에 클래스를 네스트하고 어떻게 반응합니까? (0) | 2023.03.16 |