php - theme - WooCommerce: Atribuindo um endpoint a um modelo personalizado nas minhas páginas de conta
woocommerce theme hierarchy (2)
Essa função adiciona uma guia chamada "Página especial" na lista de guias "Minha conta":
add_filter( 'woocommerce_account_menu_items' , 'jc_menu_panel_nav' );
function jc_menu_panel_nav() {
$items = array(
'dashboard' => __( 'Dashboard', 'woocommerce' ),
'orders' => __( 'Orders', 'woocommerce' ),
'downloads' => __( 'Downloads', 'woocommerce' ),
'edit-address' => __( 'Addresses', 'woocommerce' ),
'payment-methods' => __( 'Payment Methods', 'woocommerce' ),
'edit-account' => __( 'Account Details', 'woocommerce' ),
'special-page' => __( 'Special Page', 'woocommerce' ), // My custom tab here
'customer-logout' => __( 'Logout', 'woocommerce' ),
);
return $items;
}
Isso resulta nisso:
Mas o link aponta para
my-account/special-page/
e, naturalmente, fornece um erro 404.
Como posso atribuir esse URL a um arquivo chamado
special-page.php
?
Existe uma maneira melhor de usar um modelo em sua página personalizada no woocommerce:
function my_custom_endpoint_content() {
wc_get_template( 'myaccount/special-page.php' );
}
add_action( 'woocommerce_account_special-page_endpoint', 'my_custom_endpoint_content' );
isso deve funcionar sem usar o filtro wc_get_template.
Finalmente eu poderia resolver o problema usando um trecho fornecido para as mesmas pessoas do WooCommerce (há mais dicas nessa página). Para qualquer um interessado, cole todo o seguinte código em functions.php:
function my_custom_endpoints() {
add_rewrite_endpoint( 'special-page', EP_ROOT | EP_PAGES );
}
add_action( 'init', 'my_custom_endpoints' );
function my_custom_query_vars( $vars ) {
$vars[] = 'special-page';
return $vars;
}
add_filter( 'query_vars', 'my_custom_query_vars', 0 );
function my_custom_flush_rewrite_rules() {
flush_rewrite_rules();
}
add_action( 'wp_loaded', 'my_custom_flush_rewrite_rules' );
Acho que dessa forma permite mais controle para ordenar / renomear o menu:
function my_custom_my_account_menu_items( $items ) {
$items = array(
'dashboard' => __( 'Dashboard', 'woocommerce' ),
'orders' => __( 'Orders', 'woocommerce' ),
//'downloads' => __( 'Downloads', 'woocommerce' ),
//'edit-address' => __( 'Addresses', 'woocommerce' ),
//'payment-methods' => __( 'Payment Methods', 'woocommerce' ),
'edit-account' => __( 'Edit Account', 'woocommerce' ),
'special-page' => 'Special Page',
'customer-logout' => __( 'Logout', 'woocommerce' ),
);
return $items;
}
add_filter( 'woocommerce_account_menu_items', 'my_custom_my_account_menu_items' );
Na função a seguir incluí o arquivo para manter alguma "ordem", mas também admite código direto.
Certifique-se de colocar o arquivo
special-page.php
na pasta
myaccount
.
function my_custom_endpoint_content() {
include 'woocommerce/myaccount/special-page.php';
}
add_action( 'woocommerce_account_special-page_endpoint', 'my_custom_endpoint_content' );
Importante: Uma vez feito isso, vá para Dashboard> Configurações> Permalinks e clique em "Salvar configurações" para liberar regras de reescrita (obrigado @optimiertes)
Fonte: página Tabbed My Account