Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用xml提要更改商业库存状态_Php_Wordpress_Woocommerce - Fatal编程技术网

Php 如何使用xml提要更改商业库存状态

Php 如何使用xml提要更改商业库存状态,php,wordpress,woocommerce,Php,Wordpress,Woocommerce,我在我的域中上载了一个xml文件,其中包含产品可用性。如何使用此更新库存状态?我在想下面的事情,但我不知道如何调用和使用它 function wc_update_product_stock_status() { global $xml; foreach($xml as $x) { $sku = $x->sku; $availability = $x->availability; switch($availa

我在我的域中上载了一个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();
        }
    }
}
我做错什么了吗?我需要添加一些东西来改善它吗


谢谢

您不能修改之前声明的函数,也不能使用之前声明的函数编写,因此如果您想编写自定义函数,可以执行以下操作:

if ( ! wp_next_scheduled( 'my_stock_update' ) ) {
    wp_schedule_event( time(), 'hourly', 'my_stock_update' );
}

add_action( 'my_stock_update', 'update_product_stock_status' );
注意,我已经修改了函数名

或者,如果需要,您可以在自定义功能中使用
wc\u-get\u-product\u-id\u-by\u-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
hook调用了这个函数,它在WordPress完成加载后但在发送任何头之前触发

但这当然不是在每次更新XML文件时使用WordPress cron job钩住函数的最佳方式。或者更好地使用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的更多详细信息,请查看以下链接:


您可以使用WordPress cron schedule在每次下载XML文件时运行此函数,也可以使用Linux cron运行函数I get Call to undefined function wc_update_product_stock_status(),我的代码不知道您是如何调用函数的?wc_update_product_stock_status();我需要钩子吗?