重写不在主页上工作的终结点

时间:2016-09-24 作者:random_user_name

我使用以下代码在自定义插件中创建重写端点:

function setup_seo_endpoing() {
    add_rewrite_endpoint( \'item\', EP_ALL );
}

add_action( \'init\', \'setup_seo_endpoint\');
此代码正在运行/被调用,并且端点可以工作with one problem:

如果我访问主页(比如http://example.com), 它实际上是根据仪表板设置显示正确的静态页面。

如果我尝试使用自定义端点集访问主页(例如http://example.com/item/ct588), WordPress显示博客列表。

为了完整起见,下面的代码是我(在函数内部)用来从端点获取值的代码。

global $wp_query;
if ( isset( $wp_query->query_vars[ \'item\' ] ) ) {
    // ... do stuff
    // This does not fire
}
相关注释:

我已经将设置=>阅读=>首页设置为静态页面阅读=>博客页面设置设置为其他页面do work 正确显示内部页面URL:http://example.com/sample-page/item/ct0608/

  • 我已多次保存永久链接Why does the blog listing 是否显示而不是静态主页?

    Is it possible to use custom rewrite endpoints on the home page? 我没有找到任何文章表明这会/可能会在主页上起作用。

  • 1 个回复
    最合适的回答,由SO网友:bswatson 整理而成

    您需要结合使用add_rewrite_tagadd_rewrite_rule

    function setup_seo_endpoint() {
        // Ensures the $query_vars[\'item\'] is available
        add_rewrite_tag( \'%item%\', \'([^&]+)\' );
    
        // Requires flushing endpoints whenever the 
        // front page is switched to a different page
        $page_on_front = get_option( \'page_on_front\' );
    
        // Match the front page and pass item value as a query var.
        add_rewrite_rule( \'^item/([^/]*)/?\', \'index.php?page_id=\'.$page_on_front.\'&item=$matches[1]\', \'top\' );
        // Match non-front page pages.
        add_rewrite_rule( \'^(.*)/item/([^/]*)/?\', \'index.php?pagename=$matches[1]&static=true&item=$matches[2]\', \'top\' );
    }
    add_action( \'init\', \'setup_seo_endpoint\', 1);
    
    // http://wordpress.stackexchange.com/a/220484/52463
    // In order to keep WordPress from forcing a redirect to the canonical
    // home page, the redirect needs to be disabled.
    function disable_canonical_redirect_for_front_page( $redirect ) {
        if ( is_page() && $front_page = get_option( \'page_on_front\' ) ) {
            if ( is_page( $front_page ) ) {
                $redirect = false;
            }
        }
    
        return $redirect;
    }
    add_filter( \'redirect_canonical\', \'disable_canonical_redirect_for_front_page\' );
    

    相关推荐

    Dynamic Endpoints

    我在WordPress外部有一个数据库表,需要为其创建端点。我已经创建了一个页面/cars/ 我计划使用页面模板生成链接。我希望url看起来像/cars/camaro/ ()/cars/%model%/ ). 起初,我认为我可以使用端点,但不知道如何根据从模型表中提取的段塞使它们动态。我也不确定使用Permalink结构标签是更容易还是更好。我甚至不完全确定从哪里开始,我以前创建过“静态”端点,所以我有一个基础可以跳出,但当我到达request 我不知道该怎么办。/** * Add endpoi