mercredi 29 juin 2016

WooCommerce 2.6 Custom Endpoint 404 Not Found Error

It seems with version 2.6 WooCommerce have changed the way endpoints and custom profile tabs are made. More infor here http://ift.tt/1NDtw5i and and http://ift.tt/294lIlh

My code bellow is almost similar to the one in these links but clicking on the new profile tab keeps showing the 404 Not Found error. I tried Permalinks refresh and flush_rewrite_rules() but othing seems to work....

if ( !class_exists('My_WC_User_Company') ) {
    class My_WC_User_Company {

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

        /**
         * 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 http://ift.tt/29elPY7
         */
        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 Company', 'domain' );

                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 Company', 'domain' );

            // Insert back the logout item.
            $items['customer-logout'] = $logout;

            return $items;
        }

        /**
         * Endpoint HTML content.
         */
        public function endpoint_content() {

            ob_start();

            // here is some content ?>

            <?php

            $output = ob_get_clean();
            echo $output;
        }

    }
}


add_action('init', '_action_ssd_wp_user_company_init');

if( !( function_exists('_action_ssd_wp_user_company_init')) ){
    function _action_ssd_wp_user_company_init(){
        if (  get_current_user_id() && get_user_meta( get_current_user_id(), 'user_company', true ) == 'yes' ) {
            new My_WC_User_Company();
        }
    }
}

Does anyone have any ideas what couldbe the issue?



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire