2016-06-27 6 views
4

Я пытаюсь добавить пользовательскую страницу в раздел учетной записи клиентов, который позволит пользователю отредактировать свой заказ. В настоящее время я смог установить конечную точку для URL-адреса и поднять его, но мне нужно заставить 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'; 
} 

Затем вам нужно будет, чтобы вставить новый Редактировать заказ конечную точку в My меню Account:

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 способа):

  • Перейти на страницу Permalinks опций и повторно сохранить постоянные ссылки (благодаряhelgatheviking)
  • Вы также можете отключить/включить тему.

Литература:

+1

Чтобы сбросить правила перезаписи, вы также можете перейти на страницу параметров Permalinks и повторно сохранить постоянные ссылки. – helgatheviking

+0

@helgatheviking Всегда как woocommerce хорошая фея :) ... Я добавлю это сейчас. Спасибо. – LoicTheAztec

+1

Lol .... добро пожаловать! Вы тоже хорошо работаете в теге. – helgatheviking