簡體   English   中英

如何獲取 Woocommerce 變體 ID?

[英]How to get Woocommerce Variation ID?

我已經在functions.php上有了這段代碼

此代碼是在每個產品變體上添加一個新字段以具有日期時間輸入字段,因此當當前日期超過輸入日期時,變體將自動過期。

// 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 ) );
    }
}

這是在 Wocommerce 的每個變體上添加一個新字段。

我想要做的是獲取每個“_text_field_date_expire”元數據,以便我可以刪除每個產品的過期變體。

我如何在functions.php上獲取每個woocommerce變體ID,以便我可以添加一個規則,當它現在已經超過當前日期時它會過期?

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

這段代碼是我用來獲取日期時間字段的代碼,但不確定如何獲取每個 $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 );

}

希望這會幫助你。 了解更多信息:

在WooCommerce 3+,這是$variation->get_id()$variation函數的參數,這是一個實例WC_Product_Variation

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// Save Variation Settings
add_action( 'woocommerce_save_product_variation', 'save_variation_settings_fields', 10, 2 );

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 ) );
    }
}

查看woocommerce_save_product_variation動作鈎子的源代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM