새 게시물을 만들 때 save_post 작업이 실행되는 이유는 무엇입니까?


31

save_post관리 대시 보드에서 "새 게시물"링크를 클릭하면 작업에 적용한 기능이 실행된다는 사실에 놀랐습니다 . 주 - I를 누르면 한 전에이는 SaveUpdate하고는하지 경과 시간 또는 자동 업데이트 후 즉시 발생합니다.

반면에 무언가를 입력하고 Publish또는 Update또는 Save Draft버튼을 누르면 액션 핸들러에 넣은 에코 문이 에코되지 않으므로 다른 시간에 액션이 실행되지 않는 것처럼 보입니다. 관련이 없을 수 있습니다.

내 코드는 다음과 같습니다.

add_action('save_post', 'MyNS\save_event_metabox', 10, 2);
function save_event_metabox($post_id, $post){
  echo "<h1>YES!</h1>";
}

나는 "새 게시물"링크를 누르면하지만 난 뭔가를 누른 다음를 누릅니다 입력 할 때 에코하지 않습니다 (페이지 상단)이 YES 에코 Update이나 Publish또는 Save Draft. 이것은 save_post동작과 wp_insert_post()기능 에 대한 문서와 모순되는 것 같습니다 .

누구든지 나를 위해 이것을 정리할 수 있습니까?


대박 !!! 사용자 정의 메타 박스 필드를 저장할 때 동일한 상황에 처해 있습니다. 내가 사용할 수있는 아이디어?
Prasath Nadarajah

답변:


39

'새 게시물'을 클릭하면 페이지가로드됩니다 wp-admin/post-new.php.

이렇게하면 WordPress 에서 초안 실제로 저장하거나 게시물을 게시 하기 전에도 다른 모든 기능 (예 : 미디어 업로드) 및 플러그인이 정상적으로 작동하도록하기 위해 항상 새 게시물 ( '자동 초안')을 만듭니다.

그리고 이것은 차례로 트리거합니다 save_post. 따라서 반향.

그렇다면 업데이트하거나 게시 할 때 에코가 나타나지 않는 이유는 무엇입니까?

저장 후 다음 페이지로드 사이에 WordPress는 실제로 GET동일한 페이지 로 리디렉션을 다시 전송하여 투명하게 나타납니다 ( HttpFox 와 같은 HTTP 모니터를 사용하여이를 확인할 수 있음 ).

다른 말로;

  1. 당신은 클릭 Update또는Publish
  2. 브라우저가 서버로 데이터를 보냅니다
  3. 워드 프레스가 처리하고 프로세스에서 트리거 save_post
  4. 브라우저 출력 (에코 포함)이 발생하기 전에 WordPress에서 리디렉션 헤더를 다시 보내고 종료합니다. *
  5. 브라우저는 리디렉션을 따르고 '게시물 편집'페이지를로드합니다.

리디렉션은 불필요하게 보일 수 있지만 ( POST같은 페이지로 이동할 수 있기 때문에 ) 중복 양식 제출 을 피하는 Post / Redirect / Get 이라는 기술의 일부입니다 .

에 연결된 기능의 결과에 따라 사용자 정의 메시지를 인쇄하려는 경우이 질문 / 답변을save_post 확인하십시오 .

* 엄격하게 사실은 아니지만 리디렉션 헤더가 전송되기 전에 실제로 에코가 발생하지만 브라우저는이를 삭제하거나 너무 빨리 렌더링되지 않습니다.


두드러진. 완전하고 자세한 답변을 주셔서 감사합니다! 더 많은 것을 배우기 위해 처음부터 어떻게이 지식을 접하게 되었습니까?
Tom Auger

동일한 좌절감을 통해;) 좋은 IDE (phpDesigner 사용)를 잡고 관련 관리자 파일을 조사하십시오.
TheDeadMedic

1
바로 동생. 당신의 전문 지식을 가지고있어 주셔서 감사합니다!
Tom Auger

멋진 정보입니다. 로컬 서버에서 작동하지 않는 것처럼 보였지만 프로덕션 서버에서는 작동하지 않는 것처럼 보였기 때문에 로컬 서버에서 보이는 것처럼 post / redirect / get 기술이 제대로 적용되지 않았습니다. 리디렉션 헤더를 보냅니다 (왜 그런지 모르겠습니다).
WebMacheter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.