save_post
관리 대시 보드에서 “새 게시물”링크를 클릭하면 작업에 적용한 기능이 실행된다는 사실에 놀랐습니다 . 주 – I를 누르면 한 전에이는 Save나 Update하고는하지 경과 시간 또는 자동 업데이트 후 즉시 발생합니다.
반면에 무언가를 입력하고 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()
기능 에 대한 문서와 모순되는 것 같습니다 .
누구든지 나를 위해 이것을 정리할 수 있습니까?
답변
‘새 게시물’을 클릭하면 페이지가로드됩니다 wp-admin/post-new.php
.
이렇게하면 WordPress 에서 초안 을 실제로 저장하거나 게시물을 게시 하기 전에도 다른 모든 기능 (예 : 미디어 업로드) 및 플러그인이 정상적으로 작동하도록하기 위해 항상 새 게시물 ( ‘자동 초안’)을 만듭니다.
그리고 이것은 차례로 트리거합니다 save_post
. 따라서 반향.
그렇다면 업데이트하거나 게시 할 때 에코가 나타나지 않는 이유는 무엇입니까?
저장 후 다음 페이지로드 사이에 WordPress는 실제로 GET
동일한 페이지 로 리디렉션을 다시 전송하여 투명하게 나타납니다 ( HttpFox 와 같은 HTTP 모니터를 사용하여이를 확인할 수 있음 ).
다른 말로;
- 당신은 클릭
Update
또는Publish
- 브라우저가 서버로 데이터를 보냅니다
- 워드 프레스가 처리하고 프로세스에서 트리거
save_post
- 브라우저 출력 (에코 포함)이 발생하기 전에 WordPress에서 리디렉션 헤더를 다시 보내고 종료합니다. *
- 브라우저는 리디렉션을 따르고 ‘게시물 편집’페이지를로드합니다.
리디렉션은 불필요하게 보일 수 있지만 ( POST
같은 페이지로 이동할 수 있기 때문에 ) 중복 양식 제출 을 피하는 Post / Redirect / Get 이라는 기술의 일부입니다 .
에 연결된 기능의 결과에 따라 사용자 정의 메시지를 인쇄하려는 경우이 질문 / 답변을save_post
확인하십시오 .
* 엄격하게 사실은 아니지만 리디렉션 헤더가 전송되기 전에 실제로 에코가 발생하지만 브라우저는이를 삭제하거나 너무 빨리 렌더링되지 않습니다.