После последнего обновления WooCommerce детали заказа больше не отображаются на странице «Спасибо». С тех пор я разработал дочернюю тему, используя тему WooCommerce Storefront. Независимо от того, что я пробовал, все, что я вижу, это сообщение «спасибо» на странице благодарности.Тема WooCommerce Storefront: как показать детали заказа на конечной точке заказа?
То, что я пытался до сих пор:
- Устранение весь процесс, чтобы найти что-нибудь, что может быть не так. Это включало следующее:
- Проверен на туалет шаблонной функции, которая вызывает шаблон Порядково детали и его связанный крючок действия (как есть)
- Удостоверяясь каталог WooCommerce моего ребенка тематического был правильно структурирован. Все остальное работает правильно, включая мои пользовательские фрагменты шаблона и их крючки.
- Обращаем особое внимание на синтаксические ошибки, в том числе те, которые могут бесшумно терпеть неудачу.
- Скопировал каталог WooCommerce из плагина в дочернюю тему. Это дало тот же точный результат - никаких деталей заказа на странице благодарности.
- Удалена страница WordPress Thank you и используется конечная точка WooCommerce по умолчанию ('order-received'). ПРИМЕЧАНИЕ. Из-за того, как это повлияло на макет и отображение, я вернулся к своей исходной структуре каталога WooCommerce, которая идентична каталогу шаблона WooCommerce, за вычетом некоторых подкаталогов. (UPDATE: Я на самом деле все еще использую скопированный каталог WooCommerce)
- Написал пользовательскую функцию с помощью action hook в файле functions.php дочерней темы без изменения вывода.
- В thankyou.php, создал крюк действий и написал функцию, которая используется для вызова wc_get_template Порядково детали, но это не сработало (молчание обязательно)
Обновленный WordPress от 4,5 до 4.6.1 Обновлен Storefront, и обновил любые устаревшие файлы шаблона WooCommerce в моей дочерней теме.
Code: **storefront-child/woocommerce/wc-template-functions.php** if (! function_exists('woocommerce_order_details_table')) { /** * Displays order details in a table. * * @param mixed $order_id * @subpackage Orders */ function woocommerce_order_details_table($order_id) { if (! $order_id) return; wc_get_template('order/order-details.php', array( 'order_id' => $order_id )); } } **storefront-child/woocommerce/wc-template-hooks.php /** * Order details. * * @see woocommerce_order_details_table() * @see woocommerce_order_again_button() */ add_action('woocommerce_view_order', 'woocommerce_order_details_table', 10); add_action('woocommerce_thankyou', 'woocommerce_order_details_table', 10); add_action('woocommerce_order_details_after_order_table', 'woocommerce_order_again_button'); **storefront-child/woocommerce/checkout/thankyou.php** if (! defined('ABSPATH')) { exit; } if ($order) : ?> <?php if ($order->has_status('failed')) : ?> <p class="woocommerce-thankyou-order-failed"><?php _e('Unfortunately your order cannot be processed as the originating bank/merchant has declined your transaction. Please attempt your purchase again.', 'woocommerce'); ?></p> <p class="woocommerce-thankyou-order-failed-actions"> <a href="<?php echo esc_url($order->get_checkout_payment_url()); ?>" class="button pay"><?php _e('Pay', 'woocommerce') ?></a> <?php if (is_user_logged_in()) : ?> <a href="<?php echo esc_url(wc_get_page_permalink('myaccount')); ?>" class="button pay"><?php _e('My Account', 'woocommerce'); ?></a> <?php endif; ?> </p> <?php else : ?> <p class="woocommerce-thankyou-order-received"><?php echo apply_filters('woocommerce_thankyou_order_received_text', __('Thank you. Your order has been received.', 'woocommerce'), $order); ?></p> <ul class="woocommerce-thankyou-order-details order_details"> <li class="order"> <?php _e('Order Number:', 'woocommerce'); ?> <strong><?php echo $order->get_order_number(); ?></strong> </li> <li class="date"> <?php _e('Date:', 'woocommerce'); ?> <strong><?php echo date_i18n(get_option('date_format'), strtotime($order->order_date)); ?></strong> </li> <li class="total"> <?php _e('Total:', 'woocommerce'); ?> <strong><?php echo $order->get_formatted_order_total(); ?></strong> </li> <?php if ($order->payment_method_title) : ?> <li class="method"> <?php _e('Payment Method:', 'woocommerce'); ?> <strong><?php echo $order->payment_method_title; ?></strong> </li> <?php endif; ?> </ul> <div class="clear"></div> <?php endif; ?> <?php do_action('woocommerce_thankyou_' . $order->payment_method, $order->id); ?> <?php do_action('woocommerce_thankyou', $order->id); ?>
<p class="woocommerce-thankyou-order-received"><?php echo apply_filters('woocommerce_thankyou_order_received_text', __('Thank you. Your order has been received.', 'woocommerce'), null); ?></p> <?php endif; ?> **storefront-child/woocommerce/order/order-details.php** if (! defined('ABSPATH')) { exit; } $order = wc_get_order($order_id); $show_purchase_note = $order->has_status(apply_filters('woocommerce_purchase_note_order_statuses', array('completed', 'processing'))); $show_customer_details = is_user_logged_in() && $order->get_user_id() === get_current_user_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> <tbody> <?php foreach($order->get_items() as $item_id => $item) { $product = apply_filters('woocommerce_order_item_product', $order->get_product_from_item($item), $item); wc_get_template('order/order-details-item.php', array( 'order' => $order, 'item_id' => $item_id, 'item' => $item, 'show_purchase_note' => $show_purchase_note, 'purchase_note' => $product ? get_post_meta($product->id, '_purchase_note', true) : '', 'product' => $product, )); } ?> <?php do_action('woocommerce_order_items_table', $order); ?> </tbody> <tfoot> <?php foreach ($order->get_order_item_totals() as $key => $total) { ?> <tr> <th scope="row"><?php echo $total['label']; ?></th> <td><?php echo $total['value']; ?></td> </tr> <?php } ?> </tfoot>
<?php if ($show_customer_details) : ?> <?php wc_get_template('order/order-details-customer.php', array('order' => $order)); ?> <?php endif; ?> **Rendered HTML** <div class="entry-content"> <div class="mailmunch-forms-before-post" style="display: none !important;"></div> <div class="woocommerce"> <p class="woocommerce-thankyou-order-received">Thank you. Your order has been received.</p> </div> <!-- This is where the order details should be --> <p> </p> <div class="mailmunch-forms-in-post-middle" style="display: none !important;"></div> <div class="mailmunch-forms-after-post" style="display: none !important;"></div> </div>
Я пропускаю что-то здесь, или там что-то происходит с WooCommerce? Любая помощь будет принята с благодарностью :)
UPDATE: У меня две версии jQuery: v1.11.3 и v1.12.4. Существуют также две разные версии загрузки jQueryUI: v1.10.4 и v1.11.4. В настоящее время отключить плагины WordPress и отметить, какие версии jquery загружаются в браузере.
ОБНОВЛЕНИЕ: Найден один плагин с использованием jQueryUI v1.10.4. Все еще ищем других.
ОБНОВЛЕНИЕ: Закончен, чтобы устранить все плагины, кроме WooCommerce (WSOD). Плагин MailChimp MailMunch делал вызов google go для старой версии jQuery (v1.11.3), в то время как Spider Player вызывал более старую версию jQueryUI. Деактивирует оба плагина, а STILL - тот же результат. Как будто WooCommerce просто игнорирует детали заказа в середине шаблона thankyou.php.
Любые мысли или идеи? Сейчас я действительно в растерянности. Я могу исправить проблемы jquery в отключенных плагинах, но это не устранит мою насущную проблему на странице «Спасибо».
Любая помощь будет принята с благодарностью :)
UPDATE: После того, как много больше работы, я определил, что WooCommerce использует ребенка темы thankyou.php. Дальнейшее устранение неполадок также показало, что $ order false. Вот почему я не вижу детали заказа на странице благодарности. Далее: Рисунок, почему $ order является ложным (это экземпляр WC_Order).
UPDATE: I did a stacktrace:
#0 /home/onyour6test/www/wp-content/plugins/woocommerce/includes/wc-core-functions.php(203): include()
#1 /home/onyour6test/www/wp-content/plugins/woocommerce/includes/shortcodes/class-wc-shortcode-checkout.php(212): wc_get_template('checkout/thanky...', Array)
#2 /home/onyour6test/www/wp-content/plugins/woocommerce/includes/shortcodes/class-wc-shortcode-checkout.php(59): WC_Shortcode_Checkout::order_received(NULL)
#3 /home/onyour6test/www/wp-content/plugins/woocommerce/includes/class-wc-shortcodes.php(71): WC_Shortcode_Checkout::output('')
#4 /home/onyour6test/www/wp-content/plugins/woocommerce/includes/class-wc-shortcodes.php(138): WC_Shortcodes::shortcode_wrapper(Array, '')
#5 /home/onyour6test/www/wp-includes/shortcodes.php(326): WC_Shortcodes::checkout('', '', 'woocommerce_che...')
#6 [internal function]: do_shortcode_tag(Arr in /home/onyour6test/www/wp-content/themes/storefront-child/woocommerce/checkout/thankyou.php on line 77
Я думаю, что преступник может быть в StackTrace # 2: ... WC_Shortcode_Checkout :: order_received (NULL).
Stacktrace # 6, похоже, подтверждает это, с do_shortcode_tag. Линия 77 относится к месту, где вызов $ порядка не удается, в частности, здесь:
<strong><? php _e('Order Number:', 'woocommerce'); ?></strong>
мне удалось получить эту конкретную строку кода для отображения, но он показал только «Заказ» в «Номер заказа», за которым следует 500 - внутренняя ошибка сервера. Ни одна из оставшихся оставшихся переменных HTML или параметров заказа, отображаемых на странице.
UPDATE: Это похоже на что-то с кодом WooCommerce. $ order_id пуст, заставляя $ order возвращать NULL. Это предотвращает отображение деталей заказа. Это должно отображаться по умолчанию, с возможностью отключить его в настройках WooCommerce.
Если вы отключили шаблон, дисплей работает правильно? Вы можете временно отключить шаблоны, включив режим отладки шаблона в настройках WooCommerce. Если это так, вам нужно обновить свои шаблоны в соответствии с новыми основными шаблонами и заново создать свои изменения. – helgatheviking
Я пробовал это только с родительской темой, с тем же результатом. Даже тема Twentysixteen сделала то же самое. Однако я снова попробую родительскую тему, так как вчера я обновил все, включая устаревшие шаблоны woocommerce для дочерней темы. –
UPDATE: переключился на родительскую тему (Storefront) и получил тот же результат - спасибо сообщение, но никаких деталей заказа. –