我正在尝试添加一个新的重写规则,但它似乎没有添加到数组中,而且肯定不起作用。
我正在尝试获取此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()
, 我刚才制定的规则不存在。我尝试了几种不同的方法来刷新它们,甚至尝试了一个非常简单的规则,只是为了看看它是否被添加了,但仍然没有。
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();
} );