web-dev-qa-db-fra.com

add_rewrite_rules préfixe tout

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!

2
john23klipp

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 ..

 changed rewrite rules array 

2
Butuzov