1

我的 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'];
}

...果然查询字符串没有通过。

有什么我想念的吗?

4

2 回答 2

3

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

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

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

于 2013-07-09T10:19:26.530 回答
0

这是重写 url 代码的示例。希望这会对用户有所帮助。

在这个像http://www.domainname.com/test-page?urltags=ABCD这样的url中运行为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);
?>
于 2016-08-26T10:19:29.170 回答