ADD_REWRITE_ENDPOINT不适用于帖子名称固定链接结构

时间:2020-05-08 作者:Stefan S

我正在添加一个“对话”端点,以便它出现在我在woocommerce的帐户中

add_action( \'init\', array($this, \'custom_endpoints\') );
function custom_endpoints() {
    add_rewrite_endpoint( \'conversations\', EP_PERMALINK | EP_PAGES );
}
使用“普通”的永久链接结构可以很好地工作,但如果使用帖子名结构,我的帐户中的链接将转到my-account/conversations.上面写着“找不到页面”。然而my-account/?conversations 确实有效。

这是什么原因?

这是WooCommerce菜单项的代码:

add_filter( \'woocommerce_account_menu_items\', array($this, \'custom_items\'), 10, 1 );
    function custom_items( $items ) {

            $items = array_slice($items, 0, 2, true) +
                array("conversations" => esc_html__( \'Conversations\', \'domain\' )) + 
                array_slice($items, 2, count($items)-2, true);

        return $items;

    }

2 个回复
SO网友:Jacob Peattie

我会避免使用add_rewrite_endpoint() 直接在WooCommerce中注册帐户页终结点。WooCommerce有一个过滤器,您可以使用它来确保其他一切正常工作,例如端点标题过滤器和调用is_wc_endpoint_url().

因此,将端点与woocommerce_get_query_vars 过滤器:

add_filter(
    \'woocommerce_get_query_vars\',
    function( $query_vars ) {
        $query_vars[\'conversations\'] = \'conversations\';

        return $query_vars;
    }
);
请注意,与query_vars 过滤器,添加到数组时需要使用键。

现在,您可以使用woocommerce_account_conversations_endpoint 挂钩:

add_action(
    \'woocommerce_account_conversations_endpoint\',
    function() {
        // Page content here.
    }
);
标题和woocommerce_endpoint_conversations_title 过滤器:

add_filter(
    \'woocommerce_endpoint_conversations_title\',
    function( $title ) {
        $title = \'Conversations\';

        return $title;
    }
);
您可以继续按您的方式将其添加到帐户菜单中。

SO网友:Stefan S

我想出来了。即使我在保存永久链接,那也不是真正刷新重写规则。

我刷新了激活的重写规则,但我做得不对。

如果要添加自定义端点,则需要在flush\\u rewrite\\u rules()调用之前,调用在激活文件中添加自定义端点的函数。

这是我现在的激活功能,它可以工作:

require_once ( PLUGIN_DIR . \'public/class-plugin-public.php\' );

        $publicobj = new Plugin_Public;
        $publicobj->custom_endpoints();

        // Flush rewrite rules
        flush_rewrite_rules();
现在,在规则刷新之前,我正在实例化public类并在激活中调用endpoints()方法。

相关推荐

更改wp-admin/plugins.php上统计的插件数量

我已成功地使用从插件页面隐藏我的插件$wp_list_table 然而,顶部的分页仍然将插件列为“所有(3)”等。我成功地改变了$wp_list_table 的数组_pagination_args = total_items.但它仍然在页面顶部呈现插件-“全部(3)”。有什么办法可以解决这个问题吗?我找到了WP_Plugins_List_Table::prepare_items()具有全局$totals 变量,但我不确定我将如何改变这一点,在这个函数中$totals = array(); fore