Крючки для создания заказов исключительно в Woocommerce 3 - PullRequest
0 голосов
/ 30 августа 2018

Мне нужно определить, когда новый заказ WooCommerce успешно создан и настроен на «обработку» - это добавить некоторую дополнительную функциональность и т. Д. Это хорошо сделать на внешнем интерфейсе, так как его довольно легко подключить, когда заказ создается с помощью хуков WooCommerce woocommerce_thankyou или woocommerce_order_status_processing.

У меня проблема в том, что Я также хочу, чтобы это работало при создании нового заказа вручную через бэкэнд веб-сайта . Я использую некоторые настраиваемые поля при добавлении заказа вручную, который используется для управления заказом при его создании. К сожалению, хотя woocommerce_order_status_processing действительно работает для заказов администратора, он, похоже, срабатывает до сохранения метаданных заказа, поэтому, когда я пытаюсь получить какие-либо метаданные, он пуст.

Чтобы обойти это, я попробовал предложения на WooCommerce хуке для создания заказа от администратора или на этом GitHub потоке, который должен использовать хуки WordPress wp_insert_post или save_post_shop_order (save_post_{$post->post_type}). Это работает, чтобы решить мою проблему метаданных ордера, так как кажется, что она срабатывает после сохранения метаданных ордера.

Однако - он вызывает каждый раз, когда происходит обновление или новое сообщение, поэтому мне нужно найти способ определить, является ли это новое сообщение или нет. На этих хуках есть параметр $update, который предназначен для показа 'независимо от того, обновляется ли существующий пост или нет' , но по какой-то причине он всегда имеет значение true, даже если это новый пост / заказ.

Подведем итог:

  • Мне нужен хук WordPress / WooCommerce, который запускается после того, как мета ордера / поста создается через бэкэнд и , это может быть выполнено только в том случае, если ордер только что создан и не обновлен.

Единственный другой способ сделать это, о котором я могу подумать, - это это предложение о проверке даты публикации и даты изменения, но я просто подумал, что должен быть лучший способ сделать это!

Вот мой текущий код на всякий случай

function my_order_created ( $post_id, $post, $update ) {

    // Don’t run if $post_id doesn’t exist OR post type is not order OR update is true
    if ( ! $post_id || get_post_type( $post_id ) != 'shop_order' || $update == 1 ) {
        return;
    }

    $order = wc_get_order( $post_id );

    if ( $order && $order->has_status( 'processing' ) ){

        // Do something

    }    

}

add_action( 'wp_insert_post', 'my_order_created', 10, 3 );

1 Ответ

0 голосов
/ 30 августа 2018

С тех пор, как в Woocommerce 3 были реализованы методы CRUD и хранилища данных , существует несколько выделенных хуков , которые можно специально использовать для создания заказов

Это намного лучший вариант , поскольку он предназначен только для создания заказов Woocommerce .

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