web-dev-qa-db-fra.com

Fonction de redirection dans un code court

Je développe un plugin gratuit pour connecter un système de support externe à WordPress afin de pouvoir authentifier les utilisateurs sur WordPress.

Pour cela, actuellement depuis le système externe, l'utilisateur est envoyé à la page de connexion de WordPress avec ceci à la fin.

?action=freshdesk-remote-login

Mon plugin vérifie ensuite si l'utilisateur est connecté à WP. Dans le cas contraire, il affiche le formulaire de connexion et, après une connexion réussie, les redirige vers le site tiers.

La redirection est faite en utilisant quelque chose comme ceci: wp_redirect( $sso_url );

Maintenant, cela fonctionne bien, mais je prévois de proposer un shortcode qui pourrait être ajouté à une page choisie par l'utilisateur. Maintenant, une fois qu'un utilisateur accède à cette page, s'il est connecté, il doit être transféré sur le site tiers, sinon, sur la page de connexion.

Pourriez-vous suggérer à wp_redirect de travailler dans un shortcode?

13
Harish Chouhan

Comme @Rarst l'explique, les codes abrégés sont généralement trop tardifs pour pouvoir être redirigés de l'intérieur. Ils s'exécutent généralement sur le hook the_content, qui se trouve bien après l'envoi du contenu au navigateur. Si vous devez rediriger en fonction de la présence d'un shortcode, vous devez vérifier ce shortcode avant que tout contenu ne quitte le serveur.

function pre_process_shortcode() {
  if (!is_singular()) return;
  global $post;
  if (!empty($post->post_content)) {
    $regex = get_shortcode_regex();
    preg_match_all('/'.$regex.'/',$post->post_content,$matches);
    if (!empty($matches[2]) && in_array('yourshortcodeslug',$matches[2]) && is_user_logged_in()) {
      // redirect to third party site
    } else {
      // login form or redirect to login page
    }
  }
}
add_action('template_redirect','pre_process_shortcode',1);

C'est la "preuve de concept". Les conditions particulières dont vous avez besoin seront probablement différentes. Notez que c'est un peu "lourd" de traitement. Je voudrais m'assurer qu'il ne fonctionne que si absolument nécessaire.

20
s_ha_dum

wp_redirect() effectue une redirection via des en-têtes HTTP, donc techniquement, cela ne fonctionnera pas (ou du moins ne devrait pas) fonctionner après le démarrage de la sortie de la page. Donc, vous ne pouvez pas simplement utiliser cette fonction en shortcode.

Ce qui ne signifie pas cependant que vous ne pouvez pas utiliser un shortcode pour le contrôler. Vous pouvez vérifier les conditions d'ajustement (si is page et page contient shortcode) avant le début de la sortie (quelque part autour de template_redirect hook), puis effectuer une redirection.

Une autre option consisterait à sortir du code JavaScript conditionnel qui effectuera la redirection une fois la page chargée.

5
Rarst