To modify the code to use the billing_phone instead of the billing email for tracking the order in WooCommerce I have tried to write a part of code for using on my function.php child-theme, but this code not working and when user click on track order button nothing happen and redirected on home page.
Please check my code and give me some advices.
<?php
// override the default order tracking shortcode
function custom_order_tracking_shortcode() {
remove_shortcode( 'woocommerce_order_tracking' );
add_shortcode( 'woocommerce_order_tracking', 'custom_order_tracking_shortcode_output' );
}
add_action( 'init', 'custom_order_tracking_shortcode' );
// output the order tracking form and handle the tracking logic
function custom_order_tracking_shortcode_output( $atts ) {
if ( is_null( WC()->cart ) ) {
return;
}
$atts = shortcode_atts( array(), $atts, 'woocommerce_order_tracking' );
$nonce_value = wc_get_var( $_REQUEST['woocommerce-order-tracking-nonce'], wc_get_var( $_REQUEST['_wpnonce'], '' ) );
if ( isset( $_REQUEST['orderid'] ) && wp_verify_nonce( $nonce_value, 'woocommerce-order_tracking' ) ) {
$order_id = empty( $_REQUEST['orderid'] ) ? 0 : ltrim( wc_clean( wp_unslash( $_REQUEST['orderid'] ) ), '#' );
$order_phone = empty( $_REQUEST['order_phone'] ) ? '' : wc_sanitize_phone_number( 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 number', 'woocommerce' ), 'error' );
} else {
$order = wc_get_order( apply_filters( 'woocommerce_shortcode_order_tracking_order_id', $order_id ) );
if ( $order && $order->get_id() && is_a( $order, 'WC_Order' ) && $order->get_billing_phone() === $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' );
}
// override the order tracking form template
function custom_order_tracking_form_template( $located, $template_name, $args, $template_path, $default_path ) {
if ( 'order/form-tracking.php' === $template_name ) {
$located = get_stylesheet_directory() . '/woocommerce/order/form-tracking.php';
}
return $located;
}
add_filter( 'wc_get_template', 'custom_order_tracking_form_template', 10, 5 );
// create the custom order tracking form template
function create_custom_order_tracking_form_template() {
$form_tracking_template = <<<HTML
<form action="<?php echo esc_url( wc_get_page_permalink( 'track_order' ) ); ?>" method="post">
<p><?php esc_html_e( 'To track your order, please enter your order number and mobile number in the boxes below and press the track button. The order number is provided to you through the receipt and SMS sent to you.', 'woocommerce' ); ?></p>
<div style="display: flex; flex-wrap: wrap;">
<p class="form-row form-row-first" style="flex: 1; padding-right: 10px;">
<label for="orderid"><?php esc_html_e( 'Order ID', 'woocommerce' ); ?></label>
<input class="input-text" type="text" name="orderid" id="orderid" placeholder="<?php esc_attr_e( 'Found in your order confirmation email.', 'woocommerce' ); ?>" />
</p>
<p class="form-row form-row-last" style="flex: 1; padding-left: 10px;">
<label for="order_phone"><?php esc_html_e( 'Billing Phone', 'woocommerce' ); ?></label>
<input class="input-text" type="text" name="order_phone" id="order_phone" placeholder="<?php esc_attr_e( 'Billing phone number.', 'woocommerce' ); ?>" />
</p>
</div>
<div class="clear"></div>
<?php wp_nonce_field( 'woocommerce-order_tracking', 'woocommerce-order-tracking-nonce' ); ?>
<p class="form-row">
<button type="submit" class="button" name="track"><?php esc_html_e( 'Track', 'woocommerce' ); ?></button>
</p>
</form>
HTML;
$dir = get_stylesheet_directory() . '/woocommerce/order';
if ( ! file_exists( $dir ) ) {
mkdir( $dir, 0755, true );
}
file_put_contents( $dir . '/form-tracking.php', $form_tracking_template );
}
add_action( 'after_setup_theme', 'create_custom_order_tracking_form_template' );
?>