반응형
Woocommerce에서 새 제품을 추가할 때 모든 제품 특성 자동 추가
제 고객은 Wordpress의 플러그인 Woocommerce를 기반으로 이 이상한 변경을 요청했습니다.
제품 생성 시 모든 제품 속성을 자동으로 추가할 수 있습니까?
또한 속성에 값이 입력되지 않은 경우 "제품 페이지에 표시" 체크박스를 자동으로 비활성화할 수 있습니까?
어떤 도움이라도 정말 감사합니다.
편집(설명):
위에서 설명한 내용은 다음과 같습니다.
다음은 새로운 제품을 만들 때 기존의 모든 제품 변형 + 용어를 자동으로 추가하는 방법입니다.
코드(코멘트):
add_action( 'save_post', 'auto_add_product_attributes', 50, 3 );
function auto_add_product_attributes( $post_id, $post, $update ) {
## --- Checking --- ##
if ( $post->post_type != 'product') return; // Only products
// Exit if it's an autosave
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return $post_id;
// Exit if it's an update
if( $update )
return $post_id;
// Exit if user is not allowed
if ( ! current_user_can( 'edit_product', $post_id ) )
return $post_id;
## --- The Settings for your product attributes --- ##
$visible = ''; // can be: '' or '1'
$variation = ''; // can be: '' or '1'
## --- The code --- ##
// Get all existing product attributes
global $wpdb;
$attributes = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}woocommerce_attribute_taxonomies" );
$position = 0; // Auto incremented position value starting at '0'
$data = array(); // initialising (empty array)
// Loop through each exiting product attribute
foreach( $attributes as $attribute ){
// Get the correct taxonomy for product attributes
$taxonomy = 'pa_'.$attribute->attribute_name;
$attribute_id = $attribute->attribute_id;
// Get all term Ids values for the current product attribute (array)
$term_ids = get_terms(array('taxonomy' => $taxonomy, 'fields' => 'ids'));
// Get an empty instance of the WC_Product_Attribute object
$product_attribute = new WC_Product_Attribute();
// Set the related data in the WC_Product_Attribute object
$product_attribute->set_id( $attribute_id );
$product_attribute->set_name( $taxonomy );
$product_attribute->set_options( $term_ids );
$product_attribute->set_position( $position );
$product_attribute->set_visible( $visible );
$product_attribute->set_variation( $variation );
// Add the product WC_Product_Attribute object in the data array
$data[$taxonomy] = $product_attribute;
$position++; // Incrementing position
}
// Get an instance of the WC_Product object
$product = wc_get_product( $post_id );
// Set the array of WC_Product_Attribute objects in the product
$product->set_attributes( $data );
$product->save(); // Save the product
}
코드가 기능합니다.php 파일에는 액티브한 아이 테마(또는 활성 테마).테스트 및 동작합니다.
@LoicTheAztec의 코드 스니펫을 사용하는 사용자가 있다면 다른 어레이 항목을 설정하는 것이 도움이 될 수 있습니다.
// Get all term Ids values for the current product attribute (array)
$term_ids = get_terms(array('taxonomy' => $taxonomy, 'fields' => 'ids', 'hide_empty' => false));
도움이 됐으면 좋겠다.
언급URL : https://stackoverflow.com/questions/42113840/auto-add-all-product-attributes-when-adding-a-new-product-in-woocommerce
반응형
'programing' 카테고리의 다른 글
WP_Query Woocommerce 제품은 여러 카테고리에 속하며 tax_query만 해당됩니다. (0) | 2023.02.07 |
---|---|
WooCommerce 작업 후크 및 템플릿 재정의 (0) | 2023.02.07 |
PHP 5.4가 설치된 WordPress 3.7에서 엄격한 표준 오류 비활성화 (0) | 2023.02.07 |
Wordpress 플러그인의 클래스 내에서 $this를 사용하면 치명적인 오류가 발생하는 이유는 무엇입니까? (0) | 2023.02.07 |
Word Press:플러그인이 설치되어 있는지 확인합니다(ACF). (0) | 2023.02.07 |