【问题标题】:Adding custom rewrite rules to WordPress向 WordPress 添加自定义重写规则
【发布时间】:2013-07-09 09:17:33
【问题描述】:

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

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

我有什么遗漏吗?

【问题讨论】:

    标签: wordpress


    【解决方案1】:

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

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

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

    【讨论】:

    • add_rewrite_rules 函数的末尾添加了$wp_rewrite->flush_rewrite_rules(true);。这没有任何影响,我的 htaccess 文件仍然是默认的 WordPress htaccess 文件。
    • 您可以尝试使用add_rewrite_rule 函数:codex.wordpress.org/Rewrite_API/add_rewrite_rule
    • 我相信重写实际上正在使用add_rewrite_rule。问题似乎是 WordPress 没有将 mysite.com/portfolio/abcdefg/ 识别为 /portfolio/ 页面的一部分,所以它给了我“这有点尴尬,不是吗?”错误画面。我需要做些什么来“让它知道”它仍然应该加载投资组合页面吗?
    • 我明白了!我将重定向更改为add_rewrite_rule('^portfolio/([^/]*)/?', 'index.php/portfolio/?portfolio_item=$matches[1]', 'top');。现在唯一的问题是portfolio_item 参数包含“$matches[1]”,所以由于某种原因它没有渲染出那个变量。
    • 另一件事,flush_rewrite_rules() 不起作用。我可以刷新它们的唯一方法是转到管理员中的永久链接页面,然后按保存更改。
    【解决方案2】:

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

    在此网址中,http://www.domainname.com/test-page?urltags=ABCDhttp://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);
    ?>
    

    【讨论】:

    • 你们有多标签解决方案吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 2011-11-30
    相关资源
    最近更新 更多