Rewrite rule shows 404 page

时间:2013-12-05 作者:bogdanvursu

我是Wordpress的新手,所以我真的不知道重写规则应该是什么样子。我的问题是,我的主题中有一个名为公文包内部的自定义模板。php

我的规则是这样的[\'portfolio/php/wordpress\'] => \'portfolio-inner/?galid=3\'.

问题是,所有示例都显示了index.php URL作为目标,但我不知道如何构建index.php 我的模板URL的URL。

因此,该规则显示404页。

作为解决方法,我编辑了.htaccess 并添加了以下内容:

Redirect /portfolio/php/wordpress  http://example.com/portfolio-inner/?galid=3
我看到了右侧的gallery页面,但这并不正常,因为浏览器的地址栏会发生变化,应该保持不变/portfolio/php/wordpress

2 个回复
SO网友:Seamus Leahy

这个index.php 您看到的不是模板文件。它被指向index.php 您在WordPress安装的根目录中看到的文件。

How does the pretty URL translate into a template file

<当某人访问您网站上的URL时.htaccess 将与实际文件不匹配的所有请求重定向到index.php 启动整个WordPress流程rewrite rules 使用正则表达式query vars 这些是定义的变量。它还将填充任何隐含变量WP_Query 主循环中使用的对象是基于查询变量创建的template_redirect 挂钩

How do you override this

在不完全了解您想要做什么的情况下,我将按原样回答您的问题。对于您正在做的事情,可能有一些优化。

我们将添加自定义重写规则。您需要更新永久链接以应用更改。

function my_custom_rewrite_rules( $rewrite ) {
    $rewrite->rules[\'portfolio/php/wordpress\'] = \'index.php?my_portfolio=1&galid=3\';
}
add_action( \'generate_rewrite_rules\', \'my_custom_rewrite_rules\' );
因为我们正在使用自定义query var my_portfolio, 我们需要在WordPress注册它。

function my_custom_query_vars( $vars ) {
$vars[] = \'my_portfolio\';
return $vars;
}
add_filter( \'query_vars\', \'my_custom_query_vars\' );
现在我们可以告诉WordPress在查询变量my_portfolio 是真的。要使用我们的模板,我们使用locate_template 查看模板是否存在,然后调用它。如果模板存在,则返回true 告诉我它被找到了。

function my_custom_template_redirect() {
    global $wp_query;

    if ( $wp_query->get( \'my_portfolio\' ) && locate_template( \'portfolio-inner.php\', true ) ) {
        exit;
    }
}
add_action( \'template_redirect\', \'my_custom_template_redirect\' );

SO网友:bogdanvursu

最后,我向使用我的模板的页面添加了重写规则。此外,我还必须添加galid作为EP\\U页面的重写端点。本教程帮助很大:http://wp.tutsplus.com/tutorials/creative-coding/the-rewrite-api-the-basics/

结束

相关推荐

Custom post types templates

我已经注册了一个名为“Services”的自定义帖子类型,但当我给这篇帖子提供模板“single Services.php”时,它不接受这个,而是选择了“homepage.php”模板,你能告诉我这个问题吗?它也没有使用“archive services.php”模板,而是使用blog模板(index.php)使现代化代码如下:add_action(\'init\', \'services_register\'); function services_register() { $