Проверьте, существует ли определенная плата в пунктах заказа - PullRequest
0 голосов
/ 27 мая 2019

Я добавил дополнительные сборы к заказам, один из которых необязательно (клиент может выбрать его на странице оформления заказа с помощью радиокнопки AJAX).

Моя цель - отобразить пользовательское сообщение в учетной записи клиента, указав в только те заказы, в которые была добавлена ​​дополнительная плата.

Итак, скажем, у меня есть 3 комиссии за размещенный заказ (которые хранятся в таблице wp_woocommerce_order_items как fee в столбце order_item_type).

Один из этих трех сборов называется Optional Fee ( тот, который необходим для моей цели ).

Как проверить, существует ли это Optional Fee в товарах заказа?

Я начал со следующего кода, но он получает только название платы, которая была сохранена в последний раз, и поэтому не будет совпадать с Optional Fee.

$order = wc_get_order( $order_id );

foreach ( $order->get_items('fee') as $item_id => $item ) {

    $fee_name = $item->get_name(); // This only gets me the name of the last fee stored in order items table.

    if ( $fee_name == 'Optional Fee' ) {

            echo 'Custom message';

        }
}

Я думаю, что мне нужно как-то получить список сборов (это массив?) И проверить, существует ли Optional Fee в этом списке, но я не могу понять, как это сделать, и не смог найти работающее решение. пока что.

1 Ответ

0 голосов
/ 28 мая 2019

После 2 дней проб и ошибок я наконец понял это. Я не знаю, является ли это лучшим решением, но оно работает.

По сути, мне нужно было вернуть истинное утверждение, если Optional Fee было обнаружено при циклическом просмотре пунктов оплаты заказа.

Если кому-то нужно что-то подобное, вот код:

$order = wc_get_order( $order_id );

$optional_fee_exists = false;

   $fee_counter = 0;

   foreach ( $order->get_fees() as $item_fee ) {

       $fee_counter++;

       $fee_name = $item_fee->get_name();

       if ( $fee_name == 'Optional Fee' ) {

           $optional_fee_exists = true;

       }
   }


if ( $optional_fee_exists ) {

   //do stuff;

}

...