2016-09-12 7 views
1

В WooCommerce У меня есть настраиваемое поле days_manufacture для каждого продукта с разными (целыми) значениями.WooCommerce - Пользовательское уведомление на страницах заказа «Спасибо» и «Моя учетная запись»

Кроме того, я это код, который отображает сообщение на странице корзины с наибольшим значением «дней производства»:

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 порядке представления страницы и в My account > Orders > View order страниц.

Возможно ли это?

Спасибо!

ответ

1

Да, это ... но поскольку для этого нет доступных крючков для соответствующих шаблонов, вам придется переопределить 2 шаблона (для этого прочитайте how to override woocommerce templates via a theme).

Шаг 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')) : ?> 

Этот код проверен и работает


Ссылки:

+0

Отлично !!!! Это прекрасно работает! Tksss !!!! –

 Смежные вопросы

  • Нет связанных вопросов^_^