DIV генерируется 2 раза на странице оформления заказа (WOO COMMERCE)? - PullRequest
1 голос
/ 14 февраля 2020

Проблема начинается, когда пользователь нажимает на флажок детали доставки. Div с классом order-detail-summary-outer автоматически генерируется, когда пользователь устанавливает флажок. На странице оформления заказа, когда пользователь устанавливает флажок для сведений о доставке, сводка заказа удваивается. Я сделал много модификаций в прошлом. Так что я думаю, что сделал ошибку. При нажатии на флажок информации о доставке. Сводка заказа становится двойной. только промежуточный итог, доставка и итого.

enter image description here enter image description here

Я предоставляю заказ-обзор. php код файла ниже

<?php
/**
 * Review order table
 *
 * This template can be overridden by copying it to yourtheme/woocommerce/checkout/review-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/
 * @package WooCommerce/Templates
 * @version 3.8.0
 */

defined( 'ABSPATH' ) || exit;
?>
<table class="shop_table woocommerce-checkout-review-order-table">
    <thead>
        <tr>
            <th class="product-name"><?php esc_html_e( 'Product', 'woocommerce' ); ?></th>
            <th class="product-total"><?php esc_html_e( 'Subtotal', 'woocommerce' ); ?></th>
        </tr>
    </thead>
    <tbody>
        <?php
        do_action( 'woocommerce_review_order_before_cart_contents' );

        foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
            $_product = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key );

            if ( $_product && $_product->exists() && $cart_item['quantity'] > 0 && apply_filters( 'woocommerce_checkout_cart_item_visible', true, $cart_item, $cart_item_key ) ) {
                ?>
                <tr class="<?php echo esc_attr( apply_filters( 'woocommerce_cart_item_class', 'cart_item', $cart_item, $cart_item_key ) ); ?>">
                    <td class="product-name">
                        <?php echo apply_filters( 'woocommerce_cart_item_name', $_product->get_name(), $cart_item, $cart_item_key ) . '&nbsp;'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
                        <?php echo apply_filters( 'woocommerce_checkout_cart_item_quantity', ' <strong class="product-quantity">' . sprintf( '&times;&nbsp;%s', $cart_item['quantity'] ) . '</strong>', $cart_item, $cart_item_key ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
                        <?php echo wc_get_formatted_cart_item_data( $cart_item ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
                    </td>
                    <td class="product-total">
                        <?php echo apply_filters( 'woocommerce_cart_item_subtotal', WC()->cart->get_product_subtotal( $_product, $cart_item['quantity'] ), $cart_item, $cart_item_key ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
                    </td>
                </tr>
                <?php
            }
        }

        do_action( 'woocommerce_review_order_after_cart_contents' );
        ?>
    </tbody>
</table>

<div class="order-detail-summary-outer">

        <div class="cart-subtotal">
            <h2><?php esc_html_e( 'Subtotal', 'woocommerce' ); ?></h2>
            <div class="order-detail-summary-item"><?php wc_cart_totals_subtotal_html(); ?></div>
        </div>

        <?php foreach ( WC()->cart->get_coupons() as $code => $coupon ) : ?>
            <div class="cart-discount coupon-<?php echo esc_attr( sanitize_title( $code ) ); ?>">
                <h2><?php wc_cart_totals_coupon_label( $coupon ); ?></h2>
                <div class="order-detail-summary-item"><?php wc_cart_totals_coupon_html( $coupon ); ?></div>
            </div>
        <?php endforeach; ?>
<h2>Shipping</h2>
        <?php if ( WC()->cart->needs_shipping() && WC()->cart->show_shipping() ) : ?>

            <?php do_action( 'woocommerce_review_order_before_shipping' ); ?>

            <?php wc_cart_totals_shipping_html(); ?>

            <?php do_action( 'woocommerce_review_order_after_shipping' ); ?>

        <?php endif; ?>

        <?php foreach ( WC()->cart->get_fees() as $fee ) : ?>
            <div class="fee">
                <h2><?php echo esc_html( $fee->name ); ?></h2>
                <div class="order-detail-summary-item"><?php wc_cart_totals_fee_html( $fee ); ?></div>
            </div>
        <?php endforeach; ?>

        <?php if ( wc_tax_enabled() && ! WC()->cart->display_prices_including_tax() ) : ?>
            <?php if ( 'itemized' === get_option( 'woocommerce_tax_total_display' ) ) : ?>
                <?php foreach ( WC()->cart->get_tax_totals() as $code => $tax ) : // phpcs:ignore WordPress.WP.GlobalVariablesOverride.OverrideProhibited ?>
                    <div class="tax-rate tax-rate-<?php echo esc_attr( sanitize_title( $code ) ); ?>">
                        <h2><?php echo esc_html( $tax->label ); ?></h2>
                        <div class="order-detail-summary-item"><?php echo wp_kses_post( $tax->formatted_amount ); ?></div>
                    </div>
                <?php endforeach; ?>
            <?php else : ?>
                <div class="tax-total">
                    <h2><?php echo esc_html( WC()->countries->tax_or_vat() ); ?></h2>
                    <div class="order-detail-summary-item"><?php wc_cart_totals_taxes_total_html(); ?></div>
                </div>
            <?php endif; ?>
        <?php endif; ?>

        <?php do_action( 'woocommerce_review_order_before_order_total' ); ?>

        <div class="order-total">
            <h2><?php esc_html_e( 'Total', 'woocommerce' ); ?></h2>
            <div class="order-detail-summary-item"><?php wc_cart_totals_order_total_html(); ?></div>
        </div>

        <?php do_action( 'woocommerce_review_order_after_order_total' ); ?>

</div>

Ответы [ 2 ]

0 голосов
/ 14 февраля 2020

На первый взгляд. Похоже, что вы изменили существующую структуру HTML. WooCommerce использует много ajax звонков для обновления этой информации (итоги корзины, итоги оформления заказа). Если вы изменили эту структуру и она не знает, куда ее отправить / заменить, она добавит новый раздел.

Как указано в LsKIT, это проблема JS, но в большей степени из-за модифицированный HTML.

0 голосов
/ 14 февраля 2020

Этот вопрос может быть вызван многими вещами, ошибкой в ​​sql запросе, javascript, который дублирует div, ...

Если это со стороны php, я не знаю WOOCommerce но можете ли вы применить метод \ array_unique () к вашему l oop для удаления дубликатов (например, код ниже в качестве временного решения).

<?php foreach ( \array_unique(WC()->cart->get_coupons()) as $code => $coupon ) : ?>

https://www.php.net/manual/en/function.array-unique.php

PS: Но я уверен, что это ошибка со стороны javascript.

...