如何解决从父产品外部更新 Woocommerce 中的产品变体库存状态
因为我只有一种产品,但有数十种变体,为了便于概览和管理,我将“product_variation”帖子类型帖子(产品变体)放在管理员中的“产品”菜单:
/** Register custom arguments for the 'product_variation' post type **/
function product_variation_post_type_args( $args,$post_type ) {
if( 'product_variation' === $post_type ) {
$args = array(
'label' => __( 'Product variations label','woocommerce' ),'supports' => array( 'title','excerpt','author','thumbnail','revisions','custom-fields',),'taxonomies' => array( 'product_cat','product_tag' ),'hierarchical' => false,'public' => true,'show_ui' => true,'show_in_menu' => 'edit.PHP?post_type=product','show_in_nav_menus' => false,'show_in_admin_bar' => false,'can_export' => true,'has_archive' => true,//'exclude_from_search' => true,'publicly_queryable' => false,'capability_type' => 'post','show_in_rest' => true,);
}
return $args;
}
add_filter( 'register_post_type_args','product_variation_post_type_args',10,2 );
add_filter( 'manage_product_variation_posts_columns','wc_product_variation_table_head' );
function wc_product_variation_table_head( $defaults ) {
$defaults['variation_label'] = __('Variations','woocommerce' );
$defaults['stock_status'] = __('Stock status','woocommerce' );
return $defaults;
}
add_action( 'manage_product_variation_posts_custom_column','bs_product_variation_table_content',2 );
function bs_product_variation_table_content( $column_name,$post_id ) {
if( $column_name === 'variation_label' ) {
$test_title = get_post_meta( $post_id,'attribute_test',true );
echo $test_title;
} else if( $column_name === 'stock_status' ) {
$stock_status = get_post_meta( $post_id,'_stock_status',true );
echo $stock_status;
}
}
add_filter( 'manage_edit-product_variation_sortable_columns','wc_product_variation_table_sorting' );
function wc_product_variation_table_sorting( $columns ) {
$columns['variation_label'] = 'variation_label';
$columns['stock_status'] = 'stock_status';
return $columns;
}
然后,我在“product_variation”帖子类型中添加了一个自定义字段“Stock status”:
function product_variation_MetaBoxes( ) {
global $wp_Meta_Boxes;
add_Meta_Box( 'product_variation_div',__('Stock status','product_variation_MetaBoxes_html','product_variation','normal','high');
}
add_action( 'add_Meta_Boxes_product_variation','product_variation_MetaBoxes' );
function product_variation_MetaBoxes_html() {
global $post;
$stock_status = get_post_meta( $post->ID,true );
?>
<select name="stock_status_select">
<option value="instock" <?PHP if( $stock_status == 'instock') echo 'selected'; ?>>In stock</option>
<option value="outofstock" <?PHP if( $stock_status == 'outofstock') echo 'selected'; ?>>Out of stock</option>
</select>
<?PHP
}
function product_variation_save_post() {
if( isset( $_POST['stock_status_select'] ) ) {
global $post;
update_post_Meta( $post->ID,'stock_status',wc_clean( $_POST['stock_status_select'] ) ); //is updated
update_post_Meta( $post->ID,wc_clean( $_POST['stock_status_select'] ) ); //is NOT updated (solved)
}
}
//add_action( 'save_post_product_variation','product_variation_save_post' ); //tried this also
add_action( 'save_post','product_variation_save_post' );
我遇到但无法解决的问题是,当我更改特定商品的库存状态(“instock”或“outofstock”)时产品变体,从创建的“产品”菜单的专用子页面访问,保存后不会在默认的“_stock_status”帖子元中保存/更新,尽管它在自定义(只是“stock_status”)中保存没有问题。 我该如何解决这个问题?
更新 [2021-07-01]
上面的代码没问题。观察到的问题是由另一个函数产生的,现在已经解决了。 但是,我将非常感谢您提供代码改进的建议。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。