2016-10-31 3 views
0

여러분이 도움을 줄 수있는 곳이 있습니다. 헤드 라인, 복사 등 필요한 게시물/페이지 데이터를 채우기 위해 일부 JSON 데이터를 가져 오는 REST 인터페이스가 있습니다. 반면에 존재하지 않는 URI에는 404의 WordPress 처리 기능이 있습니다. 그래서 다음과 같은 시나리오에 직면하게하십시오.WordPress 4.6.1 404 처리

사용자가 www.webpage.com/im-not-there/을 요청하고 해당 게시물/페이지가 존재하지 않기 때문에 404.php 템플릿을 보냅니다. 지금까지. 너무 좋아요. 그러나 이것이 까다로워지는 곳입니다. WP가 404를 보내길 원하기 전에 REST 인터페이스를 쿼리하고 싶습니다. 페이지가 존재하는지 묻고 (확실히 이것보다 조금 복잡합니다)). 따라서 REST 인터페이스의 가능한 대답은 TRUE 또는 FALSE 일 수 있습니다. 에 TRUE 내가 속한 곳으로 WP가 가고 싶지만, FALSE에 WP 파일에 내 데이터를 넣고 싶습니다. 그것을 위해 나는 적절한 코드를 가지고 있고 바른 고리를 사용한다. 출력 (404)이 올바르도록 글/페이지가 존재하지 않을 수도 있습니다.

쉬운 설명 :

  • 사용자가 URI를 요청 -> 페이지/게시물 존재 -> 요청 템플릿과 WP 물건
  • 사용자가 URI를 요청 -> 페이지/게시물이 존재하지 않습니다 -> REST 인터페이스를 요청하고 그것은 반환
    • ->TRUE -> 당신이
  • 에 익숙해으로 " 404.php를 사용하지만 template-xy.php를 사용하지 않는"당신의 물건을 할 WP에게
  • ->FALSE -> 표준 WP 동작입니다.

은 다음 밖으로 찾았습니다 "다른 템플릿을로드이 작업 후크의 잘 사용하지 않습니다"

  • WP의 사본은 클리 어리 것은 말한다. 분과 예를 참조 - - 참조 된 후크는
  • 'template_redirect'는 template_include를 사용하는 페이지가 제대로로드처럼 더 오류가 발생하지만 <title>404.php 템플릿에서 여전히
  • 코덱스 다음은 "WP"후크 말한다 : "이 훅 쿼리 다음과 같은 어떤 높은 수준의 필터링 또는 유효성 검사를 수행 할 수있는 하나 개의 효과적인 장소이지만, 워드 프레스는 라우팅, 처리 또는 처리를 수행하기 전에. [...] "
    • 이 시점부터 나는 더 이상지고 있지 않습니다.

추가 읽기 :

설정

  • 방랑 & PuPHPet
    • 없는 핵심 오버라이드 (override) : 6,
    • 의 Nginx는
    • MySQL의 5.6
    • PHP 5.6
    • 워드 프레스 4.6.1
    • 없음 플러그인은
    • 예쁜 URL을

    제한을 활성화

  • 서버 측 처리를 사용할 수 없음
  • template_include의 필터를 사용하면 너무 늦어서 "오류"가 발생합니다. <title>

모든 코덱스 링크를 게시하지 않아서 죄송하지만 Stackoverflow가 허용하지 않습니다. :)

당신에게 대단히 감사합니다

답변

0

솔루션, 나는 한하지만 중요한 단계를 놓친 발견!

HTTP 헤더를 404에서 200으로 설정하고 WP 모자가 모든 것을 잘 알려주도록 설정합니다.

그래서이 404

add_filter('template_include', 'portfolio_page_template', 99); 

function portfolio_page_template($template) { 
    global $wp_query; 

    if ($wp_query->is_404) { // TRUE 
    $new_template = locate_template(array('no-404-template.php')); 
    if ('' != $new_template) { 
     if ($wp_query->is_404) { 
      $wp_query->is_404 = FALSE; 
      $wp_query->is_archive = TRUE; 
     } 
     header("HTTP/1.1 200 OK"); 

     return $new_template ; 
    } 
    } 

    return $template; 
} 
의 해결책 코덱스 예를 사용하는