避免WordPress将固定链接请求分类为未找到404页

时间:2013-07-31 作者:Joe Walker

我一直在网上寻找我需要的东西,但我没有找到任何相似的东西,甚至不相似,问题是:

我得到了一个简单页面帖子类型的页面模板,比如“水果”,然后在这个模板中,我调用了一个Web服务,它将带回具有特定描述的所有水果,其url是www.mydomain。玉米/水果/

我不是用这些信息填充Wordpress数据库,而是从外部服务获取这些信息,我想在Wordpress模板设计中使用详细信息导航内容,所以我需要的是能够单击“orange”,所以我会创建如下链接:

www.mydomain。com/fruits/orange/>这将是我未注册的permalink

这个不存在的永久链接将立即将我重定向到404模板页面,它将在wp\\u查询对象中分类为“404”=true,我希望避免wordpress将其处理为404,并调整其内部以将此请求发送到将显示orange详细信息的自定义模板。

如果你知道我可以使用哪个不涉及WP\\U重写的钩子(我尝试了各种组合,但都没有成功),我将永远感激你。

提前谢谢。

2 个回复
最合适的回答,由SO网友:Milo 整理而成

正如我在评论中所暗示的,我将使用重写API来处理这一问题,特别是adding a rewrite endpoint. 这样,您就不必计算出实际的404是什么,以及对动态生成的页面的请求是什么。它并没有给出您在问题中的URL结构,但我认为这是一个合理的折衷方案。

首先,我们添加重写端点。在这个例子中,我使用了type, 所以你的URL应该是/fruit/type/orange/:

function wpa_rewrite_endpoint(){
    add_rewrite_endpoint( \'type\', EP_PAGES );
}
add_action( \'init\', \'wpa_rewrite_endpoint\' );
现在,在模板中,您可以检查type 已设置,您将知道如何从webservice获取该关键字:

if( $requested_type = get_query_var( \'type\' ) ){
    // pass $requested_type to webservice
}
您可能还想调查Transients API 对于本地缓存数据,如果您得到了大量点击,并且额外的http请求会减慢速度。

SO网友:M-R

如果您没有其他选择,必须使用404重定向。您将使用template_redirect 行动挂钩。

function custom_404_redirect()
{
    if( is_404() )
    {
    // wp_redirect(site_url()); redirect to another page or 
        include( get_template_directory() . \'/custom-404.php\' ); // use a template
        exit();
    }
}
add_action( \'template_redirect\', \'custom_404_redirect\' );

结束

相关推荐

get all page templates

我正在一个单页WordPress网站上工作。这是我第一次尝试这个。我在第五个版本上取得了不同程度的成功。我正在启动一个新版本,我删除了主题文件夹中除标题之外的所有内容。php索引。php,函数。php,页脚。php、页面模板和样式。css当我在wp\\U Posteta中查看我的数据库时,我可以看到其中有几个页面分配了模板。我以前看过这段代码,所以我第一次尝试它,看看我能得到什么。在我的索引中。php文件。我有一个简单的标准循环。您可以看到,就在\\u post()之后,我尝试了get\\u post\\