我们的自定义帖子类型为user_images
每个帖子都附有一张图片,图片名称是3位数,后面是分机。
当url
http://mysite.com/wp_username/3digitnumber
我们想在主题中使用自定义模板来显示图像
棘手的部分是,对于访问者,url应该保持不变,但在内部应该使用wp_username
和3digitnumber
作为查询变量。wp_username
是有效的WordPress用户nicename。
找不到线索,所以对url格式做了一个小小的妥协
http://mysite.com/image/wp_username/3digitnumber
尝试使用自定义模板创建页面,并使用以下htaccess规则
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{QUERY_STRING} !^iuser=.*
RewriteCond %{REQUEST_URI} !^/wp-content/(.*)$ [NC]
RewriteRule ^image/(.*)/([0-9]+)$ /index.php?post_type=page&p=564&iuser=$1&iname=$2 [L]
其中564是带有自定义模板的页面id。
但是,url更改为
http://mysite.com/custompage/?iuser=myuser&iname=001
也尝试过
function add_rewrite_rules($rules) {
$newrules[\'image/([^/]+)/?([0-9]{1,})/?$\'] = \'index.php?post_type=page&p=564&iuser=$matches[1]&iname=$matches[2]\';
$rules = $newrules + $rules;
return $rules;
}
add_filter(\'rewrite_rules_array\', \'add_rewrite_rules\');
(已调用
$wp_rewrite->flush_rules();
添加后一次。)
但url再次更改为
http://mysite.com/custompage/?iuser=myuser&iname=001
Answer:@Milo提供的解决方案非常有效。由于浏览器缓存,url已更改为具有查询字符串的url
最合适的回答,由SO网友:Milo 整理而成
正如我在你的另一个问题中所提到的,你不想触摸。htaccess文件,您需要进行内部重写。
因此,给定URL:
http://mysite.com/image/wp_username/3digitnumber
我们需要添加以下规则来处理它:
// set up the rewrite rule
function wpa73374_setup_rewrites(){
add_rewrite_rule(
\'image/([^/]+)/([0-9]+)/?$\',
\'index.php?pagename=custompage&iuser=$matches[1]&iname=$matches[2]\',
\'top\'
);
}
add_action( \'init\', \'wpa73374_setup_rewrites\' );
如上所述,我们指向一个带有slug的页面
custompage
. 您可以将其更改为用于处理这些自定义URL的任何页面段塞。如果该页是另一页的子页,则必须添加
pagename=parentpage/childpage
. 添加重写规则后,请确保访问permalinks设置页面刷新重写,以便新规则开始工作。
但是,仅上述内容是行不通的,因为WordPress不知道iuser
和iname
是,因此我们需要将它们添加到已识别的查询变量中:
// add your custom query vars
function wpa73374_query_vars( $query_vars ){
$query_vars[] = \'iuser\';
$query_vars[] = \'iname\';
return $query_vars;
}
add_filter( \'query_vars\', \'wpa73374_query_vars\' );
最后,在模板中,使用
get_query_var( \'iuser\' )
和
get_query_var( \'iname\' )
获取自定义查询变量值。