自定义Woocommerce跟踪表单



Woocommerce有一个默认的跟踪表单,可以让客户查看他们的订单状态。

但是我希望将电子邮件请求替换为帐单电话号码(该值应为billing_phone(

知道如何改变吗?似乎用billing_phone改变order_email并不容易。

这是 woocommerce/order/tracking-form 中的部分.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>

谢谢大家。

对此没有简单的解决方案。由于核心WC流程是获取电子邮件输入并将其与订单计费电子邮件进行比较。 不幸的是,我找不到一种简单的方法来覆盖它。 但是,您可以考虑调整主题文件夹中模板文件的副本,以从代码而不是WC获得响应。

为此,您将需要:

  1. 更改表单中的 nonce 字段,以便自定义操作(然后您将能够从服务器端"捕获"并处理它:

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

  1. 复制(到你的函数.php(并从class-wc-shortcode-order-tracking.php调整方法output
<小时 />
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' );
}

我没有测试它,希望它会起作用。您可能需要进一步调整它。让我知道它是否对您有帮助

最新更新