php WooCommerce产品的SKU更新

q9rjltbz  于 2022-10-30  发布在  PHP
关注(0)|答案(3)|浏览(168)

我需要更新一个WooCommerce产品的SKU,但我没有尝试工作。
我正在尝试更新一个产品的SKU。我建立了一个新的选择自定义字段(在下面的代码中)在库存设置上使用我从另一个平台通过API导入的选项)。这工作正常。我可以保存代码,打印它。但我不能简单地用这个代码更新SKU。
我试了很多片段,但都不管用...

add_action( 'woocommerce_process_product_meta', 'save_leadlovers_custom_fields');
function save_leadlovers_custom_fields( $post_id )
{
    //These two guys works perfectly
    update_post_meta( $post_id, '_leadlovers_integration_check', esc_attr( $_POST['_leadlovers_integration_check'] ) );
    update_post_meta( $post_id, '_leadlovers_integration_product', esc_attr( $_POST['_leadlovers_integration_product'] ) );

    //First, I tried this... no success
    //update_post_meta( $post_id, '_sku', esc_attr( $_POST['_leadlovers_integration_product'] ) );

    //Then I tried this, with no changes, forcing by hand the 
    //update_post_meta( $post_id, '_sku', '30445' );

    //I tried using the function set_sku() too... nothing happens
    //$product = wc_get_product( $post_id );
    //$product->set_sku( get_post_meta( $post->ID, '_leadlovers_integration_product', true ) );

    //nothing too with this...
        $product = wc_get_product( $post_id );
    $product->set_sku( '30445' ) ;

        ///i tried even make the procedure on other function...

}

好吧,有人知道发生了什么,还是......什么都没发生??
谢谢你,

wsewodh2

wsewodh21#

update_post_meta实际上应该可以正常工作。您仍然应该将最后一个save函数用于另一个set_sku函数。

$product = wc_get_product( $post_id );
    $product->set_sku( '30445' );
    $product->save();

如果这也不起作用,那么你的woocommerce_process_product_meta钩子有问题,或者它在你希望的时间内不起作用。
编辑
或者我猜是这样的。实际上你可能过早地使用了钩子来保存 meta。所以你保存了一些东西,但是_sku在你的函数之后又被保存了。所以你应该尝试一个不同的钩子来确保它在正确的时间工作。如果你能提供更多的细节,我会很高兴的,这样我就可以帮助你了。
编辑2
我又看了一遍,也许钩子应该起作用。你能通过尝试这个来延迟运行时间吗?

add_action( 'woocommerce_process_product_meta', 'save_leadlovers_custom_fields', 50);
2skhul33

2skhul332#

add_action('woocommerce_before_product_object_save', 'before_product_save', 10, 2);

function before_product_save($product, $datastore) {

    $product->set_sku('thesku');
}

此挂接在将产品保存到数据库之前运行。此挂接专用于在保存之前更改任何产品数据。

ewm0tg9j

ewm0tg9j3#

感谢@Akin和@mujuonly...
我首先尝试将优先级设置为50并使用$product->set_sku(),但是,因此,我们需要一起使用$product->save...只是保存不起作用。

add_action( 'woocommerce_process_product_meta', 'save_leadlovers_custom_fields', 50);
function save_leadlovers_custom_fields( $post_id ){  
    $product = wc_get_product( $post_id );
    $product->set_sku( '12345' ) ;
    $product->save();
}

他们,我试图使用update_post_ meta与优先级设置为50,只是工作...

add_action( 'woocommerce_process_product_meta', 'save_leadlovers_custom_fields', 50);
function save_leadlovers_custom_fields( $post_id )
{
    // now updating the sku with my select...
    update_post_meta( $post_id, '_sku', esc_attr( $_POST['_leadlovers_integration_product'] ) );
}

谢谢

相关问题