WooCommerce – добавление категории товаров в таблицу заказов


Вот что я пытаюсь сделать и где.

В процессе проверки заказа, в плагине WooCommerce; вы попадаете на страницу, когда процесс проверки завершен. Он отображает обзор деталей заказа. Файл шаблона, используемый для вывода этой страницы, – order-details.php.

Вот что я хотел бы добавить

Я хотел бы отобразить категорию продукта продукта следующим образом:

введите описание изображения здесь

Это область кода, к которой я пытаюсь добавить, в первый раздел таблицы деталей заказа.

<tbody> <?php if ( sizeof( $order->get_items() ) > 0 ) { foreach( $order->get_items() as $item ) { $_product = apply_filters( 'woocommerce_order_item_product', $order->get_product_from_item( $item ), $item ); $item_meta = new WC_Order_Item_Meta( $item['item_meta'], $_product ); ?> <tr class="<?php echo esc_attr( apply_filters( 'woocommerce_order_item_class', 'order_item', $item, $order ) ); ?>"> <td class="product-name"> <?php if ( $_product && ! $_product->is_visible() ) echo apply_filters( 'woocommerce_order_item_name', $item['name'], $item ); else echo apply_filters( 'woocommerce_order_item_name', sprintf( '<a href="%s">%s</a>', get_permalink( $item['product_id'] ), $item['name'] ), $item ); echo apply_filters( 'woocommerce_order_item_quantity_html', ' <strong class="product-quantity">' . sprintf( '&times; %s', $item['qty'] ) . '</strong>', $item ); 

Это мое понимание до сих пор;

  • Применяется пользовательский запрос.
  • То, что для каждого продукта перечислены детали, повторяется.
  • Что класс WooCommerce используется для получения определенного метаданного продукта.

Мое понимание – это наблюдения на моем нынешнем уровне знаний.

Я надеялся, что могу использовать что-то вроде

 echo apply_filters( 'woocommerce_order_item_name', ' <strong class="product-category">' . e_( $item['product_cat'] ) . '</strong>', $item ); 

Я не могу найти более релевантный фильтр, и я действительно не уверен, что ['product_cat'] здесь даже имеет значение. Это пример того, как я пытаюсь решить свои требования.

Как вы можете сказать, я не работаю в PHP на полный рабочий день. Я умею как можно больше, когда смогу. Посоветуйте с благодарностью

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

 function kia_woocommerce_order_item_name( $name, $item ){ $product_id = $item['product_id']; $tax = 'product_cat'; $terms = wp_get_post_terms( $product_id, $tax, array( 'fields' => 'names' ) ); if( $terms && ! is_wp_error( $terms )) { $taxonomy = get_taxonomy($tax); $name .= '<label>' . $taxonomy->label . ': </label>' . implode( ', ', $terms ); } return $name; } add_filter( 'woocommerce_order_item_name', 'kia_woocommerce_order_item_name', 10, 2 ); 

В противном случае вы можете скопировать шаблон order-details.php в свою собственную тему (так что yourtheme/woocommerce/order/order-details.php и добавить код напрямую. Это даст вам больше контроля над тем, где вы хотите, чтобы категория появилась, так как там в этом разделе не так много крючков, но вы рискуете, если WooCommerce когда-либо изменяет этот код. Я работал над несколькими сайтами, которые сломались, потому что тема использовала устаревший шаблон.

В любом случае примером может быть:

 <?php /** * Order details * * @author WooThemes * @package WooCommerce/Templates * @version 2.2.0 */ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly global $woocommerce; $order = new WC_Order( $order_id ); ?> <h2><?php _e( 'Order Details', 'woocommerce' ); ?></h2> <table class="shop_table order_details"> <thead> <tr> <th class="product-name"><?php _e( 'Product', 'woocommerce' ); ?></th> <th class="product-total"><?php _e( 'Total', 'woocommerce' ); ?></th> </tr> </thead> <tfoot> <?php if ( $totals = $order->get_order_item_totals() ) foreach ( $totals as $total ) : ?> <tr> <th scope="row"><?php echo $total['label']; ?></th> <td><?php echo $total['value']; ?></td> </tr> <?php endforeach; ?> </tfoot> <tbody> <?php if ( sizeof( $order->get_items() ) > 0 ) { foreach( $order->get_items() as $item ) { $_product = apply_filters( 'woocommerce_order_item_product', $order->get_product_from_item( $item ), $item ); $item_meta = new WC_Order_Item_Meta( $item['item_meta'], $_product ); ?> <tr class="<?php echo esc_attr( apply_filters( 'woocommerce_order_item_class', 'order_item', $item, $order ) ); ?>"> <td class="product-name"> <?php if ( $_product && ! $_product->is_visible() ) echo apply_filters( 'woocommerce_order_item_name', $item['name'], $item ); else echo apply_filters( 'woocommerce_order_item_name', sprintf( '<a href="%s">%s</a>', get_permalink( $item['product_id'] ), $item['name'] ), $item ); echo apply_filters( 'woocommerce_order_item_quantity_html', ' <strong class="product-quantity">' . sprintf( '&times; %s', $item['qty'] ) . '</strong>', $item ); $item_meta->display(); // insert product category here $tax = 'product_cat'; $terms = wp_get_post_terms( $_product->id, $tax, array( 'fields' => 'names' ) ); if( $terms && ! is_wp_error( $terms )) { $taxonomy = get_taxonomy($tax); echo '<strong>' . $taxonomy->label . ': </strong>' . implode( ', ', $terms ); } // end edit if ( $_product && $_product->exists() && $_product->is_downloadable() && $order->is_download_permitted() ) { $download_files = $order->get_item_downloads( $item ); $i = 0; $links = array(); foreach ( $download_files as $download_id => $file ) { $i++; $links[] = '<small><a href="' . esc_url( $file['download_url'] ) . '">' . sprintf( __( 'Download file%s', 'woocommerce' ), ( count( $download_files ) > 1 ? ' ' . $i . ': ' : ': ' ) ) . esc_html( $file['name'] ) . '</a></small>'; } echo '<br/>' . implode( '<br/>', $links ); } ?> </td> <td class="product-total"> <?php echo $order->get_formatted_line_subtotal( $item ); ?> </td> </tr> <?php if ( $order->has_status( array( 'completed', 'processing' ) ) && ( $purchase_note = get_post_meta( $_product->id, '_purchase_note', true ) ) ) { ?> <tr class="product-purchase-note"> <td colspan="3"><?php echo wpautop( do_shortcode( $purchase_note ) ); ?></td> </tr> <?php } } } do_action( 'woocommerce_order_items_table', $order ); ?> </tbody> </table> <?php do_action( 'woocommerce_order_details_after_order_table', $order ); ?> <header> <h2><?php _e( 'Customer details', 'woocommerce' ); ?></h2> </header> <dl class="customer_details"> <?php if ( $order->billing_email ) echo '<dt>' . __( 'Email:', 'woocommerce' ) . '</dt><dd>' . $order->billing_email . '</dd>'; if ( $order->billing_phone ) echo '<dt>' . __( 'Telephone:', 'woocommerce' ) . '</dt><dd>' . $order->billing_phone . '</dd>'; // Additional customer details hook do_action( 'woocommerce_order_details_after_customer_details', $order ); ?> </dl> <?php if ( ! wc_ship_to_billing_address_only() && $order->needs_shipping_address() && get_option( 'woocommerce_calc_shipping' ) !== 'no' ) : ?> <div class="col2-set addresses"> <div class="col-1"> <?php endif; ?> <header class="title"> <h3><?php _e( 'Billing Address', 'woocommerce' ); ?></h3> </header> <address><p> <?php if ( ! $order->get_formatted_billing_address() ) _e( 'N/A', 'woocommerce' ); else echo $order->get_formatted_billing_address(); ?> </p></address> <?php if ( ! wc_ship_to_billing_address_only() && $order->needs_shipping_address() && get_option( 'woocommerce_calc_shipping' ) !== 'no' ) : ?> </div><!-- /.col-1 --> <div class="col-2"> <header class="title"> <h3><?php _e( 'Shipping Address', 'woocommerce' ); ?></h3> </header> <address><p> <?php if ( ! $order->get_formatted_shipping_address() ) _e( 'N/A', 'woocommerce' ); else echo $order->get_formatted_shipping_address(); ?> </p></address> </div><!-- /.col-2 --> </div><!-- /.col2-set --> <?php endif; ?> <div class="clear"></div>