簡體   English   中英

從“我的帳戶”自定義選項卡提交 woocommerce 訂單跟蹤表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM