在URL中使用自定义值进行复杂的URL重写

时间:2012-11-20 作者:tamilsweet

我们的自定义帖子类型为user_images 每个帖子都附有一张图片,图片名称是3位数,后面是分机。

当url

http://mysite.com/wp_username/3digitnumber
我们想在主题中使用自定义模板来显示图像

棘手的部分是,对于访问者,url应该保持不变,但在内部应该使用wp_username3digitnumber 作为查询变量。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

1 个回复
最合适的回答,由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不知道iuseriname 是,因此我们需要将它们添加到已识别的查询变量中:

// 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\' ) 获取自定义查询变量值。

结束

相关推荐

URLs of plugin resources?

我正在尝试将插件的脚本和css文件添加到管理标头中。是否有类似的功能get_bloginfo(\'url\') 我可以使用它来正确引用文件,而不必硬编码url?