plugin plantilla personalizar para modificar entradas crear carrito php wordpress templates woocommerce account

php - plantilla - personalizar entradas wordpress



WooCommerce: asignaciĆ³n de un punto final a una plantilla personalizada en las pĆ”ginas de mi cuenta (3)

Finalmente, podría resolver el problema utilizando un fragmento proporcionado para las mismas personas de WooCommerce (hay más consejos en esa página). Para cualquier persona interesada, pegue todo el siguiente código en 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'' );

Creo que de esta manera permite más control para ordenar / renombrar el menú:

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'' );

En la siguiente función incluí el archivo para mantener algún "orden", pero también admite código directo.

Asegúrese de colocar el archivo special-page.php en la carpeta myaccount .

function my_custom_endpoint_content() { include ''woocommerce/myaccount/special-page.php''; } add_action( ''woocommerce_account_special-page_endpoint'', ''my_custom_endpoint_content'' );

Importante: una vez hecho esto, vaya a Panel de control> Configuración> Enlaces permanentes y haga clic en "Guardar configuración" para borrar las reglas de reescritura (gracias @optimiertes)

Fuente: página de Mi cuenta con pestañas

Esta función agrega una pestaña llamada "Página especial" en la lista de pestañas "Mi cuenta":

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; }

Eso da como resultado esto:

Pero el enlace apunta a my-account/special-page/ , y naturalmente da un error 404.

¿Cómo puedo asignar esta URL a un archivo llamado special-page.php ?


Hay una mejor manera de usar una plantilla en su página personalizada en woocommerce:

function my_custom_endpoint_content() { wc_get_template( ''myaccount/special-page.php'' ); } add_action( ''woocommerce_account_special-page_endpoint'', ''my_custom_endpoint_content'' );

Esto debería funcionar sin utilizar el filtro wc_get_template.


Primero my-account/special-page/ debería ser myaccount/special-page/ en woocommerce 2.6+.

Esta solución es incompleta y todavía estoy trabajando en ...

Puedes usar primero este gancho:

add_action( ''init'', ''add_wc_endpoint'' ); function add_wc_endpoint(){ add_rewrite_endpoint( ''special-page'', EP_ROOT | EP_PAGES ); }

Luego, filtre wc_get_template para llamar a sus archivos cuando la solicitud coincida con su punto final:

add_filter( ''wc_get_template'', ''custom_vc_endpoint'', 10, 5 ); function custom_vc_endpoint($located, $template_name, $args, $template_path, $default_path){ if( $template_name == ''myaccount/special-page.php'' ){ global $wp_query; if(isset($wp_query->query[''special-page''])){ $located = get_template_directory() . ''/woocommerce/myaccount/special-page.php''; } } return $located; }

Si usa un tema secundario, reemplace get_template_directory() por get_stylesheet_directory() ... Pegue este código en el archivo function.php de su tema o tema secundario activo.

Para evitar un error 404 "página no encontrada" , deberá actualizar las reglas de reescritura agregando a su código:

flush_rewrite_rules();

Actualización: Finalmente, ha encontrado una solución que funciona. Mira su respuesta.

Referencias