繁体   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