I was recently working on integrating Affiliate WP into one of my friend’s sites. And after I set it up, I was a bit disappointed that the affiliate users would have a separate account page from the WooCommerce users.

For example, users that were checking order history, saved payment details, and more would go to /my-account. But, users that wanted to check their affiliate details would need to go to /affiliates.

The ideal situation seemed to be to add the affiliate page within the WooCommerce “My Account” page. So, I set about on a journey to make that happen.

Some discovery

It’s always nice to find out if others have solved the problem already. And I was in luck, as there were a few tutorials out there that discussed how to add menu items to the WooCommerce “My Account” page 😄 :

Tom writes great stuff, but this article I found of his is simply to add a menu item to the WooCommerce “My Account” page. It does not discuss how to add content to the tab. So, I worked mainly off of Rodolfo Melogli’s article which does cover how to add content to the tab.

What I ended up with

With just a few tweaks, I was able to integrate Affiliate WP in to the WooCommerce “My Account” page. I’ve included some high-level comments that explain what each section is for.

// Add the rewrite endpoint so that we don't 404 on the new My Account tab
function moh_add_aff_wp_endpoint() {
  add_rewrite_endpoint( 'aff', EP_ROOT | EP_PAGES );
}
add_action( 'init', 'moh_add_aff_wp_endpoint' );

// Add the new affiliate area link to the "My Account" menu
// if Affiliate WP is enabled and the current user is an affiliate.
//
// Ensure that the logout link stays at the bottom of the menu ;)
function moh_add_aff_wp_link_my_account( $items ) {
  if ( function_exists( 'affwp_is_affiliate' ) && affwp_is_affiliate() ) {
    $logout = array_pop( $items );
    $items['aff'] = 'Affiliate Area';
    $items[] = $logout;
  }
  return $items;
}
add_filter( 'woocommerce_account_menu_items', 'moh_add_aff_wp_link_my_account' );

// Render the Affiliate WP Content within the new tab if Affiliate WP is enabled
function moh_aff_wp_content() {
  if ( ! class_exists( 'Affiliate_WP_Shortcodes' ) ) {
    return;
  }
  $shortcode = new Affiliate_WP_Shortcodes;
  echo $shortcode->affiliate_area();
}
add_action( 'woocommerce_account_aff_endpoint', 'moh_aff_wp_content' );

// Make sure that the Affiliate WP tabs properly work
function moh_filter_aff_tabs( $url, $page_id, $tab ) {
  return esc_url_raw( add_query_arg( 'tab', $tab ) );
}
add_filter( 'affwp_affiliate_area_page_url', 'moh_filter_aff_tabs', 10, 3 );

Final result

Here are a couple of screenshots demonstrating what this should look like when you’re done.

Closing thoughts

As you can see, just this little bit of code gives us a pretty good visual integration between Affiliate WP and WooCommerce. I found myself asking if Affiliate WP should do this within the plugin, but with how many integrations that they handle, I’m not sure if it would make sense for them.

In the future, and after more testing to make sure that nothing breaks if one of the plugins is not enabled, perhaps this could be factored in to a plugin. Until then, you should be able to get this working by copying the code in to a small plugin on your site or throwing it in the functions.php of your theme.

25 thoughts on “Adding Affiliate WP Dashboard to WooCommerce My Account Page

  1. very helpful – been thinking that this is a method that makes a lot of sense for a while now – if we tried the plugin route, do you happen to know how (what code is required to call the plugin) and where we’d place that (which template files) – thanks in advance, and thanks again for the insight

    1. To get this working as a plugin, the only thing you should need is to add a plugin header which you can read about here: https://codex.wordpress.org/File_Header#Plugin_File_Header_Example

      Then you’d create a directory in wp-content/plugins called something like woo-affiliate-wp-integration. Then you’d create a PHP file called woo-affiliate-wp-integration.php and place the code above in that file. Be sure to add the beginning <?php.

      I’m currently running this on friend’s site as an mu-plugin and haven’t had any issues. Do let me know if you run into issues though.

      1. all seems to be working great – thanks again for the share
        one issue that may be unrelated but the LOGOUT tab at the bottom is not functioning properly, even though the signout text link on the same page seems to work (uses the WOO endpoint)
        … my-account/0/ is where the LOGOUT tab redirects
        whereas the signout redirects to … my-account/customer-logout/ (which works and is the default WC endpoint)

        is there anything in the code that may be causing this OR is it a theme issue

        thanks in advance

  2. I had issues with the log out too. try using:

    // Ensure that the logout link stays at the bottom of the menu 😉
    function moh_add_aff_wp_link_my_account( $items ) {
    if ( function_exists( ‘affwp_is_affiliate’ ) && affwp_is_affiliate() ) {
    return
    array_merge(
    array_slice( $items, 0, count( $items ) – 1 ),
    array( ‘aff’ => ‘Affiliate Area’ ),
    array_slice( $items, count( $items ) – 1 )
    );
    }
    return $items;
    }
    add_filter( ‘woocommerce_account_menu_items’, ‘moh_add_aff_wp_link_my_account’ );

    1. ok – thanks – the code above causes a fatal error with the plugin (at least for me)
      – did notice the emojis and removed, but perhaps there is something else that i am missing?

  3. This is great! BTW, getting:

    Warning: Missing argument 1 for Affiliate_WP_Shortcodes::affiliate_area(), called in /nas/content/staging/osana/wp-content/themes/uncode-child/functions.php on line 176 and defined in /nas/content/staging/osana/wp-content/plugins/affiliate-wp/includes/class-shortcodes.php on line 25

    with latest version of AffiliateWP

  4. Hey guys, I notice that you are having trouble with the logout, as it is written in Eric’s code – by the way, thanks for the great post Eric. Here is the issue…

    Change this line:
    $items[] = $logout;

    To this:
    $items[‘customer-logout’] = $logout;

    That should fix it! – Let me know when this works for you.

  5. Eric,

    I’ve added the code above as you indicated. It does in fact show up in the menu under the my account page, but when I click on it nothing happens.

    So when I view the link on the tab that shows up on the menu it displays the following: https://www.thedomain.com/store/my-account/?tab

    The /?tab displays no matter what menu item I’m on I can go to dashboard, then go to (Affiliate Area) and that shows up. I can do Orders then go to Affiliate Area and the/?tab shows up. Doesn’t matter.

    My affiliate page is named affiliate-area so in the code where the section talks about the logout link staying at the bottom I have it setup as such and left the rest of the code alone as indicated above.

    // Ensure that the logout link stays at the bottom of the menu 😉
    function moh_add_aff_wp_link_my_account( $items ) {
    if ( function_exists( ‘affwp_is_affiliate’ ) && affwp_is_affiliate() ) {
    $logout = array_pop( $items );
    $items[‘affiliate-area’] = ‘Affiliate Area’;
    $items[‘customer-logout’] = $logout;
    }

    What am I missing or not doing to make this work?

    1. If I leave the default $items[‘aff’] = ‘Affiliate Area’; in play I receive TWO Menu items on the My account menu top one shows /aff and the second shows /?tab and both doesn’t work.

      1. ok found the issue of the displaying, affiliatewp updated and provided an option to display the affiliate area link in the my account menu. I’ve disabled that by taking the check out and then copied the code above into the functions and received this error when I clicked on the Affiliate Area Menu item:

        “Warning: Missing argument 1 for Affiliate_WP_Shortcodes::affiliate_area(), called in /functions.php on line 129 and defined in /wp-content/plugins/affiliate-wp/includes/class-shortcodes.php on line 25”

        I’ve reviewed the lines and they in fact do match, I’ve logged out and back in with a test account and admin account and both display the same thing.

        ALL LINKS WORK AND EVERY LINK USED DISPLAYS THE SAME ERROR AT THE TOP OF THE AFFILIATE MENU.

        What am I missing?

  6. Good morning, so the Warning missing argument 1 has not been resolved. At first it was at line 129, but now it’s on 133 on the functions.php file.

    Warning: Missing argument 1 for Affiliate_WP_Shortcodes::affiliate_area(), called in /wp-content/plugins/theme-customisations-master/custom/functions.php on line 133 and defined in /wp-content/plugins/affiliate-wp/includes/class-shortcodes.php on line 25

    Not sure what I’m missing here, Here is the snippet of code I’ve put into the custom functions.php in the child theme:

    // *****Starting the My Account Page Affiliate Menu option addition section*****
    // Add the rewrite endpoint so that we don’t 404 on the new My Account tab
    function moh_add_aff_wp_endpoint() {
    add_rewrite_endpoint( ‘aff’, EP_ROOT | EP_PAGES );
    }
    add_action( ‘init’, ‘moh_add_aff_wp_endpoint’ );
    /** ——————————————————————————————————————————————————– */

    /**
    Add the new affiliate area link to the “My Account” menu
    if Affiliate WP is enabled and the current user is an affiliate.

    Ensure that the logout link stays at the bottom of the menu
    */
    function moh_add_aff_wp_link_my_account( $items ) {
    if ( function_exists( ‘affwp_is_affiliate’ ) && affwp_is_affiliate() ) {
    $logout = array_pop( $items );
    $items[‘aff’] = ‘Affiliate Area’;
    $items[‘customer-logout’] = $logout;
    }
    return $items;
    }
    add_filter( ‘woocommerce_account_menu_items’, ‘moh_add_aff_wp_link_my_account’ );
    /** ——————————————————————————————————————————————————– */

    // Render the Affiliate WP Content within the new tab if Affiliate WP is enabled

    function moh_aff_wp_content() {
    if ( ! class_exists( ‘Affiliate_WP_Shortcodes’ ) ) {
    return;
    }
    $shortcode = new Affiliate_WP_Shortcodes;
    echo $shortcode->affiliate_area();
    }
    add_action( ‘woocommerce_account_aff_endpoint’, ‘moh_aff_wp_content’ );

    // Make sure that the Affiliate WP tabs properly work

    function moh_filter_aff_tabs( $url, $page_id, $tab ) {
    return esc_url_raw( add_query_arg( ‘tab’, $tab ) );
    }
    add_filter( ‘affwp_affiliate_area_page_url’, ‘moh_filter_aff_tabs’, 10, 3 );
    // *****ENDing the My Account Page Affiliate Menu option addition section*****

    And on line 25 of the functions.php file is shows this:

    /**
    * Renders the affiliate area
    *
    * @since 1.0
    * @return string
    */
    public function affiliate_area( $atts, $content = null ) {

    // Ending line 25 code

    So I’m not sure as to where this error is actually taking place or how to fix it. Any idea?

  7. Hey Eric
    Thanks for the code, but unfortunately, the code only add a tab called AFFILIATE to MY ACCOUNT page and when clicked on it, it redirects out of woo MY ACCOUNT page to affiliate area page.
    I coppied the code as you provided it on the post without any modification.

    1. @NnochiriOnye, look for an _blank added somewhere, or make sure it’s rendering the menu item that’s what places the content inside the my account page.

      @eric, I found my issue, the missing arguments in section where it calls for the shortcode for the WP Content rendering the echo request $shortcode->affiliate_area (); is the code, but I had to place this inside the Parenthesis ( $atts, $content = null )

      Here is my corrected code for the function.php file to insert the Affiliate Area Menu item into the My Account Page and is functional according to today’s Version’s standard.

      *****Starting the My Account Page Affiliate Menu option addition section*****
      Add the rewrite endpoint so that we don’t 404 on the new My Account tab
      */
      function moh_add_aff_wp_endpoint() {
      add_rewrite_endpoint( ‘aff’, EP_ROOT | EP_PAGES );
      }
      add_action( ‘init’, ‘moh_add_aff_wp_endpoint’ );
      /** ——————————————————————————————————————————————————– */

      /**
      Add the new affiliate area link to the “My Account” menu
      if Affiliate WP is enabled and the current user is an affiliate.

      Ensure that the logout link stays at the bottom of the menu
      */
      function moh_add_aff_wp_link_my_account( $items ) {
      if ( function_exists( ‘affwp_is_affiliate’ ) && affwp_is_affiliate() ) {
      $logout = array_pop( $items );
      $items[‘aff’] = ‘Affiliate Area’;
      $items[‘customer-logout’] = $logout;
      }
      return $items;
      }
      add_filter( ‘woocommerce_account_menu_items’, ‘moh_add_aff_wp_link_my_account’ );
      /** ——————————————————————————————————————————————————– */

      // Render the Affiliate WP Content within the new tab if Affiliate WP is enabled

      function moh_aff_wp_content() {
      if ( ! class_exists( ‘Affiliate_WP_Shortcodes’ ) ) {
      return;
      }
      $shortcode = new Affiliate_WP_Shortcodes;
      echo $shortcode->affiliate_area();
      }
      add_action( ‘woocommerce_account_aff_endpoint’, ‘moh_aff_wp_content’ );

      // Make sure that the Affiliate WP tabs properly work

      function moh_filter_aff_tabs( $url, $page_id, $tab ) {
      return esc_url_raw( add_query_arg( ‘tab’, $tab ) );
      }
      add_filter( ‘affwp_affiliate_area_page_url’, ‘moh_filter_aff_tabs’, 10, 3 );
      // *****ENDing the My Account Page Affiliate Menu option addition section*****
      /**

      1. @koehlecafe, thanks for the reply. But as I mentioned on my first comment, I did not make any change to the code. I just highlight, copy and paste the code. I tried the one you supplied in your reply, but it deactivated the custom plugin I added it to and reported that the code triggered a fatal error.
        More help please.

        1. Do you have a child theme created? If so the child theme folder /wp-content/themes/childtheme/functions.php is where you should add this code. I attempted a customisation plugin (they spelled it that way not me) and it worked for awhile, but decided to move away from a storefront child theme and storefront altogether and picked up another one that was WooCommerce friendly, a lot of my errors started disappearing. Give us a break down of your setup without passing security information to us and let’s see if we can help.

          1. Am running sudney theme with a child theme I created using child theme configurator plugin. I added the code on a custom code, which only shows the AFFILIATE menu that redirects to the main affiliate area page.
            Am running latest woocommerce plugin and wordpress.

            To be specific, which exact information do you which to have?

          2. WordPress 4.8.2 running a parent Hestia Theme and a custom Child Theme.
            Plugins I’m running are:
            AffiliateWP v2.1.6
            AffiliateWP – Affiliate Info
            AffiliateWP – Lifetime Commissions
            AffiliateWP MLM
            AffilaiteWP Ranks
            Paid Memberships Pro v1.9.3
            Paid Memberships Pro – Advanced Levels Page Shortcode Add-On
            Paid Memberships Pro – Custom Level Cost Text Add On
            Paid Memberships Pro – Email Templates Add On
            Paid Memberships Pro – WooCommerce Add On
            Paid Memberships Pro – WP Affiliate Platform Integration Add On
            WooCommerce v3.2.1
            WooCommerce Services

            I have some other plugins, but nothing that pertains to the main objective here.

            The code I have in please as stated above in the Child Theme Functions.php file is as follows:

            *****Starting the My Account Page Affiliate Menu option addition section*****
            Add the rewrite endpoint so that we don’t 404 on the new My Account tab
            */
            function moh_add_aff_wp_endpoint() {
            add_rewrite_endpoint( ‘aff’, EP_ROOT | EP_PAGES );
            }
            add_action( ‘init’, ‘moh_add_aff_wp_endpoint’ );
            /** ——————————————————————————————————————————————————– */

            /**
            Add the new affiliate area link to the “My Account” menu
            if Affiliate WP is enabled and the current user is an affiliate.

            Ensure that the logout link stays at the bottom of the menu
            */
            function moh_add_aff_wp_link_my_account( $items ) {
            if ( function_exists( ‘affwp_is_affiliate’ ) && affwp_is_affiliate() ) {
            $logout = array_pop( $items );
            $items[‘aff’] = ‘Affiliate Area’;
            $items[‘customer-logout’] = $logout;
            }
            return $items;
            }
            add_filter( ‘woocommerce_account_menu_items’, ‘moh_add_aff_wp_link_my_account’ );
            /** ——————————————————————————————————————————————————– */

            // Render the Affiliate WP Content within the new tab if Affiliate WP is enabled

            function moh_aff_wp_content() {
            if ( ! class_exists( ‘Affiliate_WP_Shortcodes’ ) ) {
            return;
            }
            $shortcode = new Affiliate_WP_Shortcodes;
            echo $shortcode->affiliate_area( $atts, $content = null );
            }
            add_action( ‘woocommerce_account_aff_endpoint’, ‘moh_aff_wp_content’ );

            // Make sure that the Affiliate WP tabs properly work

            function moh_filter_aff_tabs( $url, $page_id, $tab ) {
            return esc_url_raw( add_query_arg( ‘tab’, $tab ) );
            }
            add_filter( ‘affwp_affiliate_area_page_url’, ‘moh_filter_aff_tabs’, 10, 3 );
            // *****ENDing the My Account Page Affiliate Menu option addition section*****
            /** ——————————————————————————————————————————————————– */

          3. Please post your error messages, compare the lines of code you copied over and make sure there was nothing lost in the copy.

            You’ll have to go line for line and check to ensure everything expression is exact. If the error code is pointing to another file like an includes class file for example like mine did a while back you’ll need to compare those lines as well and see what’s missing.

Leave a Reply

Your email address will not be published. Required fields are marked *