2017-12-05 8 views
3

이 코드는 functions.php에 이미 있습니다.Woocommerce 유사 ID를 얻는 방법은 무엇입니까?

이 코드는 datetime 입력 필드를 갖기 위해 각 제품 변형에 새로운 필드를 추가하기 때문에 현재 날짜가 입력 날짜를 지나면 자동으로 만료됩니다.

// Add Variation Settings 
add_action('woocommerce_product_after_variable_attributes', 'variation_settings_fields', 10, 3); 

// Save Variation Settings 
add_action('woocommerce_save_product_variation', 'save_variation_settings_fields', 10, 2); 

//Create New fields for Variations 
function variation_settings_fields($loop, $variation_data, $variation) { 
    // Text Field 
    woocommerce_wp_text_input( 
     array( 
      'id'   => '_text_field_date_expire[' . $variation->ID . ']', 
      'class'  => '_text_field_date_expire', 
      'type'  => 'datetime-local', 
      'label'  => __('Date of Expiration', 'woocommerce'), 
      'placeholder' => '', 
      'desc_tip' => 'true', 
      'description' => __('Expiration of Each Product Variation', 'woocommerce'), 
      'value'  => get_post_meta($variation->ID, '_text_field_date_expire', true) 
     ) 
    ); 
} 


//Save New Fields for Variation 
function save_variation_settings_fields($post_id) { 
    // Text Field 
    $text_field = $_POST['_text_field_date_expire'][ $post_id ]; 
    if(! empty($text_field)) { 
     update_post_meta($post_id, '_text_field_date_expire', esc_attr($text_field)); 
    } 
} 

이것은 Woogle의 각 변형에 새로운 필드를 추가하는 것입니다. 내가 뭘하려고 오전 나는 각 제품의 만료 변화를 삭제할 수 있도록 각 "_text_field_date_expire"메타를 얻는 것입니다

.. 내가 지금 내가 할 수있는 functions.php 각 woocommerce 변화 ID를 얻는 방법

현재 날짜가 이미 지나면 만료 규칙을 추가 하시겠습니까?

var_dump(get_post_meta($variation_id , '_text_field_date_expire', true)); 

이 코드는 datetime 필드를 가져 오는 데 사용하지만 각 $ variation_id 필드를 얻는 방법을 모르십니까?

감사합니다. 이 뜻이 당신을 도와줍니다

$args = array(
    'post_type'  => 'product_variation', 
    'post_status' => array('private', 'publish'), 
    'numberposts' => -1, 
    'orderby'  => 'menu_order', 
    'order'   => 'asc', 
    'post_parent' => get_the_ID() // get parent post-ID 
); 
$variations = get_posts($args); 

foreach ($variations as $variation) { 

    // get variation ID 
    $variation_ID = $variation->ID; 

    // get variations meta 
    $product_variation = new WC_Product_Variation($variation_ID); 

    // get variation featured image 
    $variation_image = $product_variation->get_image(); 

    // get variation price 
    $variation_price = $product_variation->get_price_html(); 

    get_post_meta($variation_ID , '_text_field_date_expire', true); 

} 

희망 :

+0

를 참조하십시오, 잘 작동! –

답변

2

이 하나를 시도하십시오. 자세한 내용은 : WooCommerce 3+에서

+0

이것이 맞습니다! 감사! 이제 문제는이 코드를 사용하여 대안 페이지를 삭제할 수있는 방법입니다. –

+0

update_post_meta ($ variation_ID, '_text_field_date_expire', ""); 이 값을 사용하여 편차 값을 null로 만듭니다. 희망이 당신을 도울 것입니다. –

1

, 그것은 WC_Product_Variation의 인스턴스 $variation 함수 인수에서 $variation->get_id()을합니다.

get_id()WC_Data 클래스에서 상속됩니다.

그래서 코드에서 대신해야한다 :

'id' => '_text_field_date_expire[' . $variation->get_id() . ']', 

는 WooCommerce 3 이후, 모든 WC_Product 속성에 직접 액세스 할 수 없습니다. 대신 사용 가능한 방법을 사용해야합니다.


또한 후크 기능 save_variation_settings_fields()에 그렇게 하나 누락이, 2 개 인자를 선언한다. 그것은해야한다 :

//Save New Fields for Variation 
function save_variation_settings_fields($variation_id, $i) { 
    // Text Field 
    $text_field = $_POST['_text_field_date_expire'][ $variation_id ]; 
    if(! empty($text_field)) { 
     update_post_meta($variation_id, '_text_field_date_expire', esc_attr($text_field)); 
    } 
} 

는 선일 도라이 해결 the source code for woocommerce_save_product_variation action hook