web-dev-qa-db-fra.com

Quand les méthodes de redirection sont-elles sûres?

J'utilise actuellement wp_safe_redirect() dans une fonction de rappel reliée au filtre template_include . Je voudrais faire ici mes instructions conditionnelles pour déterminer si le modèle doit être chargé en fonction des capacités de l'utilisateur. Si non, alors redirige vers la page d'accueil. Cela ressemble à ceci:

public function my_load_template( $page_template ) {

    if ( is_singular( 'my_cpt' ) && is_user_logged_in()
        && current_user_can( 'update_core' ) ) {
        return plugin_dir_path( dirname( __FILE__ ) ) .  'public/templates/single-my_cpt.php';
    }
    else {
        wp_safe_redirect( home_url() );
        exit;
    }
}   

Accroché avec add_filter( 'template_include', my_load_template' );

Dans le cas où il redirige, je reçois une erreur de navigateur qui dit que le site "vous a redirigé trop de fois". Je soupçonne que cela peut être le résultat de l'exécution de la redirection pendant ce filtre.

J'aimerais que ma vérification conditionnelle des capacités de l'utilisateur soit effectuée le plus tôt possible. Alors, quand est-il prudent de suivre cela avec une redirection? Devrais-je faire un contrôle de capacité et rediriger dans le modèle de publication unique?

1
iyrin

Je suis passé par des crochets d'action et le plus tôt que je parvienne à le faire fonctionner correctement avec mes conditions pour les conditions d'utilisateur et de type de page est l'action wp. Bien que je l’accroche actuellement dans template_redirect car il me semble le plus approprié et prévu à cet effet selon le codex:

C'est un bon point à utiliser si vous devez faire une redirection en connaissance de cause du contenu interrogé.

Toute tentative de redirection dans une action qui précède wp dans l'ordre de [actions exécutées] poserait des problèmes, tels que l'impossibilité de modifier les en-têtes ou l'erreur "Vous redirigez trop de fois".

0
iyrin