ADD_REWRITE_RULE不起作用,没有添加到规则数组,为什么?

时间:2015-06-11 作者:seth.fansided

我正在尝试添加一个新的重写规则,但它似乎没有添加到数组中,而且肯定不起作用。

我正在尝试获取此URL,dult.dev/lists/games/destiny, 从/lists/games/ (效果很好)到该特定帖子的单个帖子视图。我的重写规则甚至没有添加:

add_action( \'init\', \'add_rewrite_tags\', 10, 0 );
function add_rewrite_tags() {
    global $wp_rewrite; // Global WP_Rewrite class object
    $wp_rewrite->flush_rules();
    add_rewrite_rule( 
        \'^lists/([^/]*)/([^/]*)/?\', 
        \'index.php/lists=$matches[1]&post=$matches[2]\', 
        \'top\' 
    );
    print_r( $wp_rewrite->rewrite_rules() );
}
当我打电话给$wp_rewrite->rewrite_rules(), 我刚才制定的规则不存在。我尝试了几种不同的方法来刷新它们,甚至尝试了一个非常简单的规则,只是为了看看它是否被添加了,但仍然没有。

2 个回复
SO网友:David Labbe

试试这个。您也不希望在函数中包含$wp\\u rewrite->flush\\u rules(),因为这会在每次页面加载时刷新。

add_action(\'rewrite_rules_array\', \'new_rewrite_rules\');

function new_rewrite_rules($rules){
        $newrules = array();
        $newrules[ \'^lists/([^/]*)/([^/]*)/?\' = \'index.php?lists=$matches[1]&post=$matches[2]\';
        return $newrules + $rules;
    }
如果只想刷新规则一次,请尝试以下操作:

add_action(\'init\', \'flush_new_rule\');

function flush_new_rule(){
   global $wp_rewrite;
   if(is_array(get_option(\'rewrite_rules\')) && !array_key_exists(\'^lists/([^/]*)/([^/]*)/?$\', get_option(\'rewrite_rules\')){
   $wp_rewrite->flush_rules( true );
   };
}

SO网友:cybmeta

您在regex中有一些错误,这些错误可能会导致重写规则。我不知道您想要获取什么“列表”或什么类型的帖子,所以我无法调试,但这个重写规则应该是正确的:

add_action( \'init\', \'add_rewrite_tags\' );
function add_rewrite_tags() {

    add_rewrite_rule( 
        \'^lists/([^/]+)/([^/]+)/?$\', 
        \'index.php?lists=$matches[1]&post=$matches[2]\', 
        \'top\' 
    );

}
然后必须刷新重写规则;您可以访问wp admin上的permalinks设置页面来完成此操作。如果你想刷新代码中的重写规则,你应该激活插件(如果你在主题中添加重写规则,则激活主题)。例如,在插件的主文件中:

register_activation_hook( __FILE__, function() {

    flush_rewrite_rules();

} );
register_deactivation_hook( __FILE__, function() {

    flush_rewrite_rules();

} );

结束

相关推荐

GET_SHORTCODE_regex()只与第一个短码匹配

法典中有an example 使用get\\u shortcode\\u regex()检查是否在给定页面上调用了短代码:$pattern = get_shortcode_regex(); preg_match(\'/\'.$pattern.\'/s\', $posts[0]->post_content, $matches); if (is_array($matches) && $matches[2] == \'YOURSHORTCODE\') { /