如何在WordPress中拦截页面请求?

时间:2015-02-06 作者:Lee Loftiss

我正在使用Wordpress 4.1。

我正在构建一个不使用Wordpress页面的自定义模板。

我仍然希望Wordpress使用像“www.website”这样的永久链接。com/{page\\u name}/{something other}\'。然而,与其在自己的页面列表中查找页面,我希望WP将“页面名称”发送到我的代码中,并让它发送其余的查询。

我查看了操作和过滤器挂钩,但没有任何东西可以用来拦截系统。

在Wordpress中可以这样做吗?如果是,我如何实施它?

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

template\\u include您在这里的第一个选项是更改页面中使用的模板,以便在调用该模板后可以执行任何您想要的操作。

下面的示例检查页面是否称为“公文包”,但显然您可以插入自己的检查,然后找到一个名为“我的模板页面”的模板。php’。如果该模板不存在,则只显示原始模板。

add_filter( \'template_include\', \'my_custom_page_template\', 99 );
function my_custom_page_template( $template ) {

    if ( is_page( \'portfolio\' )  ) {
        $new_template = locate_template( array( \'my-template-page.php\' ) );
        if ( \'\' != $new_template ) {
            return $new_template ;
        }
    }

    return $template;
}
您还可以将用户重定向到另一个页面,再次允许您做任何想做的事情,但这次您还可以更改URL。就我个人而言,我只是在强迫人们在查看页面之前登录时才使用这个钩子,并建议templage_include, 但如果你有自己的理由,那就很公平了。

结合此代码,您需要一个模板page-my-template-example.php 以及一个名为“我的模板示例”的页面。

add_action( \'template_redirect\', \'my_redirect_to_template_page\' );
function my_redirect_to_template_page(){

    if( is_page( \'goodies\' ) ) {
        wp_redirect( home_url( \'/my-template-page/\' ) );
        exit();
    }

}

结束

相关推荐

Custom permalinks structure

我希望有这样的结构:www.mysite.com/2013 (必须显示2013年的所有职位)www.mysite.com/my-category/2013 (必须显示2013年和“我的类别”类别的所有帖子)www.mysite.com/my-category/my-tag/ (必须显示所有类别为“我的类别”和标记为“我的标记”的帖子)www.mysite.com/my-category/ (必须显示“我的类别”类别的所有帖子)www.mysite.com/my-