В WooCommerce у меня есть пользовательское поле days_manufacture
для каждого продукта с разными (целыми) значениями.
Также у меня есть этот код, который отображает сообщение на странице с наибольшим значением «дней изготовления» :
add_action('woocommerce_before_cart', 'days_of_manufacture'); function days_of_manufacture() { $day_txt = ' ' . __('day', 'your_theme_domain_slug' ); $days_txt = ' ' . __('days', 'your_theme_domain_slug' ); $text = __('Your Order will be produced in: ', 'your_theme_domain_slug' ); $max_days = 0; foreach( WC()->cart->get_cart() as $cart_item ) if($cart_item['days_manufacture'] > $max_days) $max_days = $cart_item['days_manufacture']; if($max_days != 0) { if ($max_days == 1) $days_txt = $day_txt; $output = $text . $max_days . $days_txt; echo "<div class='woocommerce-info'>$output</div>"; } }
Теперь я хотел бы отобразить это сообщение на странице заказа с thankyou
в thankyou
My account > Orders > View order
.
Является ли это возможным?
Благодаря!
Да, это … но поскольку для этого нет доступных крючков для соответствующих шаблонов, вам придется переопределить 2 шаблона (для этого прочитайте, как переопределить шаблоны woocommerce через тему ).
Шаг 1 – Функция
function days_of_manufacture_order_view($order) { $day_txt = ' ' . __('day', 'your_theme_domain_slug' ); $days_txt = ' ' . __('days', 'your_theme_domain_slug' ); $text = __('Your Order will be produced in: ', 'your_theme_domain_slug' ); $max_days = 0; foreach( $order->get_items() as $item ) if(get_post_meta($item['product_id'], 'days_manufacture', true) > $max_days ) $max_days = get_post_meta($item['product_id'], 'days_manufacture', true); if($max_days != 0) { if ($max_days == 1) $days_txt = $day_txt; $output = $text . $max_days . $days_txt; echo "<div class='woocommerce-info' style='display:block !important;'>$output</div>"; // forcing display for some themes } }
Этот код находится в файле function.php вашей активной дочерней темы (или темы), а также в любом файле плагина.
Шаг 2 – вставка функции в шаблоны
1) Шаблон заказа моей учетной записи:
Этот шаблон находится в your_theme/woocommerce/myaccount/view-order.php
Вот выдержка из этого шаблона (с функцией внутри него):
<?php /** * View Order * * Shows the details of a particular order on the account page. * * This template can be overridden by copying it to yourtheme/woocommerce/myaccount/view-order.php. * * HOWEVER, on occasion WooCommerce will need to update template files and you * (the theme developer) will need to copy the new files to your theme to * maintain compatibility. We try to do this as little as possible, but it does * happen. When this occurs the version of the template file will be bumped and * the readme will list any important changes. * * @see https://docs.woocommerce.com/document/template-structure/ * @author WooThemes * @package WooCommerce/Templates * @version 2.6.0 */ if ( ! defined( 'ABSPATH' ) ) { exit; } ?> <?php days_of_manufacture_order_view($order); // <== inserted Here ?> <p><?php // … … …
2) Шаблон порядка просмотра Thankyou:
Этот шаблон находится в your_theme/woocommerce/checkout/thankyou.php
Вот выдержка из этого шаблона (с функцией внутри него):
<?php /** * Thankyou page * * This template can be overridden by copying it to yourtheme/woocommerce/checkout/thankyou.php. * * HOWEVER, on occasion WooCommerce will need to update template files and you * (the theme developer) will need to copy the new files to your theme to * maintain compatibility. We try to do this as little as possible, but it does * happen. When this occurs the version of the template file will be bumped and * the readme will list any important changes. * * @see https://docs.woocommerce.com/document/template-structure/ * @author WooThemes * @package WooCommerce/Templates * @version 2.2.0 */ if ( ! defined( 'ABSPATH' ) ) { exit; } if ( $order ) : ?> <?php days_of_manufacture_order_view($order); // inserted Here ?> <?php if ( $order->has_status( 'failed' ) ) : ?>
Этот код проверен и работает
Рекомендации: