Función de redireccionamiento dentro de un Shortcode

12

Estoy desarrollando un complemento gratuito para conectar un sistema de soporte externo a WordPress para poder autenticar a los usuarios en WordPress.

Para esto, actualmente desde el sistema externo, el usuario es enviado a la página de inicio de sesión de WordPress con esto al final

?action=freshdesk-remote-login

Mi complemento luego comprueba si el usuario ha iniciado sesión en WP, si no muestra el formulario de inicio de sesión y, luego de iniciar sesión correctamente, los redirige al sitio de terceros.

La redirección se realiza utilizando algo como esto: wp_redirect( $sso_url );

Ahora esto funciona bien, pero planeo ofrecer un shortcode que podría agregarse a una página que el usuario elija. Ahora, una vez que un usuario accede a esta página, si ha iniciado sesión, debe reenviarse al sitio de terceros, si no, a la página de inicio de sesión.

¿Hay alguna manera de sugerir que wp_redirect funcione dentro de un shortcode?

    
pregunta Harish Chouhan 01.06.2013 - 14:09

3 respuestas

19

Como lo explica @Rarst, los códigos cortos normalmente se ejecutan demasiado tarde para que pueda redirigir desde uno. Por lo general, se ejecutan en el gancho the_content que está bien después de que el contenido se envía al navegador. Si necesita redireccionar en función de la presencia de un código abreviado, debe verificarlo antes de que el contenido salga del servidor.

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);

Eso es "prueba de concepto". Las condiciones particulares que necesita probablemente serán diferentes. Tenga en cuenta que es un poco bastante "pesado" de procesamiento. Me aseguraría de que solo se ejecute cuando sea absolutamente necesario.

    
respondido por el s_ha_dum 01.06.2013 - 19:04
5

wp_redirect() realiza una redirección a través de encabezados HTTP, por lo que técnicamente no funcionará (o al menos no debería) después de salida de la página comenzó. Así que no puedes usar esta función en shortcode.

Lo que no significa que, sin embargo, no se puede utilizar el código corto para controlarlo. Puede verificar las condiciones de adaptación (si la página y la página contienen código abreviado) antes de que comience la salida (en algún lugar alrededor de template_redirect hook) y realizar una redirección luego.

Otra opción sería generar JavaScript condicionalmente que realice una redirección después de que la página se haya cargado.

    
respondido por el Rarst 01.06.2013 - 14:21
-1

Agregue ob_start(); en la parte superior del complemento o agregue la función de construcción de clase Ejemplo:

function __construct() {
    ob_start();
}
    
respondido por el Meldin Xavier 19.01.2017 - 05:32

Lea otras preguntas en las etiquetas