2016-06-27 199 views
4

我正在嘗試將自定義頁面添加到客戶的帳戶部分,這將允許用戶編輯他們的訂單。目前,我已經能夠爲網址設置一個終點並將其提取出來,但我需要讓WooCommerce啓動頁面佈局並能夠設置模板位置。WooCommerce:將自定義模板添加到客戶帳戶頁面

的URL被稱爲:

/my-account/edit-order/55/ 

這是functions.php文件,與終點設置和模板覆蓋:

// Working 
add_action('init', 'add_endpoint'); 
function add_endpoint(){ 
    add_rewrite_endpoint('edit-order', EP_ALL); 
} 

// need something here to check for end point and run page as woocommerce 

// Not been able to test 
add_filter('wc_get_template', 'custom_endpoint', 10, 5); 
function custom_endpoint($located, $template_name, $args, $template_path, $default_path){ 

    if($template_name == 'myaccount/my-account.php'){ 
     global $wp_query; 
     if(isset($wp_query->query['edit-order'])){ 
      $located = get_template_directory() . '/woocommerce/myaccount/edit-order.php'; 
     } 
    } 

    return $located; 
} 

感謝您的幫助。

回答

4

這是WooCommerce 2.6+工作的解決方案來擴展和操縱標籤「我的帳戶」頁面端點(在此答案的最後見this reference),所以這裏是你可以做要達到什麼這樣的:

add_action('init', 'custom_new_wc_endpoint'); 
function custom_new_wc_endpoint() { 
    add_rewrite_endpoint('edit-order', EP_ROOT | EP_PAGES); 
} 

add_filter('query_vars', 'custom_query_vars', 0); 
function custom_query_vars($vars) { 
    $vars[] = 'edit-order'; 
    return $vars; 
} 

add_action('after_switch_theme', 'custom_flush_rewrite_rules');  
function custom_flush_rewrite_rules() { 
    flush_rewrite_rules(); 
} 

// The custom template location 
add_action('woocommerce_account_edit-order_endpoint', 'custom_endpoint_content'); 
function custom_endpoint_content() { 
    include 'woocommerce/myaccount/edit-order.php'; 
} 

然後你需要,插入新編輯訂單端點到我的帳戶菜單

add_filter('woocommerce_account_menu_items', 'custom_my_account_menu_items'); 
function custom_my_account_menu_items($items) { 
    // Remove the orders menu item. 
    $orders_item = $items['orders']; // first we keep it in a variable 
    unset($items['orders']); // we unset it then 

    // Insert your custom endpoint. 
    $items['edit-order'] = __('Edit Order', 'woocommerce'); 

    // Insert back the logout item. 
    $items['orders'] = $orders_item; // we set it back 

    return $items; 
} 

重要提示:您需要刷新重寫規則(2種方式)

  • 轉到永久鏈接選項頁,並重新保存固定鏈接(感謝helgatheviking
  • 您還可以禁用/啓用您的主題。

參考文獻:

+1

要刷新重寫規則,您還可以轉到永久鏈接選項頁面並重新保存永久鏈接。 – helgatheviking

+0

@helgatheviking始終作爲woocommerce好童話:) ...我現在將添加此。謝謝。 – LoicTheAztec

+1

大聲笑....不客氣!你也在標籤上做了一些很好的工作。 – helgatheviking

相關問題