从父产品外部更新 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 (将#修改为@)