[英]Submit woocommerce order tracking form from My Account custom tab
所以我在我的帳戶菜單中創建了一個新的自定義選項卡,名為“運輸跟蹤”,此頁面內的內容是 form-tracking.php 模板。
我的問題是當我按下提交按鈕來跟蹤訂單時,它會將我重定向到我的帳戶儀表板頁面。 所以我嘗試創建一個 ajax 表單提交,但沒有成功基於此帖子WooCommerce 跟蹤訂單提交 AJAX
我不介意表單提交是在 ajax 還是頁面刷新,我只想留在 Shipping Tracking 頁面
我的代碼:
/*
* Step 1. Add Link (Tab) to My Account menu
*/
add_filter ( 'woocommerce_account_menu_items', 'shippingTracking_link', 40 );
function shippingTracking_link( $menu_links ){
$menu_links = array_slice( $menu_links, 0, 5, true )
+ array( 'shipping-tracking' => 'Shipping Tracking' )
+ array_slice( $menu_links, 5, NULL, true );
unset( $menu_links['downloads'] );
return $menu_links;
}
/*
* Step 2. Register Permalink Endpoint
*/
add_action( 'init', 'misha_add_endpoint' );
function misha_add_endpoint() {
// WP_Rewrite is my Achilles' heel, so please do not ask me for detailed explanation
add_rewrite_endpoint( 'shipping-tracking', EP_ROOT | EP_PAGES );
}
/*
* Step 3. Content for the new page in My Account, woocommerce_account_{ENDPOINT NAME}_endpoint
*/
add_action( 'woocommerce_account_shipping-tracking_endpoint', 'misha_my_account_endpoint_content' );
function misha_my_account_endpoint_content() {
//get the order tracking form template
wc_get_template( 'order/form-tracking.php' );
}
/*
* Step 4
*/
// Go to Settings > Permalinks and just push "Save Changes" button.
好的所以我設法讓它像這樣工作:
使用wc_get_template('order/form-tracking.php'); 使表單無用,因此我們需要將其更改為echo do_shortcode('[woocommerce_order_tracking]');
在 form-tracking.php 里面我不得不改變
action="<?php echo esc_url( get_permalink( $post->ID ) ); ?>"
至
action="<?php wc_get_endpoint_url('shipping-tracking', '', get_permalink(get_option('woocommerce_myaccount_page_id'))); ?>"
為了在提交后留在我的帳戶 endpintes 中的同一頁面(在我的情況下是“/my-account/shipping-tracking”)
完整示例:
function.php:
/*
* Step 1. Add Link (Tab) to My Account menu
*/
add_filter ( 'woocommerce_account_menu_items', 'shippingTracking_link', 40 );
function shippingTracking_link( $menu_links ){
$menu_links = array_slice( $menu_links, 0, 5, true )
+ array( 'shipping-tracking' => 'Shipping Tracking' )
+ array_slice( $menu_links, 5, NULL, true );
unset( $menu_links['downloads'] );
return $menu_links;
}
/*
* Step 2. Register Permalink Endpoint
*/
add_action( 'init', 'misha_add_endpoint' );
function misha_add_endpoint() {
// WP_Rewrite is my Achilles' heel, so please do not ask me for detailed explanation
add_rewrite_endpoint( 'shipping-tracking', EP_ROOT | EP_PAGES );
}
/*
* Step 3. Content for the new page in My Account, woocommerce_account_{ENDPOINT NAME}_endpoint
*/
add_action( 'woocommerce_account_shipping-tracking_endpoint', 'misha_my_account_endpoint_content' );
function misha_my_account_endpoint_content() {
//get the order tracking form template
echo do_shortcode('[woocommerce_order_tracking]');
}
/*
* Step 4
*/
// Go to Settings > Permalinks and just push "Save Changes" button.
表單跟蹤.php:
<form action="<?php wc_get_endpoint_url('shipping-tracking', '', get_permalink(get_option('woocommerce_myaccount_page_id'))); ?>" method="post" class="woocommerce-form woocommerce-form-track-order track_order">
<p><?php esc_html_e( 'To track your order please enter your Order ID in the box below and press the "Track" button. This was given to you on your receipt and in the confirmation email you should have received.', 'woocommerce' ); ?></p>
<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>
<p class="form-row"><button type="submit" class="button" name="track" value="<?php esc_attr_e( 'Track', 'woocommerce' ); ?>"><?php esc_html_e( 'Track', 'woocommerce' ); ?></button></p>
<?php wp_nonce_field( 'woocommerce-order_tracking', 'woocommerce-order-tracking-nonce' ); ?>
</form>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.