web-dev-qa-db-fra.com

Les règles de réécriture personnalisées envoient tout à index.php

Je crée un site où les utilisateurs travaillent en équipe pour créer des films. Actuellement, je suis en train de mettre en place une page d'édition sur le front-end pour les chefs d'équipe. Je viens de recevoir un simple contrôle isset () sur une requête var sans valeur pour envoyer la vue à la nouvelle page de modèle. Ainsi, quelle que soit la valeur de la requête var, si elle est appelée dans l'URL, elle est renvoyée vers le nouveau modèle.

Cette partie fonctionne. Le modèle se charge très bien dans/ team/(teamname)? Manage. Et tout ce que j'essaie de faire est de le réécrire pour qu'il ressemble à/ team/(nom d'équipe)/manage/.

Mais mon problème est que cela ne fonctionne pas ET que chaque page du front-end est maintenant redirigée vers index.php. Tout sauf pour index.php?team=blah&manage et les autres publications personnalisées appelées avec? Team =.

Voici mon fichier pour les règles de réécriture personnalisées:

function generate_manage_rewrite_rules() {
    global $wp_rewrite;

    $new_rules = array(
        "(team|film)/([^/]+)/manage/?$" => "index.php?".$wp_rewrite->preg_index(1)."=".$wp_rewrite->preg_index(2)."&manage" 
    );
    $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}

add_filter('rewrite_rules_array', 'generate_manage_rewrite_rules');

Mon fichier .htaccess que je n'ai pas touché:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /sitename/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /sitename/index.php [L]
</IfModule>

# END WordPress

Et mon fichier pour la définition du modèle de redirection et de requête vars (même si je ne pense pas que ce soit le problème):

function templateInclude( $template )
{
    if (is_single()) {

        global $wp_query;

        if( isset ( $wp_query->query_vars['manage'] ) ) {

            if ( is_manager() ) {

                $new_template = locate_template( array( '/template-team-manage.php' ) );
                if ( '' != $new_template ) {
                    return $new_template ;
                }
            }
        }
    }

    return $template;
}
add_action( 'template_include', 'templateInclude' );

J'ai également essayé d'installer le plugin Rewrite Analyzer pour essayer de comprendre, mais le chargement ne se fait pas du tout après l'installation.

3
Aly

Enfin compris. 1) J'appelais la première fonction à 'rewrite_rules_array' au lieu de 'init' qui était juste idiot. 2) Il y avait toujours quelque chose qui n'allait pas, mais j'ai exploré un autre domaine qui semble évident maintenant, mais que j'avais à l'origine passé sous silence parce qu'il semblait l'être.

https://codex.wordpress.org/Rewrite_API/add_rewrite_endpointhttps://make.wordpress.org/plugins/2012/06/07/rewrite-endpoints-api/

Faites juste un point final. Wordpress a déjà la fonctionnalité intégrée pour faire ce que j'essayais de faire, mais il m'a fallu trois jours pour le rechercher.

J'ai littéralement remplacé tout ce qui précède (sauf .htaccess) par:

function manage_endpoint() {

    add_rewrite_endpoint( 'manage', EP_PERMALINK );

}
add_filter('init', 'manage_endpoint');
1
Aly