Определите, представляет ли идентификатор заказа WooCommerce подписку, а не родительский заказ или заказ на продление [дPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Определите, представляет ли идентификатор заказа WooCommerce подписку, а не родительский заказ или заказ на продление [д

Сообщение Anonymous »


Мы используем сторонний веб-сайт доставки, который получает уведомления из нашего магазина 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 как идентификатор «подписки», а не один из двух других типов «заказа» подписки, то есть родительский заказ (используемый для покупки подписку) или заказ на продление (используется для продолжения подписки).

Если я неправильно понимаю, как это работает (а это возможно!), прошу прощения.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»