fonction de redirection dans un code court

12

Je développe un plugin gratuit pour la connexion d'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, une fois la connexion établie, il les redirige vers le site tiers.

La redirection est effectuée 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. À présent, une fois qu'un utilisateur accède à cette page, s'il est connecté, il doit être transféré vers le site tiers, sinon, vers la page de connexion.

Existe-t-il un moyen de suggérer à wp_redirect de fonctionner dans un shortcode?

    
posée Harish Chouhan 01.06.2013 - 14:09

3 réponses

19

Comme l'explique @Rarst, les codes abrégés sont généralement trop tardifs pour que vous puissiez les rediriger 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 avez besoin de 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 une "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.

    
réponse donnée s_ha_dum 01.06.2013 - 19:04
5

wp_redirect() effectue une redirection via des en-têtes HTTP, donc techniquement, cela ne fonctionnera pas (ou du moins ne devrait pas) après. la sortie de la page a commencé. 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) et effectuer une redirection ensuite.

Une autre option consisterait à exporter conditionnellement le code JavaScript qui effectuera la redirection une fois la page chargée.

    
réponse donnée Rarst 01.06.2013 - 14:21
-1

Ajoutez ob_start(); en haut du plugin ou ajoutez une fonction de construction de classe Exemple:

function __construct() {
    ob_start();
}
    
réponse donnée Meldin Xavier 19.01.2017 - 05:32

Lire d'autres questions sur les étiquettes