Can't add external rewrites

时间:2012-02-09 作者:blurfman01

我的函数中有以下代码。php

function add_custom_rewrite_rules(){

   add_rewrite_tag(\'%gallery%\',\'([^/]+)\', \'gallery=\');
   add_rewrite_tag(\'%album%\',\'([^/]+)\', \'album=\');

   add_rewrite_rule(\'galleries/(.+)/?$\' , \'index.php?pagename=galleries&album=1&gallery=$matches[1]\');
}

add_action(\'init\', \'flush_rewrite_rules\');
add_action(\'init\', \'add_custom_rewrite_rules\');
但是没有添加重写规则,它也没有显示在我的管理中的重写列表中。

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

首先,不要这样做:

add_action(\'init\', \'flush_rewrite_rules\');
每次加载WordPress时,都会刷新重写规则。您只需执行一次即可确保您的重写显示出来。

第二add_rewrite_tag 只接受两个参数,标记和正则表达式。如果要直接指定查询变量,需要执行以下操作:

<?php
global $wp_query;
$wp_query->add_rewrite_tag(\'%gallery%\',\'([^/]+)\', \'gallery=\');
$wp_query->add_rewrite_tag(\'%album%\',\'([^/]+)\', \'album=\');
在您的情况下,这并不重要:您使用的是与标记相同的查询变量。

最后,您的正则表达式中有一些错误。你需要从胡萝卜开始,我不会用(.*) 第二部分。您还需要指定的第三个参数add_rewrite_rule 这告诉WP将重写放在突出位置的位置。你想要的top 告诉WordPress这个规则应该在内置规则之前。

这项工作:

<?php
add_action( \'init\', \'wpse41778_add_rewrite\' );
function wpse41778_add_rewrite()
{
    add_rewrite_tag(\'%gallery%\',\'([^/]+)\');
    add_rewrite_tag(\'%album%\',\'([^/]+)\');
    add_rewrite_rule(
        \'^galleries/([^/]+)/?$\', 
        \'index.php?pagename=galleries&album=1&gallery=$matches[1]\',
        \'top\'
    );
}
前提是刷新重写规则。如果将规则放入插件中,则可以使用register_activation_hook 冲洗它们。

<?php
register_activation_hook( __FILE__, \'wpse41778_flush_rewrite\' );
function wpse41778_flush_rewrite()
{
    wpse41778_add_rewrite();
    flush_rewrite_rules();
}
获取galleryalbum 查询变量您可以执行以下操作:

$gallery = get_query_var( \'gallery\' );
$album = get_query_var( \'album\' );
根据您的重写,您的用法可能是这样的:

<?php
if( get_query_var( \'album\' ) )
{
    $gallery = get_query_var( \'gallery\' );
    // do stuff with $gallery
}
下面是重写部分a plugin.

结束

相关推荐