WooCommerce 2.6自定义端点404未找到错误

时间:2016-06-29 08:49:14

标签: php wordpress woocommerce permalinks

似乎在2.6版本中,WooCommerce已经改变了端点和自定义配置文件选项卡的制作方式。更多infor https://woocommerce.wordpress.com/2016/04/21/tabbed-my-account-pages-in-2-6/https://github.com/woothemes/woocommerce/wiki/2.6-Tabbed-My-Account-page

我的代码与这些链接中的代码几乎相似,但单击新的配置文件选项卡会一直显示404 Not Found错误。我尝试了永久链接刷新和flush_rewrite_rules(),但似乎有效......

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

有没有人有任何想法可能是什么问题?

1 个答案:

答案 0 :(得分:6)

你的钩子有什么问题...错误的时间......

这些作品......优先级为0或使用woocommerce_init
add_action('init', '_action_ssd_wp_user_company_init', 0 ); 要么 add_action('woocommerce_init', '_action_ssd_wp_user_company_init');

而不是add_action('init', '_action_ssd_wp_user_company_init');

您需要刷新固定链接设置才能生效。