Определите, представляет ли идентификатор заказа WooCommerce подписку, а не родительский заказ или заказ на продление [д ⇐ Php
Определите, представляет ли идентификатор заказа WooCommerce подписку, а не родительский заказ или заказ на продление [д
Мы используем сторонний веб-сайт доставки, который получает уведомления из нашего магазина WooCommerce через установленные ими веб-перехватчики. Веб-хуки срабатывают при любом действии создания/обновления/удаления заказа WooCommerce. Однако мы не хотим, чтобы эти веб-перехватчики срабатывали при заказах на подписку, поскольку они являются чисто цифровыми и не требуют доставки. Итак, у нас есть собственный код, подключенный через woocommerce_webhook_should_deliver для отсеивания заказов на подписку.
В частности, мы можем использовать wcs_order_contains_subscription(), чтобы определить, является ли заказ «родительским» заказом для подписки. И мы можем использовать wcs_order_contains_renewal(), чтобы определить, является ли заказ заказом на «продление» подписки. Но если идентификатор заказа представляет собой саму подписку, ни один из них не работает, и встроенной альтернативы не существует.
Одно из решений — попытаться получить подписку с идентификатором заказа. Однако это неоднозначно, поскольку кажется, что он успешен, если идентификатор заказа является действительным заказом Woo. Поэтому мы дополнительно проверяем, есть ли у подписки родительский элемент. Если да, то это подписка. Пока что это работает.
Мой вопрос: является ли это надежным тестом того, представляет ли идентификатор заказа подписку? Или есть лучший/более прямой тест?
Код:
if($order = wc_get_order($order_id)) //проверяем идентификатор заказа { $sub = новая WC_Subscription($order_id); если ($parent_id = $sub->get_parent_id()) { //это подписка } еще { //это не подписка } } еще { //игнорируем, идентификатор заказа не существует } Изменить:
Мой вопрос был закрыт, поскольку он аналогичен этому вопросу здесь об определении идентификатора подписки по идентификатору заказа.
Однако это не совсем та ситуация, в которой я нахожусь. Мне не нужен идентификатор подписки — потенциально он уже есть. Мне просто нужен способ проверить идентификатор, чтобы определить, является ли это подпиской или просто заказом другого типа.
Я понимаю, что Woocommerce немного сбивает с толку этот вопрос, потому что у подписок также есть идентификаторы, а перехватчики Woocommerce, такие как woocommerce_webhook_should_deliver, предоставляют идентификаторы подписок и взаимозаменяемо, поэтому вы не знаете, какой тип вы используете получаем. В данном случае это проблема.
Связанный вопрос — хороший пример того, почему это проблематично. Если у вас уже есть идентификатор подписки и вы указываете его как $order_id, решение не сможет найти связанные подписки, и цикл никогда не прервется. Это само по себе можно использовать как своего рода тест, но вы будете полагаться на код, который не сможет найти подписку, что мне кажется немного обратным.
Я спрашиваю, существует ли общепринятый способ точно идентифицировать идентификатор заказа Woo как идентификатор «подписки», а не один из двух других типов «заказа» подписки, то есть родительский заказ (используемый для покупки подписку) или заказ на продление (используется для продолжения подписки).
Если я неправильно понимаю, как это работает (а это возможно!), прошу прощения.
Мы используем сторонний веб-сайт доставки, который получает уведомления из нашего магазина WooCommerce через установленные ими веб-перехватчики. Веб-хуки срабатывают при любом действии создания/обновления/удаления заказа WooCommerce. Однако мы не хотим, чтобы эти веб-перехватчики срабатывали при заказах на подписку, поскольку они являются чисто цифровыми и не требуют доставки. Итак, у нас есть собственный код, подключенный через woocommerce_webhook_should_deliver для отсеивания заказов на подписку.
В частности, мы можем использовать wcs_order_contains_subscription(), чтобы определить, является ли заказ «родительским» заказом для подписки. И мы можем использовать wcs_order_contains_renewal(), чтобы определить, является ли заказ заказом на «продление» подписки. Но если идентификатор заказа представляет собой саму подписку, ни один из них не работает, и встроенной альтернативы не существует.
Одно из решений — попытаться получить подписку с идентификатором заказа. Однако это неоднозначно, поскольку кажется, что он успешен, если идентификатор заказа является действительным заказом Woo. Поэтому мы дополнительно проверяем, есть ли у подписки родительский элемент. Если да, то это подписка. Пока что это работает.
Мой вопрос: является ли это надежным тестом того, представляет ли идентификатор заказа подписку? Или есть лучший/более прямой тест?
Код:
if($order = wc_get_order($order_id)) //проверяем идентификатор заказа { $sub = новая WC_Subscription($order_id); если ($parent_id = $sub->get_parent_id()) { //это подписка } еще { //это не подписка } } еще { //игнорируем, идентификатор заказа не существует } Изменить:
Мой вопрос был закрыт, поскольку он аналогичен этому вопросу здесь об определении идентификатора подписки по идентификатору заказа.
Однако это не совсем та ситуация, в которой я нахожусь. Мне не нужен идентификатор подписки — потенциально он уже есть. Мне просто нужен способ проверить идентификатор, чтобы определить, является ли это подпиской или просто заказом другого типа.
Я понимаю, что Woocommerce немного сбивает с толку этот вопрос, потому что у подписок также есть идентификаторы, а перехватчики Woocommerce, такие как woocommerce_webhook_should_deliver, предоставляют идентификаторы подписок и взаимозаменяемо, поэтому вы не знаете, какой тип вы используете получаем. В данном случае это проблема.
Связанный вопрос — хороший пример того, почему это проблематично. Если у вас уже есть идентификатор подписки и вы указываете его как $order_id, решение не сможет найти связанные подписки, и цикл никогда не прервется. Это само по себе можно использовать как своего рода тест, но вы будете полагаться на код, который не сможет найти подписку, что мне кажется немного обратным.
Я спрашиваю, существует ли общепринятый способ точно идентифицировать идентификатор заказа Woo как идентификатор «подписки», а не один из двух других типов «заказа» подписки, то есть родительский заказ (используемый для покупки подписку) или заказ на продление (используется для продолжения подписки).
Если я неправильно понимаю, как это работает (а это возможно!), прошу прощения.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Подписки WooCommerce - автоматически выполнять заказы на продление и статус подписки
Anonymous » » в форуме Php - 0 Ответы
- 16 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Свяжите вновь созданный разделенный заказ с покупателем из исходного заказа в WooCommerce.
Anonymous » » в форуме Php - 0 Ответы
- 44 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Свяжите вновь созданный разделенный заказ с покупателем из исходного заказа в WooCommerce.
Anonymous » » в форуме Php - 0 Ответы
- 27 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Страница сведений за заказ woocommerce> Порядок атрибуции заказа [закрыто]
Anonymous » » в форуме Php - 0 Ответы
- 15 Просмотры
-
Последнее сообщение Anonymous
-