단축 코드 내에서 기능 리디렉션 위해, 현재 외부 시스템에서,

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

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

?action=freshdesk-remote-login

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

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

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

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



답변

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

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


답변

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

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

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