WooCommerce — один из популярных плагинов для wordpress который позволяет реализовать весь базовый функционал для электронной коммерции. В виду своей простоты настройки и использования WooCommerce нашел своё применение среди множества интернет магазинов, у которых количество товаров варьируется от десятков, до тысячных значений. Так или иначе, каким удобным не был интернет-магазин, потребность в доработках становится необходимостью, и на помощь приходит хорошая документация, которая не всегда может оказаться в наличии.
В данной заметке мы рассмотрим пример использования хуков (hook), которые широко используются в wordpress. Для тех, кто не знает: хуки — это вызов некоторых ключевых функций, которые помещаются в различных участках кода, и в случае необходимости, чтобы не править непосредственно код плагина, либо каких-то других системных файлов, пользователи могут дописывать свой функционал в отдельном файле. Давайте уже приступим к примеру.
Первым делом, приведем стандартный список статусов для заказов в WooCommerce.
Как и подавляющее большинство интернет-магазинов, статусы заказов меняются в зависимости от оплаты и формирования заказа на сайте. Иногда возникает необходимость выполнить какие-либо дополнительные операции по заказу, к примеру, отправить какое-либо письмо на почтовый адрес, либо что-либо ещё. Удобно для этого использовать специальные хуки, которые вызываются при смене статуса заказа. Кто знаком с wordpress, наверное, уже понимает, как работают хуки, и как их использовать. Как правило для этого используется файл, находящийся в папке шаблона, и называется он function.php.
Найти файл function.php вы можете по пути:
/wp-content/themes/имя-шаблона/function.php
Давайте предположим, что нам нужно выполнить какой-либо код, по событию, которое должно происходить при смене заказа, допустим, когда у заказа выставляется статус «Выполнен». Для этого случая в WooCommerce есть специальные хуки, которые позволяют отлавливать события по каждому статусу. В нашем случае это woocommerce_order_status_completed.
Событие при смене статуса заказа на «выполнен»
add_action('woocommerce_order_status_completed', 'competedStatusOrder'); function competedStatusOrder( $order_id ) { .... }
Таким образом внутри функции нам предстоит лишь добавить свой код, который будет выполнен при смене статуса заказа, в качестве аргумента функции передается номер заказа, по которому в случае необходимости можно запросить детали заказа.
По этой аналогии, для каждого статуса можно сделать отдельные обработчики.
woocommerce_order_status_pending
woocommerce_order_status_failed
woocommerce_order_status_on-hold
woocommerce_order_status_processing
woocommerce_order_status_completed
woocommerce_order_status_refunded
woocommerce_order_status_cancelled
Удобство использования этого метода в том, что при обновлении плагина WooCommerce у вас не будет головной боли связанной с необходимостью исправления самого кода плагина. Плагин будет спокойно обновляться, а ваши дополнения останутся на сайте и не будут затёрты.
На этом всё, всего наилучшего!