Je dois installer une structure de réécriture WP dans laquelle je préfixe toutes les URL avec un préfixe personnalisé (dynamique).
Donc, les urls ressemblent à ceci:
www.example.com/myprefix1/
www.example.com/myprefix2/
www.example.com/myprefix1/a-page
www.example.com/myprefix1/a-category
www.example.com/myprefix1/a-cpt
www.example.com/myprefix2/a-cpt
etc.
Jusqu'à présent, j'ai eu ceci:
$options = implode( array('myprefix1','myprefix2', '|' ); // my prefix options
// add a rule for each registered post type (??)
foreach($postTypes as $postType){
$new_rules['(' . $options . ')/(.+?)/?$'] = 'index.php?post_type='.$postType.'&' . self::$sitePrefixName . '='. $wp_rewrite->preg_index(1).'&pagename='. $wp_rewrite->preg_index(2);
}
// add a rule for the home page (?)
$new_rules['(' . $options . ')/?$'] = 'index.php?' . self::$sitePrefixName . '='. $wp_rewrite->preg_index(1);
$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
Cela fonctionne, mais je crois par exemple les taxonomies ne sont pas incluses ici. J'essaie de rendre cela aussi flexible que possible pour que les futurs CPT, impôts, etc. fonctionneront aussi bien.
Est-ce que je fais la bonne chose ici ou y a-t-il d'autres moyens de le faire?
Merci!
Avez-vous déjà envisagé d'utiliser le filtre rewrire_rules_array
pour modifier $ rewrite_rules?
/**
* Example of Changing All Rewrite Rules
*
* @param array $rewrite_rules The compiled array of rewrite rules.
* @return array The compiled array of rewrite rules (altered).
*/
function wpse_263624_rewrite_rules_example( $rewrite_rules ) {
$prefixes = array( 'otro', 'esto' );
$prefix_regexp = '(' . implode( '|', $prefixes ) . ')/';
$new_rewrite_rules = array();
$match_pattern = '/\$matches\[(\d)\]/si';
foreach ( $rewrite_rules as $rewrite_rule => $match ) {
// Incrementing $match becaouse prefixes goes as capturing group.
$new_match = preg_replace_callback( $match_pattern , function( $m ){
return sprintf('$matches[%d]', $m[1] + 1);
}, $match);
// Adding Prefix Group and New Value for our match.
$new_rewrite_rules[ $prefix_regexp . $rewrite_rule ] = $new_match;
}
return $new_rewrite_rules;
}
add_filter( 'rewrite_rules_array', 'wpse_263624_rewrite_rules_example' );
Il se termine dans quelque chose comme ça ..