Rewrite Question

时间:2014-02-23 作者:Mike

我在重写时遇到了麻烦。我在这里(和其他网站)搜索了一个例子,但到目前为止,还没有找到。

我的测试地点是:

../?attachment_id=3027&attachment_category=yosemite
我希望它显示以下内容:

../portfolio/yosemite/3027
甚至这些:

../portfolio/3027/yosemite/

../3027/yosemite/
我试图将此添加到.htaccess:

RewriteRule ^([^/]*)/([^/]*)/$ /?attachment_id=$1&attachment_category=$2 [L]
但很明显,这不起作用。在我继续寻找答案的过程中,任何想法都将不胜感激。

Edit #1

尝试过这个,但没有成功。

add_filter( \'query_vars\', \'my_query_vars\' );
function my_query_vars( $query_vars ) {
    array_push($query_vars, \'attachment_id\', \'attachment_category\');
    return $query_vars;
}

add_filter( \'rewrite_rules_array\', \'my_rewrite_rules_array\' );
function my_rewrite_rules_array( $rules ) {
    $my_rules = array();
    $my_rules[\'portfolio/(\\d+)/(\\d+)/?$\'] = \'index.php?attachment_id=$matches[1]&attachment_category=$matches[2]\';
        return $my_rules + $rules;
    }

add_action( \'wp_loaded\', \'my_flush_rules\' );
function my_flush_rules() {
if (!$rules = get_option(\'rewrite_rules\'))
    $rules = array();

if (!isset($rules[\'portfolio/(\\d+)/(\\d+)/?$\'])) {
    global $wp_rewrite;
    $wp_rewrite->flush_rules();
   }
}

1 个回复
SO网友:thornomad

你可以在插件或主题的functions.php.

我认为这样做可能会奏效(假设attachment_idattachment_category 是注册的标记/变量。

<?php 
add_action(\'init\', \'myplugin_rewrite_rule\');
function myplugin_rewrite_rule() {

    add_rewrite_rule(\'^portfolio/([^/]*)/([^/]*)/?$\',
        \'index.php?attachment_id=$matches[1]&attachment_category=matches[2]\',
        \'top\');
}

结束