단축 코드 내에서 기능 리디렉션


14

WordPress에서 사용자를 인증 할 수 있도록 외부 지원 시스템을 WordPress에 연결 하는 무료 플러그인개발 중 입니다.

이를 위해, 현재 외부 시스템에서, 사용자는 이것을 끝에 WordPress의 로그인 페이지로 보내집니다.

?action=freshdesk-remote-login

그런 다음 내 플러그인은 사용자가 WP에 로그인했는지 확인합니다. 로그인 양식이 표시되지 않으면 로그인에 성공하면 다시 타사 사이트로 리디렉션합니다.

리디렉션은 다음과 같은 방법으로 수행됩니다. wp_redirect( $sso_url );

이제는 잘 작동하지만 사용자가 선택한 페이지에 추가 할 수있는 짧은 코드를 제공 할 계획입니다. 이제 사용자가이 페이지로 이동 한 후 로그인하면 타사 사이트로 전달되고 그렇지 않은 경우 로그인 페이지로 전달되어야합니다.

wp_redirect가 단축 코드 내에서 작동하도록 제안 할 수있는 방법이 있습니까?

답변:


21

@Rarst가 설명 하듯이 단축 코드는 일반적으로 내부에서 리디렉션하기에 너무 늦게 실행됩니다. 일반적으로 the_content컨텐츠가 브라우저로 전송 된 후의 후크 에서 실행됩니다 . 단축 코드가 있는지에 따라 경로 재지 정해야하는 경우 컨텐츠가 서버를 떠나기 전에 해당 단축 코드를 확인해야합니다.

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

그것은 "개념 증명"입니다. 필요한 특정 조건은 다를 수 있습니다. 이것은 상당히 "무거운"처리 과정입니다. 나는 그것이 절대적으로 필요한 곳에서만 실행되도록 할 것입니다.


고마워요 이것은 내가 완벽하고 정확하게 찾은 것입니다.
Harish Chouhan 2016 년

안녕하세요,이 코드가 특정 페이지에서만 실행되는지 확인하기 위해 몇 가지 검사를 추가했지만 wp_redirect를 짧은 코드 안에 배치해도 잘 작동한다는 것을 알았습니다. 나는 자바 스크립트를 사용해 보았고 wp_redirect( $sso_url );방금 작동했습니다.
Harish Chouhan 2016 년

1
wp_redirect정상적인 조건에서는 단축 코드에서 작동하지 않습니다. 방금 확인했습니다. 그것이 당신을 위해 일한다면, 당신의 테마 또는 플러그인은 내가 그것을 제안하도록 제안한 것과 매우 비슷한 일을하고 있습니다.
s_ha_dum 2016 년

그래 당신 말이 맞아요. 시간을 낭비해서 죄송합니다. 코드가 여러 개 있습니다. 나는 :) 당신의 위의 코드를 사용하여 다시 오전
Harish Chouhan

5

wp_redirect()HTTP 헤더를 통해 리디렉션을 수행하므로 기술적으로 페이지 출력이 시작된 후에는 작동하지 않아야합니다. 따라서이 기능을 짧은 코드로만 사용할 수는 없습니다.

그러나 단축 코드를 사용하여 제어 할 수는 없습니다. 출력을 시작하기 전에 ( template_redirect후크 어딘가에) 피팅 조건 (페이지 및 페이지에 짧은 코드가 포함 된 경우)을 확인한 다음 리디렉션을 수행 할 수 있습니다.

다른 옵션은 페이지가로드 된 후 리디렉션을 수행하는 조건부 JavaScript를 출력하는 것입니다.


안녕하세요, 나는 이것을 찾았습니다 : 함수 pippin_login_form_shortcode ($ atts, $ content = null) {extract (shortcode_atts (array ( 'redirect'=> ''), $ atts)); if (! is_user_logged_in ()) {if ($ redirect) {$ redirect_url = $ redirect; } else {$ redirect_url = get_permalink (); } $ form = wp_login_form (array ( 'echo'=> false, 'redirect'=> $ redirect_url)); } return $ form; } add_shortcode ( 'loginform', 'pippin_login_form_shortcode');`여기 wp_redirect가 단축 코드 안에있는 것 같습니다.
Harish Chouhan 2016 년


@HarishChouhan wp_redirect()그 코드에서 어디를 보십니까 ?
Rarst

안녕하세요, 네가 옳아 서 미안해 예제 코드에서는 URL을 저장하고 실제로 리디렉션하지는 않습니다. 따라서 귀하에게 JavaScript 기반 리디렉션이 유일한 옵션 인 것 같습니다.
Harish Chouhan 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.