Woocommerce에서 맞춤 제품 속성 가져 오기
Woocommerce에서 제품 사용자 정의 속성 값을 얻으려고하지만 비참하게 실패하고 아무것도 얻지 못합니다.
그래서 나는 시도했다.
global $woocommerce, $post, $product;
$res = get_post_meta($product->id);
print_r(unserialize($res['_product_attributes'][0]));
그리고이 원시 데이터를 얻고 있습니다.
[pa_koostis] => Array
(
[name] => pa_koostis
[value] =>
[position] => 0
[is_visible] => 1
[is_variation] => 0
[is_taxonomy] => 1
)
속성 섹션에 표시되기 때문에 값이 있다는 것을 알고 있지만 내 사용자 지정 코드로 표시하는 방법을 찾을 수 없습니다.
수정 됨 : Woocommerce 버전 3부터
woocommerce_get_product_terms
사용되지 않습니다.
@datafeedr 가 그의 대답에 쓴 것처럼 다음과 같이 가십시오 .
global $product;
$koostis = array_shift( wc_get_product_terms( $product->id, 'pa_koostis', array( 'fields' => 'names' ) ) );
또는 더 콤팩트 :
global $product;
$koostis = $product->get_attribute( 'pa_koostis' );
원래 답변 :
$result = array_shift(woocommerce_get_product_terms($product->id, 'pa_koostis', 'names'));
woocommerce_get_product_terms()
이제 더 이상 사용되지 않습니다.
wc_get_product_terms()
대신 사용하십시오 .
예:
global $product;
$koostis = array_shift( wc_get_product_terms( $product->id, 'pa_koostis', array( 'fields' => 'names' ) ) );
2018 년 업데이트. 다음을 사용할 수 있습니다.
global $product;
echo wc_display_product_attributes( $product );
출력을 사용자 정의하려면 복사 plugins/woocommerce/templates/single-product/product-attributes.php
하여 themes/theme-child/woocommerce/single-product/product-attributes.php
수정하십시오.
아래 코드를 사용하여 속성에 대한 단일 값을 얻을 수 있습니다.
$pa_koostis_value = get_post_meta($product->id, 'pa_koostis', true);
최신 업데이트 :
$product->get_attribute( 'your_attr' );
$product
페이지에 없는지 정의해야 합니다.
속성 이름 => 속성 값의 배열을 얻으려면 다음을 시도하십시오.
global $product;
$formatted_attributes = array();
$attributes = $product->get_attributes();
foreach($attributes as $attr=>$attr_deets){
$attribute_label = wc_attribute_label($attr);
if ( isset( $attributes[ $attr ] ) || isset( $attributes[ 'pa_' . $attr ] ) ) {
$attribute = isset( $attributes[ $attr ] ) ? $attributes[ $attr ] : $attributes[ 'pa_' . $attr ];
if ( $attribute['is_taxonomy'] ) {
$formatted_attributes[$attribute_label] = implode( ', ', wc_get_product_terms( $product->id, $attribute['name'], array( 'fields' => 'names' ) ) );
} else {
$formatted_attributes[$attribute_label] = $attribute['value'];
}
}
}
//print_r($formatted_attributes);
return $formatted_attributes;
약간 비효율적이지만 트릭을 수행합니다.
"한 번에 모든 속성을 가져 오는 아이디어가 있습니까?"에 대한 답변 질문은 제품 ID 만 사용하여 함수를 호출하는 것입니다.
$array=get_post_meta($product->id);
키는 선택 사항입니다. http://codex.wordpress.org/Function_Reference/get_post_meta 참조
"$ formatted_attributes"에 배열로 속성을 가져옵니다.
$attributes = $product->get_attributes();
foreach($attributes as $attr=>$attr_deets){
$attribute_label = wc_attribute_label($attr);
if ( isset( $attributes[ $attr ] ) || isset( $attributes[ 'pa_' . $attr ] ) ) {
$attribute = isset( $attributes[ $attr ] ) ? $attributes[ $attr ] : $attributes[ 'pa_' . $attr ];
if ( $attribute['is_taxonomy'] ) {
$formatted_attributes[$attribute_label] = wc_get_product_terms( $product->id, $attribute['name']);
} else {
$formatted_attributes[$attribute_label] = $attribute['value'];
}
}
}
print_r($formatted_attributes);
아래 코드를 사용하여 세부 정보가있는 모든 속성을 가져옵니다.
global $wpdb;
$attribute_taxonomies = $wpdb->get_results( "SELECT * FROM " . $wpdb->prefix . "woocommerce_attribute_taxonomies WHERE attribute_name != '' ORDER BY attribute_name ASC;" );
set_transient( 'wc_attribute_taxonomies', $attribute_taxonomies );
$attribute_taxonomies = array_filter( $attribute_taxonomies ) ;
prin_r($attribute_taxonomies);
참고 URL : https://stackoverflow.com/questions/13374883/get-custom-product-attributes-in-woocommerce
'IT박스' 카테고리의 다른 글
TypeScript에서 중첩 클래스를 만들 수 있습니까? (0) | 2020.12.04 |
---|---|
__init__에서 await로 클래스 속성을 설정하는 방법 (0) | 2020.12.04 |
터미널에서 현재 분기 및 폴더 경로를 표시하려면 어떻게해야합니까? (0) | 2020.12.03 |
오래된 데이터에 대한 UICollectionView 어설 션 오류 (0) | 2020.12.03 |
Postman Jetpack에서 테스트 컬렉션 내보내기 (0) | 2020.12.03 |