WooCommerce, Автоматически отменять заказы со статусом “в обработке” через X дней.

Вопрос или проблема

Пытаюсь использовать этот код в function.php, но он не работает… Есть идеи, в чем проблема?

// Чтобы изменить количество дней, просто измените '-7 дней' на ваше усмотрение
function get_unpaid_submitted() {        
            global $wpdb;

            $unpaid_submitted = $wpdb->get_col( $wpdb->prepare( "
                    SELECT posts.ID
                    FROM {$wpdb->posts} AS posts
                    WHERE posts.post_status="wc-processing"
                    AND posts.post_date < %s
            ", date( 'Y-m-d H:i:s', strtotime('-14 days') ) ) );

            return $unpaid_submitted;
    }

    // Эта функция исключает тип оплаты чеком.
    function wc_cancel_unpaid_submitted() {        
            $unpaid_submit = get_unpaid_submitted();

            if ( $unpaid_submit ) {                
                    foreach ( $unpaid_submit as $unpaid_order ) {                        
                            $order = wc_get_order( $unpaid_order );
                            $cancel_order = True;

                            foreach  ( $order->get_items() as $item_key => $item_values) {                                
                                    $manage_stock = get_post_meta( $item_values['variation_id'], '_manage_stock', true );
                                    if ( $manage_stock == "no" ) {                                        
                                            $payment_method = $order->get_payment_method();                                        
                                            if ( $payment_method == "cheque" ) {
                                                    $cancel_order = False;
                                            }
                                    }                                
                            }
                            if ( $cancel_order == True ) {
                                    $order -> update_status( 'cancelled', __( 'Pagamento não identificado e cancelado.', 'woocommerce') );
                            }
                    }
            }        
    }
    add_action( 'woocommerce_cancel_unpaid_submitted', 'wc_cancel_unpaid_submitted' );
    /* Конец кода. */

Вы должны знать, что вы можете сделать это прямо с помощью функции в вашем файле functions.php или в плагине, но это не лучшее решение. Для меня лучшее решение – это cron-задача, связанная с вашим действием, потому что вы хотите проверять статус оплаты ваших заказов каждый час/день/неделю/или месяц. Вы не хотите подключаться к сайту, чтобы каждый раз, когда вы хотите проверить этот статус, функция работала.

(Кстати, извините за мой плохой английский)

Чтобы ответить на ваш вопрос, я нашел ваш код здесь: https://wordpress.org/support/topic/expiring-on-hold-cheque-orders-after-x-days/#post-10000589

Я думаю, что это решение сработает только в том случае, если вы добавите действие в cron-задачу.

Ответ или решение

Конечно, давайте разберёмся, как вы можете автоматизировать процесс отмены заказов WooCommerce со статусом "в обработке" после определённого количества дней.

Прежде всего, ваш код имеет несколько ошибок, которые могут препятствовать его корректному выполнению. Этот код предполагает, что функция wc_cancel_unpaid_submitted будет выполняться каждый раз, когда срабатывает ваш установленный хук woocommerce_cancel_unpaid_submitted. Однако, судя по предоставленной информации, этот хук не привязан к событию, которое инициируется автоматически. Это означает, что ваш код не будет запускаться сам по себе, если ему не предоставить соответсвующий триггер.

Исправление кода и добавление проверки на основе cron-задач:

  1. Создание cron-задачи в WordPress: Чтобы ваш процесс автоматизации срабатывал по расписанию, вы можете использовать WordPress Cron для выполнения задачи с определённой периодичностью.

  2. Исправление синтаксических ошибок:

    • Убедитесь, что вы используете корректные синтаксические символы PHP. Например, замена -&gt; на ->.
  3. Обновлённый код:

// Регистрация cron-задачи
if (!wp_next_scheduled('woocommerce_cancel_unpaid_submitted')) {
    wp_schedule_event(time(), 'daily', 'woocommerce_cancel_unpaid_submitted');
}

// Получение неоплаченных заказов
function get_unpaid_submitted() {        
    global $wpdb;
    $unpaid_submitted = $wpdb->get_col($wpdb->prepare(
        "SELECT posts.ID
         FROM {$wpdb->posts} AS posts
         WHERE posts.post_status = 'wc-processing'
         AND posts.post_date < %s",
        date('Y-m-d H:i:s', strtotime('-14 days'))
    ));
    return $unpaid_submitted;
}

// Отмена неоплаченных заказов
function wc_cancel_unpaid_submitted() {        
    $unpaid_submit = get_unpaid_submitted();

    if ($unpaid_submit) {
        foreach ($unpaid_submit as $unpaid_order) {
            $order = wc_get_order($unpaid_order);
            $cancel_order = true;

            foreach ($order->get_items() as $item_key => $item_values) {
                $manage_stock = get_post_meta($item_values['variation_id'], '_manage_stock', true);
                if ($manage_stock == "no") {
                    $payment_method = $order->get_payment_method();
                    if ($payment_method == "cheque") {
                        $cancel_order = false;
                    }
                }
            }
            if ($cancel_order) {
                $order->update_status('cancelled', __('Pagamento não identificado e cancelado.', 'woocommerce'));
            }
        }
    }
}
add_action('woocommerce_cancel_unpaid_submitted', 'wc_cancel_unpaid_submitted');

Дополнительные рекомендации:

  • Оптимизация SEO: Убедитесь, что документация вашего сайта объясняет посетителям, как и зачем заказы отменяются, это может повысить доверие пользователей.
  • Тестирование: Протестируйте ваш скрипт в безопасной среде прежде, чем внедрять его на рабочем веб-сайте, чтобы предотвратить возможные ошибки.

Заключение

Автоматизация отмены заказов может значительно улучшить управление заказами в WooCommerce. Применив cron-задачи, вы позволяете вашему сайту обрабатывать заказы без ручного вмешательства, что освобождает ресурсы и повышает эффективность бизнеса. Надеюсь, данное руководство окажется полезным для достижения ваших целей.

Оцените материал
Добавить комментарий

Капча загружается...