我在我的域中上传了一个包含产品可用性的xml文件。我该如何更新库存状态?我在考虑以下内容,但对于如何调用和使用它感到困惑
function wc_update_product_stock_status() {
global $xml;
foreach($xml as $x) {
$sku = $x->sku;
$availability = $x->availability;
switch($availability) {
case 1:
$status='instock';
break;
case 0:
$status='outofstock';
break;
}
// get the product ID from the SKU
$product_id = $wpdb->get_var( $wpdb->prepare( "SELECT post_id FROM $wpdb->postmeta WHERE meta_key='_sku'AND meta_value='%s' LIMIT 1", $sku ));
$product = wc_get_product( $product_id );
if ( $product ) {
$product->set_stock_status( $status );
$product->save();
}
}
}
我做错什么了吗?我需要添加一些东西使其变得更好吗?
谢谢
答案 0 :(得分:0)
您不能修改之前声明的woocommerce函数,也不能编写使用之前声明的相同函数,因此,如果要编写自定义函数,可以执行以下操作:
注意,我已经修改了函数名称
function update_product_stock_status() {
global $xml;
foreach ( $xml as $x ) {
$sku = $x->sku;
$availability = $x->availability;
switch ( $availability ) {
case 1:
$status = 'instock';
break;
case 0:
$status = 'outofstock';
break;
}
// get the product ID from the SKU
$product_id = wc_get_product_id_by_sku( $sku );
$product = wc_get_product( $product_id );
if ( $product ) {
$product->set_stock_status( $status );
$product->save();
}
}
}
add_action( 'init', 'update_product_stock_status' );
,或者如果您愿意,可以在自定义函数中使用wc_get_product_id_by_sku
,如下所示:
function update_product_stock_status() {
global $xml;
foreach ( $xml as $x ) {
$sku = $x->sku;
$availability = $x->availability;
switch ( $availability ) {
case 1:
$status = 'instock';
break;
case 0:
$status = 'outofstock';
break;
}
// get the product ID from the SKU
$product_id = wc_get_product_id_by_sku( $sku );
if ( $product_id ) {
wc_update_product_stock_status( $product_id, $status );
}
}
}
add_action( 'init', 'update_product_stock_status' );
我使用init
钩子调用了此函数,该钩子在WordPress完成加载后但未发送任何标头之前触发。
但这当然不是最好的方法,您无需每次更新XML文件时都使用WordPress cron作业来挂接函数即可。或通过使用Linux crontab更好。
例如,要使用Wordpress Cron运行您的功能,可以通过添加以下内容来实现:
if ( ! wp_next_scheduled( 'my_stock_update' ) ) {
wp_schedule_event( time(), 'hourly', 'my_stock_update' );
}
add_action( 'my_stock_update', 'update_product_stock_status' );
函数上方的这段代码将每小时运行一次,当然您可以对其进行修改。
有关WordPress Cron的更多详细信息,请检查下面的链接: