我正在寻找一种重写类似wordpress的URL的方法,其中:
http://www.example.com/?p=5
成为
http://www.example.com/some-page-with-that-title
我想要
http://www.example.com/events/?event_id=23
成为
http://www.example.com/events/some-event-title
我发现了wordpress重写api,并成功地使用和事件模板页面重写了以下url。
add_action( 'init', 'events_permalinks' );
function events_permalinks() {
add_rewrite_rule(
'events/([^/]+)/?',
'index.php?pagename=events&event_name=$matches[1]',
'top'
);
}
add_filter( 'query_vars', 'events_query_vars' );
function events_query_vars( $query_vars ) {
$query_vars[] = 'event_name';
return $query_vars;
}
并用get_query_var('event_name')
我知道我需要在非wordpress事件表中查找event_id来获得名称,但我不确定将查询放在哪里,这样我就可以将其交换到url中。希望我没有把事情弄糊涂
你做错了。
WordPress中的URL可以在您的仪表板中轻松自定义。请参阅WordPress Codex中的使用固定链接文章。
我不是一个真正的重写专家,但如果你只使用一个$_GET变量,这个片段会对你有用(至少对我有用)。正如您所看到的,重写sintax在引用$_GET参数的方式上有点不同。
您的代码也适用于多个$_GET-var上下文,而不是单个上下文。希望这对你有用,记住更新你的永久链接到设置→永久链接屏幕→保存更改。
更多信息:Wordpress重写API|Wordpress固定链接Codex
add_action('init', 'events_permalinks');
function events_permalinks(){
add_rewrite_rule(
'^events/([^/]*)$',
'index.php?pagename=events&event_name=$matches[1]',
'top'
);
}
add_filter( 'query_vars', 'events_query_vars' );
function events_query_vars( $query_vars ) {
$query_vars[] = 'event_name';
return $query_vars;
}