Проверка наличия в заказе товара с определенным значением атрибута Woocommerce - PullRequest
1 голос
/ 26 сентября 2019

Мне нужно проверить, есть ли товар, добавленный в корзину и купленный, в заказе.Т.е. когда пользователь покупает переменный продукт вместе с другими переменными продуктами, я хочу проверить, добавлен ли и куплен ли конкретный переменный продукт.Чтобы я мог динамически отображать некоторую информацию на странице Спасибо и электронное письмо, отправленное как администратору, так и клиенту.

Я пытался использовать " Проверка того, что определенное значение атрибута используется вКорзина товара (вариант продукта)" код ответа, , но это не работает на странице Спасибо, как только продукт приобретен .

Я пытаюсь отобразитьдинамическое содержимое, если продукты в заказе имеют значение атрибута «Пользовательский», а также отображают дополнительную строку таблицы в таблице заказа, если в заказе есть продукт, имеющий значение атрибута «заказ», со следующим кодом:

function add_custom_row_to_order_table( $total_rows, $myorder_obj  ) {
     if ( is_attr_in_cart('custom') ) {
            $cmeasuement = __( 'Yes', 'domain' );
      }else{
            $cmeasuement = __( 'No', 'domain' );
     }

    $total_rows['el_custom'] = array(
       'label' => __('Custom Required?', 'domain'),
       'value'   => $cmeasuement,
    );

    return $total_rows;
}
add_filter( 'woocommerce_get_order_item_totals', 'add_custom_row_to_order_table', 10, 2 );

Но я продолжаю получать "Нет" (см. Скриншот ниже) , и причина в том, что функция is_attr_in_cart('custom') не определяет, находится ли атрибут в порядке.Помогите в правильном направлении, чтобы определить, есть ли в заказе продукт с определенным значением атрибута.

enter image description here

Любая помощь приветствуется.

1 Ответ

1 голос
/ 27 сентября 2019

Чтобы он работал с WooCommerce заказов , вам нужна еще одна пользовательская условная функция (где $attribute_value - это значение slug атрибута продукта, на который вы ориентируетесь) :

function is_attr_in_order( $order, $attribute_value ){
    $found = false; // Initializing

    // Loop though order items
    foreach ( $order->get_items() as $item ){
        // Only for product variations
        if( $item->get_variation_id() > 0 ){
            $product = $item->get_product(); // The WC_Product Object
            $product_id = $item->get_product_id(); // Product ID

            // Loop through product attributes set in the variation
            foreach( $product->get_attributes() as $taxonomy => $term_slug ){
                // comparing attribute parameter value with current attribute value
                if ( $attribute_value === $term_slug ) {
                    $found = true;
                    break;
                }
            }
        }
        if($found) break;
    }

    return $found;
}

Теперь эта условная функция будет работать в вашем коде на странице получения заказа (спасибо) , добавляя дополнительную строку в итоговую таблицу с "Да", если атрибут продуктанайден или "Нет", если нет:

add_filter( 'woocommerce_get_order_item_totals', 'add_custom_row_to_order_table', 10, 3 );
function add_custom_row_to_order_table( $total_rows, $order, $tax_display  ) {
    $domain    = 'woocommerce'; // The text domain (for translations)
    $term_slug = 'custom'; // <==  The targeted product attribute slug value

    $total_rows['custom'] = array(
       'label' => __( "Custom Required?", $domain ),
       'value'   => is_attr_in_order( $order, $term_slug ) ? __( "Yes", $domain ) : __( "No", $domain ),
    );

    return $total_rows;
}

Код находится в файле functions.php вашей активной дочерней темы (или активной темы) .Протестировано и работает.


Если вам нужно только настроить таргетинг на страницу Полученный ордер, вы будете использовать внутри подключенной функции следующее условие:

if( is_wc_endpoint_url('order-received') ) {
    // The code comes here
}
return $total_rows; // The final filter return outside
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...