使用添加_重写规则和附件ID重写URL

时间:2012-06-25 作者:federomano

我正在尝试添加一个重写规则,以实现以下目的:

mysite/?attachment_id=106
如下所示:

mysite/series/106
我已经在这个网站和其他网站上到处找过了,这很让人困惑,因为有很多不同的方法可以做到这一点。我试过编辑functions.php “我的主题”文件夹中的文件,在文件开头添加以下内容:

add_rewrite_rule(\'series/([^/]+)/?$\', \'index.php?attachment_id=$matches[1]\', \'top\');
我最近试过的一个:

add_filter( \'query_vars\', \'wpa56345_query_vars\' );

function wpa56345_query_vars( $query_vars ){
    $query_vars[] = \'attachment_id\';
    return $query_vars;
}

add_action( \'init\', \'wpa56345_rewrites\' );

function wpa56345_rewrites(){
    add_rewrite_rule(
        \'series/(\\d+)/?$\',
        \'index.php?attachment_id=$matches[1]\',
        \'top\'
    );
}

2 个回复
最合适的回答,由SO网友:Joaquín L. Robles 整理而成

将下面建议的代码放入函数中。php对于您想要的主题,它对我来说适用于WP 3.4:http://matty.co.za/2009/11/custom-url-rewrites-in-wordpress/

SO网友:vmassuchetto

这似乎对我有用:

// Add your query variable

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

// Add your rule

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

// Flush the rules if your rule does not exist

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

    if (!isset($rules[\'series/(\\d+)/?$\'])) {
        global $wp_rewrite;
        $wp_rewrite->flush_rules();
    }
}
此外,如果要调试规则,还有一个有用的代码片段:

// Uncomment add_action to see what\'s happening

//add_action(\'wp\', \'debug_rules\');
function debug_rules() {
    global $wp, $wp_query, $wp_rewrite;
    echo $wp->matched_rule . \' | \' . $wp_rewrite->rules[$wp->matched_rule];
    print_r($wp_rewrite->rules);
    exit();
}
希望有帮助。

结束

相关推荐

how to edit attachments?

在将例如文件附加到帖子时,如何在事后编辑/删除它们?在帖子编辑器中找不到任何内容。谢谢