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
)
Attribute 섹션에 표시되어 있기 때문에 값이 있는 것은 알고 있습니다만, 커스텀 코드로 표시할 수 있는 방법을 찾을 수 없습니다.
편집: The
woocommerce_get_product_terms
Woocommerce 버전3 이후 권장되지 않습니다.
@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'));
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
그것을 수정해 주세요.
2014년 9월:
$product->get_attribute( 'your_attr' );
다음을 정의해야 합니다.$product
페이지에 없으면요.
Atribute에 대한 단일 값은 다음 코드를 사용하여 얻을 수 있습니다.
$pa_koostis_value = get_post_meta($product->id, 'pa_koostis', true);
woocommerce_get_product_terms()
는 현재(2014년) 폐지되었습니다.
사용하다wc_get_product_terms()
대신.
예:
global $product;
$koostis = array_shift( wc_get_product_terms( $product->id, 'pa_koostis', array( 'fields' => 'names' ) ) );
속성 이름 => 속성 값의 배열을 가져오려면 다음과 같이 하십시오.
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;
그것은 조금 비효율적이지만 효과가 있다.
@airdrumz 솔루션은 기능하지만 ID에 직접 액세스하면 잘못된 오류가 많이 발생합니다.이러한 오류는 향후 호환성에는 좋지 않습니다.
그러나 그 결과 오브젝트를 검사하고 다음과 같은 OOP 접근방식을 작성하게 되었습니다.
function myplug_get_prod_attrs() {
// Enqueue scripts happens very early, global $product has not been created yet, neither has the post/loop
global $product;
$wc_attr_objs = $product->get_attributes();
$prod_attrs = [];
foreach ($wc_attr_objs as $wc_attr => $wc_term_objs) {
$prod_attrs[$wc_attr] = [];
$wc_terms = $wc_term_objs->get_terms();
foreach ($wc_terms as $wc_term) {
array_push($prod_attrs[$wc_attr], $wc_term->slug);
}
}
return $prod_attrs;
}
글로벌 $product 아이템이 생성되기 전(예를 들어 enqueue 스크립트 실행 중)에 위의 작업을 수행할 경우 다음을 사용하여 직접 작성할 수 있습니다.
$product = wc_get_product(get_queried_object_id());
"모든 속성을 한 번에 얻을 수 있는 아이디어가 있습니까?"라는 질문에 대한 답변은 제품 ID만 사용하여 함수를 호출하는 것입니다.
$array=get_post_meta($product->id);
키는 옵션입니다.http://codex.wordpress.org/Function_Reference/get_post_meta 를 참조해 주세요.
세부 정보가 포함된 모든 속성을 가져오려면 아래 코드를 사용하십시오.
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
'programing' 카테고리의 다른 글
표준 각도JS 워크플로우 및 프로젝트 구조(Python Flask 포함) (0) | 2022.09.24 |
---|---|
JPQL 쿼리를 사용하여 여러 스키마에서 데이터 선택 (0) | 2022.09.23 |
argparse를 사용하여 부울 값 구문 분석 (0) | 2022.09.23 |
라라벨 백 버튼 (0) | 2022.09.23 |
Coffeescript에 의한 파라미터가 있는 setTimeout 작성 방법 (0) | 2022.09.23 |