向WordPress添加自定义重写规则

时间:2013-07-09 09:17:33

标签: wordpress

我的WordPress网站的投资组合位于www.mysite.com/portfolio/。投资组合部分和项目通过我创建的自定义插件进行管理。我想访问www.mysite.com/portfolio/my-cool-photo这样的单个项目,并将“my-cool-photo”放入?portfolio_item=my-cool-photo这样的查询字符串中,以便我可以从我的代码中读取它。

在插件激活PHP文件中我有这段代码:

function add_rewrite_rules($wp_rewrite) {
    $new_rules = array(
        'portfolio/(.+)/?$' => 'index.php?&portfolio_item=$1'
    );

    $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
add_action('generate_rewrite_rules', 'add_rewrite_rules');

function query_vars($public_query_vars) {
    $public_query_vars[] = "portfolio_item";

    return $public_query_vars;
}
add_filter('query_vars', 'query_vars');

这会将重写规则添加到数组OK。问题是它没有做任何事情。当我去www.mysite.com/portfolio/testing/时,我得到了“这有点令人尴尬,不是吗?” WordPress 404错误页面。显然重定向不起作用,因此查询字符串不会被填充,只是为了确保我这样做:

global $wp_query, $wp_rewrite;
if ($wp_rewrite->using_permalinks()) {
    $searchKey = $wp_query->query_vars['portfolio_item'];
} else {
    $searchKey = $_GET['portfolio_item'];
}

...确定查询字符串没有通过。

我有什么遗失的吗?

2 个答案:

答案 0 :(得分:3)

更新WordPress重写规则后,需要刷新它们:

http://codex.wordpress.org/Function_Reference/flush_rewrite_rules

您可以选择使用$hard参数true进行刷新,然后您应该能够在.htaccess文件中看到重写规则。

答案 1 :(得分:0)

以下是重写网址代码的示例。希望这将有助于用户。

在此http://www.domainname.com/test-page?urltags=ABCD之类的网址中,http://www.domainname.com/test-page/ABCD

运行
<?php
function add_my_rule() {    
    global $wp; 
    $wp->add_query_var('tags');
    add_rewrite_rule('test-page/([^/]*)','index.php?pagename=test-page&urltags=$matches[1]','top');
}
function add_my_tags() {
    add_rewrite_tag('%urltags%', '([^&]+)');
}
add_action('init', 'add_my_rule');
add_action('init', 'add_my_tags', 10, 0);
?>