如何获得 Woocommerce 变体 ID?
Posted
技术标签:
【中文标题】如何获得 Woocommerce 变体 ID?【英文标题】:How to get Woocommerce Variation ID? 【发布时间】:2018-05-18 17:16:37 【问题描述】:我已经在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 字段?
谢谢!
【问题讨论】:
由 Sunil Dora 解决,工作正常! 【参考方案1】:试试这个:
$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 );
希望这会对您有所帮助。欲了解更多信息:
How To Get Product Variations & Meta – WooCommerce How to get the Variation ID in a Woocommerce product【讨论】:
这是对的!谢谢!现在的问题是如何使用此代码删除变体.. update_post_meta($variation_ID, '_text_field_date_expire', "");使用它来使您的变体字段值为空。希望这会对你有所帮助。【参考方案2】:在 WooCommerce 3+ 中,它是来自 $variation
函数参数的 $variation->get_id()
,它是 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 ) );
见the source code for woocommerce_save_product_variation
action hook
【讨论】:
以上是关于如何获得 Woocommerce 变体 ID?的主要内容,如果未能解决你的问题,请参考以下文章
获取产品变体描述以显示在 woocommerce 中的订单项目上?
在循环之外获取当前变体 id 并将其用于服务器端功能。 WooCommerce / jQuery
如何将变体库存状态添加到 Woocommerce 产品变体下拉列表
WooCommerce:在任何地方添加/显示产品或变体自定义字段