Я пытаюсь добавить пользовательскую страницу в раздел «учетная запись клиента», которая позволит пользователю редактировать свой заказ. В настоящее время я смог установить конечную точку для URL-адреса и забрать его, но мне нужно, чтобы 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;
}
Спасибо за любую помощь.
Это рабочее решение для WooCommerce 2.6+ расширить и манипулировать Конечные точки страницы «Моя учетная запись» с вкладками (Увидеть эта ссылка в конце этого ответа), вот что вы можете сделать для этого:
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)
- Вы также можете отключить / включить вашу тему.
Рекомендации:
Других решений пока нет …