URL переписать с помощью add_rewrite_rule и attachment_id

Я пытаюсь добавить правило перезаписи, чтобы сделать это:

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' ); } 

Solutions Collecting From Web of "URL переписать с помощью add_rewrite_rule и attachment_id"

Поместите код, предложенный ниже в functions.php вашей желаемой темы, он работал для меня с WP 3.4: http://matty.co.za/2009/11/custom-url-rewrites-in-wordpress/

Кажется, это работает для меня:

 // 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(); } 

Надеюсь, поможет.