Как изменить статус акций woocommerce с помощью xml feed - PullRequest
0 голосов
/ 22 сентября 2018

В моем домене загружен 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();
        }
    }
}

Я что-то не так делаю?Нужно ли что-то добавить, чтобы сделать это лучше?

спасибо

1 Ответ

0 голосов
/ 22 сентября 2018

Вы не можете изменить функцию, которую 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, но перед отправкой любых заголовков.

но это, конечно, не лучший способ перехватить вашу функцию, используя задание WordPress cron, которое запускается при каждом обновлении файла XML,или лучше, используя 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, проверьте эту ссылку ниже:

Ссылка 1

Ссылка 2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...