J'essaie d'ajouter une règle de réécriture pour rendre ceci:
mysite/?attachment_id=106
ressemble à ca:
mysite/series/106
J'ai regardé partout dans ce site et d'autres et c'est très déroutant car il y a beaucoup de façons différentes de le faire. J'ai essayé de modifier le fichier functions.php
dans mon dossier de thèmes, en ajoutant ceci au début du fichier:
add_rewrite_rule('series/([^/]+)/?$', 'index.php?attachment_id=$matches[1]', 'top');
Et le dernier que j'ai essayé:
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'
);
}
Placez le code suggéré ci-dessous dans functions.php de votre thème souhaité, cela a fonctionné pour moi avec WP 3.4: http://matty.co.za/2009/11/custom-url-rewrites-in-wordpress/
Cela semble fonctionner pour moi:
// 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();
}
}
Et aussi, si vous voulez déboguer des règles, il y a un extrait utile:
// 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();
}
J'espère que ça aide.