Как заставить WordPress запускать скрипт каждый раз X? - PullRequest
0 голосов
/ 15 ноября 2018

Сегодня я столкнулся с интересной проблемой при разработке простого скрипта для клиента. Клиент хотел, чтобы его товарный ассортимент WooCommerce автоматически обновлялся каждый день в установленное время, но событие просто не запускалось. Ниже вы можете найти мою реализацию скрипта, который был написан в файле functions.php внутри папки темы:

// UPDATE WOOCOMMERCE STOCKS AGAINST BRANDSDISTRIBUTION
function my_cron_schedules($schedules){
    if(!isset($schedules["5min"])){
        $schedules["5min"] = array(
            'interval' => 5*60,
            'display' => __('Once every 5 minutes'));
    }
    if(!isset($schedules["1min"])){
        $schedules["1min"] = array(
            'interval' => 1*60,
            'display' => __('Once every 1 minutes'));
    }
    if(!isset($schedules["30min"])){
        $schedules["30min"] = array(
            'interval' => 30*60,
            'display' => __('Once every 30 minutes'));
    }
    return $schedules;
}

add_filter('cron_schedules','my_cron_schedules');

wp_schedule_event(time(), '1min', 'my_schedule_hook');

function my_schedule_hook(){
    // do something every day

    echo "creating data.csv because i didnt find it";

    $username = 'REMOVED FOR SECURITY';
    $password = 'REMOVED FOR SECURITY';
    $header = "Authorization: Basic " . base64_encode($username . ':' . $password);
    $url = 'https://www.brandsdistribution.com/restful/export/api/products.csv?acceptedlocales=pt_PT';

        if (!file_exists("data.csv")) {
            $body = wp_remote_retrieve_body(wp_remote_get($url, array('headers' => $header)));
            file_put_contents("data.csv", $body);
        }

        if (($handle = fopen("data.csv", "r")) !== false) {
            fgetcsv($handle);
            while (($data = fgetcsv($handle, 1000, ",")) !== false) {
                $num = count($data);
                for ($c = 0; $c < $num; $c++) {
                    $col[$c] = esc_attr($data[$c]);
                }

                $product_id = 7;//$col[28];
                $quantity = 200;//$col[31];

            wc_update_product_stock_status($product_id, $quantity);
            }

        }

        fclose($handle);
}

Мы настроили запуск события каждую 1 минуту в целях тестирования. Скрипт даже не достигает первого «если» внутри функции my_schedule_hook ().

Может быть, это что-то связанное с Хроном?

Заранее спасибо

1 Ответ

0 голосов
/ 15 ноября 2018

Итак, WordPress Cron - это не настоящий Cron. Это зависит от посещаемых страниц uppon, а затем запускается wp-cron.php. Поэтому, если обновление было запущено в определенный момент времени, оно будет запущено снова только после истечения установленного времени, и кто-то посетит сайт.

Вы можете отключить cron wp в wp-config (определить ('DISABLE_WP_CRON', true)) и использовать задание cron вашего веб-хоста для запуска wp-cron.php.

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