Простого решения для этого не существует. Поскольку основной процесс W C состоит в том, чтобы получить ввод электронной почты и сравнить его с электронной почтой для выставления счета. К сожалению, я не смог найти простой способ переопределить его. Но вы можете настроить копию файла шаблона в папке вашей темы, чтобы получить ответ от вашего кода, а не W C.
. Для этого вам потребуется:
- Измените одноразовое поле в форме, чтобы действие было настроено (тогда вы сможете «поймать» и обработать его со стороны сервера:
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' );
}
Я не тестировал его и надеюсь, что он будет работать. Возможно, вам придется настроить его дальше. дайте мне знать, если это вам помогло