Пользовательская форма отслеживания Woocommerce - PullRequest
0 голосов
/ 14 января 2020

Woocommerce имеет форму отслеживания по умолчанию, которая позволяет клиентам видеть статус своих заказов.

Но я хочу заменить запрос электронной почты на номер телефона для выставления счета (значение должно быть billing_phone)

Есть идеи как поменять? Кажется, что не так просто изменить order_email с billing_phone.

Вот часть в форме woocommerce / order / tracking. php

<p class="form-row form-row-first">
    <label for="orderid">
        <?php esc_html_e( 'Order ID', 'woocommerce' ); ?>
    </label>
    <input class="input-text" type="text" name="orderid" id="orderid" value="<?php echo isset( $_REQUEST['orderid'] ) ? esc_attr( wp_unslash( $_REQUEST['orderid'] ) ) : ''; ?>" placeholder="<?php esc_attr_e( 'Found in your order confirmation email.', 'woocommerce' ); ?>" />
</p>
<?php // @codingStandardsIgnoreLine ?>
<p class="form-row form-row-last">
    <label for="order_email">
        <?php esc_html_e( 'Billing email', 'woocommerce' ); ?>
    </label>
    <input class="input-text" type="text" name="order_email" id="order_email" value="<?php echo isset( $_REQUEST['order_email'] ) ? esc_attr( wp_unslash( $_REQUEST['order_email'] ) ) : ''; ?>" placeholder="<?php esc_attr_e( 'Email you used during checkout.', 'woocommerce' ); ?>" />
</p>
<?php // @codingStandardsIgnoreLine ?>
<div class="clear"></div>

Спасибо всем .

Пожалуйста, помогите мне, я совершенно нуб!

1 Ответ

1 голос
/ 14 января 2020

Простого решения для этого не существует. Поскольку основной процесс W C состоит в том, чтобы получить ввод электронной почты и сравнить его с электронной почтой для выставления счета. К сожалению, я не смог найти простой способ переопределить его. Но вы можете настроить копию файла шаблона в папке вашей темы, чтобы получить ответ от вашего кода, а не W C.

. Для этого вам потребуется:

  1. Измените одноразовое поле в форме, чтобы действие было настроено (тогда вы сможете «поймать» и обработать его со стороны сервера:

wp_nonce_field ('woocommerce-order_tracking_custom' , 'woocommerce-order-tracking-custom-nonce');

Скопируйте (для ваших функций. php) и настройте метод output из class-wc-shortcode-order-tracking.php
public static function output( $atts ) {
            // Check cart class is loaded or abort.
            if ( is_null( WC()->cart ) ) {
                return;
            }
...
...


wc_get_template( 'order/form-tracking.php' );

}

Примерно так:

add_action('init', 'handle_tracking_request');
function handle_tracking_request(  ) {
        // Check cart class is loaded or abort.
        if ( is_null( WC()->cart ) ) {
            return;
        }

        $nonce_value = wc_get_var( $_REQUEST['woocommerce-order-tracking-custom-nonce'], wc_get_var( $_REQUEST['_wpnonce'], '' ) );

        if ( isset( $_REQUEST['orderid'] ) && wp_verify_nonce( $nonce_value, 'woocommerce-order_tracking_custom' ) ) { 

            $order_id    = empty( $_REQUEST['orderid'] ) ? 0 : ltrim( wc_clean( wp_unslash( $_REQUEST['orderid'] ) ), '#' ); // WPCS: input var ok.
            $order_phone = empty( $_REQUEST['order_phone'] ) ? '' : sanitize_email( wp_unslash( $_REQUEST['order_phone'] ) ); 

            if ( ! $order_id ) {
                wc_print_notice( __( 'Please enter a valid order ID', 'woocommerce' ), 'error' );
            } elseif ( ! $order_phone ) {
                wc_print_notice( __( 'Please enter a valid phone', 'woocommerce' ), 'error' );
            } else {
                $order = wc_get_order( apply_filters( 'woocommerce_shortcode_order_tracking_order_id', $order_id ) );

                if ( $order && $order->get_id() && ( $order->get_billing_phone() ) === strtolower( $order_phone ) ) {
                    do_action( 'woocommerce_track_order', $order->get_id() );
                    wc_get_template(
                        'order/tracking.php', array(
                            'order' => $order,
                        )
                    );
                    return;
                } else {
                    wc_print_notice( __( 'Sorry, the order could not be found. Please contact us if you are having difficulty finding your order details.', 'woocommerce' ), 'error' );
                }
            }
        }

        wc_get_template( 'order/form-tracking.php' );
    }

Я не тестировал его и надеюсь, что он будет работать. Возможно, вам придется настроить его дальше. дайте мне знать, если это вам помогло

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...