Natasha000
@Natasha000

Как запускать экспорт «в фоновом режиме» после каждого нового заказа в woocommerce?

Есть сайт на WordPress, на нем стоит WP All Export
Две функции добавлены плагином в один файл:
1) запускает экспорт по хуку woocommerce_thankyou (пробовала также woocommerce_new_order)
2) запускается после экспорта по хуку - делает проверку на "единичный запуск" ( и ...этот код я не добавила чтоб не захламлять....делит файл на части и отправляет по sftp )
Сейчас в обе функции я добавила (Код для ожидания "мусор")
<?php


function split_orders() {

$lockFile = __FILE__.'.lock';
$hasFile = file_exists($lockFile);
$lockFp = fopen($lockFile, 'w');

// Если блокировку получить не удалось, значит второй скрипт еще работает
if (!flock($lockFp, LOCK_EX | LOCK_NB)) {
    die('Sorry, one more script is running.');
}

// Если файл блокировки уже существовал, но не был залочен,
// значит предыдущий запуск завершился некорректно
if ($hasFile) {
    echo 'The previous running has been completed with an error.';
}

// Все в порядке, блокировка lock получен

// По окончании работы необходимо снять блокировку и удалить файл

register_shutdown_function(function() use ($lockFp, $lockFile) {
    flock($lockFp, LOCK_UN);
    unlink($lockFile);
});

// Код для ожидания "мусор"
$i=1;
for($i=1; $i<6; $i++) {
    $i;
    sleep(10);
}


}


add_action('pmxe_after_export', 'split_orders', 11 );



function start_export_orders() {

// Код для ожидания "мусор"	
$i=1;
for($i=1; $i<6; $i++) {
    $i;
    sleep(10);
}
	
// -- Change these to match your cron URLs
$trigger_url   = "http://example.com/wp-cron.php?import_key=A.y8AICS&import_id=68&action=trigger";
$execution_url = "http://example.com/wp-cron.php?import_key=A.y8AICS&import_id=68&action=processing";

// -- Request trigger URL
$json = json_decode(file_get_contents($trigger_url));

// Example of possible responses from trigger request: 
//    {"status":200,"message":"#68 Cron job triggered."}
//    {"status":403,"message":"Import #68 already triggered. Request skipped."}

if (!is_object($json) || !in_array($json->status,array(200))) {
  die("Error in triggering export <br>".PHP_EOL);
}


$step = 1;
do {
	

  // -- Adjust this as needed (or allowed) by your server	
  set_time_limit(300);   

	// -- Request execution/processing URL
  $json = json_decode(file_get_contents($execution_url));
	
  // Example of possible responses from execution/processing request: 
  //    {"status":200,"message":"Records Processed 10. Records imported 10 of 30."}
  //    {"status":200,"message":"Records Processed 10. Records imported 20 of 30."}
  //    {"status":200,"message":"Import #68 complete"}
  //    {"status":403,"message":"Import #68 is not triggered. Request skipped."}  
	
} while (is_object($json) && $json->status === 200);

}

add_action('woocommerce_thankyou', 'start_export_orders', 10 );


При оформлении нового заказа страница зависает пока не выполнится весь скрипт...
Помогите сделать чтобы он выполнялся на фоне и не беспокоил пользователя "бесконечной загрузкой страницы" так как весь этот процесс может занять длительное время..
  • Вопрос задан
  • 81 просмотр
Пригласить эксперта
Ответы на вопрос 1
init0
@init0
Старый моряк
Перенесите выполнение этого скрипта в cron. И еще хорошо было бы сам cron перенести в систему.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы