Skip to content

Instantly share code, notes, and snippets.

Revisions

  1. @claudiosanches claudiosanches revised this gist Apr 1, 2021. 1 changed file with 4 additions and 3 deletions.
    7 changes: 4 additions & 3 deletions custom-my-account-endpoint.php
    Original file line number Diff line number Diff line change
    @@ -14,7 +14,7 @@ class My_Custom_My_Account_Endpoint {
    public function __construct() {
    // 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 );
    add_filter( 'woocommerce_get_query_vars', array( $this, 'get_query_vars' ), 0 );

    // Change the My Accout page title.
    add_filter( 'the_title', array( $this, 'endpoint_title' ) );
    @@ -39,8 +39,8 @@ public function add_endpoints() {
    * @param array $vars
    * @return array
    */
    public function add_query_vars( $vars ) {
    $vars[] = self::$endpoint;
    public function get_query_vars( $vars ) {
    $vars[ self::$endpoint ] = self::$endpoint;

    return $vars;
    }
    @@ -91,6 +91,7 @@ public function new_menu_items( $items ) {
    */
    public function endpoint_content() {
    echo '<p>Hello World!</p>';
    // You can load a template here with wc_get_template( 'myaccount/my-custom-endpoint.php' );
    }

    /**
  2. @claudiosanches claudiosanches revised this gist Jun 8, 2016. 1 changed file with 1 addition and 9 deletions.
    10 changes: 1 addition & 9 deletions custom-my-account-endpoint.php
    Original file line number Diff line number Diff line change
    @@ -90,15 +90,7 @@ public function new_menu_items( $items ) {
    * Endpoint HTML content.
    */
    public function endpoint_content() {
    wc_get_template( 'myaccount/navigation.php' ); ?>

    <div class="woocommerce-MyAccount-content">

    <p>Hello World!</p>

    </div>

    <?php
    echo '<p>Hello World!</p>';
    }

    /**
  3. @claudiosanches claudiosanches created this gist Apr 20, 2016.
    116 changes: 116 additions & 0 deletions custom-my-account-endpoint.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,116 @@
    <?php
    class My_Custom_My_Account_Endpoint {

    /**
    * Custom endpoint name.
    *
    * @var string
    */
    public static $endpoint = 'my-custom-endpoint';

    /**
    * Plugin actions.
    */
    public function __construct() {
    // 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 );

    // Change the My Accout page title.
    add_filter( 'the_title', array( $this, 'endpoint_title' ) );

    // Insering your new tab/page into the My Account page.
    add_filter( 'woocommerce_account_menu_items', array( $this, 'new_menu_items' ) );
    add_action( 'woocommerce_account_' . self::$endpoint . '_endpoint', array( $this, 'endpoint_content' ) );
    }

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

    /**
    * Set endpoint title.
    *
    * @param string $title
    * @return string
    */
    public function endpoint_title( $title ) {
    global $wp_query;

    $is_endpoint = isset( $wp_query->query_vars[ self::$endpoint ] );

    if ( $is_endpoint && ! is_admin() && is_main_query() && in_the_loop() && is_account_page() ) {
    // New page title.
    $title = __( 'My Custom Endpoint', '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 Custom Endpoint', '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' ); ?>

    <div class="woocommerce-MyAccount-content">

    <p>Hello World!</p>

    </div>

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