puntos finales personalizados wooCommerce

Soy un desarrollador PHP bastante nuevo y lo que bash crear es un punto final personalizado para la página “myaccount”. Estoy intentando crear un punto final “Añadir invitado”. Me resulta muy difícil encontrar documentación en línea. Lo que he hecho hasta ahora es usar este repo de git hub

https://gist.github.com/neilgee/13ac00c86c903c4ab30544b2b76c483c/a43701564ab696e1586e2879591c890b67a5f1bf#file-woo-endpoints-order-php

Creé estos archivos y los puse en el directorio plugins / woocommerce / includes. Pero parecen no tener ningún efecto. ¿Los puse en el directorio correcto? ¿Estoy dispuesto a llamar a estas clases en otro lugar? No tengo idea de dónde me estoy equivocando. ¿Pueden algunos por favor educarme sobre este asunto?

query_vars[ self::$endpoint ] ); if ( $is_endpoint && ! is_admin() && is_main_query() && in_the_loop() && is_account_page() ) { // New page title. $title = __( 'My Stuff', 'woocommerce' ); remove_filter( 'the_title', array( $this, 'endpoint_title' ) ); } return $title; } /** * Insert the new endpoint into the My Account menu. * * @param array $items * @return array */ public function new_menu_items( $items ) { // Remove the logout menu item. $logout = $items['customer-logout']; unset( $items['customer-logout'] ); // Insert your custom endpoint. $items[ self::$endpoint ] = __( 'My Stuff', 'woocommerce' ); // Insert back the logout item. $items['customer-logout'] = $logout; return $items; } /** * Endpoint HTML content. */ public function endpoint_content() { wc_get_template( 'myaccount/navigation.php' ); ?> 

Hello World! - custom field can go here

<?php } /** * Plugin install action. * Flush rewrite rules to make our custom endpoint available. */ public static function install() { flush_rewrite_rules(); } } new My_Custom_My_Account_Endpoint(); // Flush rewrite rules on plugin activation. register_activation_hook( __FILE__, array( 'My_Custom_My_Account_Endpoint', 'install' ) );

Pero parecen no tener ningún efecto. ¿Los puse en el directorio correcto? ¿Estoy dispuesto a llamar a estas clases en otro lugar? No tengo idea de dónde me estoy equivocando. ¿Pueden algunos por favor educarme sobre este asunto?

Primero, creó una clase, pero nunca cargó ese archivo ni inició la clase. La mejor manera de hacerlo sería en tu propio complemento.

En segundo lugar, debe agregar add_rewrite_endpoint() a la función de instalación. De lo contrario, no sabe registrar el nuevo punto final y las reglas de reescritura se vacían, pero terminan exactamente igual que antes … lo que crea algunos errores 404.

En tercer lugar, WooCommerce reciente proporciona un filtro para el título del punto final. Y el contenido no necesita reproducir la división o navegación de Mi cuenta.

Probado y funcionando:

 dir = plugin_dir_path(__FILE__); $this->url = plugin_dir_url(__FILE__); // Load translation files add_action( 'plugins_loaded', array( $this, 'load_plugin_textdomain' ) ); // Actions used to insert a new endpoint in the WordPress. add_action( 'init', array( $this, 'add_endpoints' ) ); add_filter( 'query_vars', array( $this, 'add_query_vars' ), 0 ); // Insering your new tab/page into the My Account page. add_filter( 'woocommerce_account_menu_items', array( $this, 'new_menu_items' ) ); add_action( 'woocommerce_endpoint_' . self::$endpoint . '_title', array( $this, 'endpoint_title' ) ); add_action( 'woocommerce_account_' . self::$endpoint . '_endpoint', array( $this, 'endpoint_content' ) ); } /*-----------------------------------------------------------------------------------*/ /* Localization */ /*-----------------------------------------------------------------------------------*/ /** * Make the plugin translation ready * * @return void * @since 1.0 */ public function load_plugin_textdomain() { load_plugin_textdomain( 'wc-custom-endpoint' , false , dirname( plugin_basename( __FILE__ ) ) . '/languages/' ); } /*-----------------------------------------------------------------------------------*/ /* Endpoint */ /*-----------------------------------------------------------------------------------*/ /** * Register new endpoint to use inside My Account page. * * @see https://developer.wordpress.org/reference/functions/add_rewrite_endpoint/ */ public function add_endpoints() { add_rewrite_endpoint( self::$endpoint, EP_ROOT | EP_PAGES ); } /** * Add new query var. * * @param array $vars * @return array */ public function add_query_vars( $vars ) { $vars[] = self::$endpoint; return $vars; } /*-----------------------------------------------------------------------------------*/ /* Display */ /*-----------------------------------------------------------------------------------*/ /** * Set endpoint title. * * @return string */ public function endpoint_title() { return __( 'My Stuff', 'wc_custom_endpoint' ); } /** * Insert the new endpoint into the My Account menu. * * @param array $items * @return array */ public function new_menu_items( $items ) { // Remove the logout menu item. $logout = $items['customer-logout']; unset( $items['customer-logout'] ); // Insert your custom endpoint. $items[ self::$endpoint ] = __( 'My Stuff', 'wc_custom_endpoint' ); // Insert back the logout item. $items['customer-logout'] = $logout; return $items; } /** * Endpoint HTML content. */ public function endpoint_content() { ?> 

Hello World! - custom wc_get_template() can go here

add_endpoints(); flush_rewrite_rules(); } /** * Plugin install action. * Flush rewrite rules to make our custom endpoint available. */ public static function uninstall() { flush_rewrite_rules(); } } //end class: do not remove or there will be no more guacamole for you endif; // end class_exists check /** * Returns the main instance of WC_Custom_Endpoint to prevent the need to use globals. * * @since 1.0 * @return WC_Custom_Endpoint */ function WC_Custom_Endpoint() { return WC_Custom_Endpoint::instance(); } // Launch the whole plugin add_action( 'woocommerce_loaded', 'WC_Custom_Endpoint' ); // register activation hook register_activation_hook( __FILE__, array( 'WC_Custom_Endpoint', 'install' ) ); register_deactivation_hook( __FILE__, array( 'WC_Custom_Endpoint', 'uninstall' ) );