게시물을 업데이트 할 때 올바른 방법은 무엇입니까


19

게시물이 업데이트 될 때 후크하려고하지만 모든 후크를 제외하고는 결코 실행하려고 시도하지 않습니다. updated_post_meta

add_action('updated_post_meta', 'my_function');

function my_function($post_id) {    
    echo 'This is my post ID : '.$post_id;
}

시도 add_action('save_post', 'my_function');했지만 ID가 반향되지 않았 거나이 메시지가 이미 반향되었지만 리디렉션 헤더로 인해 렌더링되지 않습니다.


2
뒤에 공백 save_post이 있습니까, 오타입니까, 아니면 원래 코드에 있습니까? 또한 개발하는 동안 디버깅활성화하십시오 .
Milo

@Milo 죄송합니다 오타, 원래 코드는
아님

이 경우 새 게시물을 만들 때 화면 왼쪽 상단에 결과가 표시됩니다. 기존 게시물 저장은 리디렉션 전에 발생하므로 디버깅을 사용하도록 설정하지 않으면 아무 것도 표시되지 않습니다.
Milo

답변:


55

게시물이 업데이트되면 몇 가지 후크가 발생합니다.

  • 'pre_post_update'액션이 바로 해고 하기 전에 : 포스트가 업데이트 될 때, 인수가 2 있습니다 통과 $post_ID$data그의 배열입니다 모든 포스트 테이블의 다른 데이터베이스 colums
  • 'transition_post_status'업데이트시 발생하는 후크이며 $ new_post_status $old_post_status$post(object)의 3 개 인수를 전달 합니다.
  • 그런 다음 다른 두 개의 전환 후크가 발생하지만 동적으로 명명됩니다. 즉, 실행 된 효과적인 조치는 이전 및 새 게시물 상태에 따라 다릅니다. "{$old_status}_to_{$new_status}"그리고 "{$new_status}_{$post->post_type}". 먼저 포스트 오브젝트 만 인수로 전달하고 두 번째 오브젝트는 포스트 ID 및 포스트 오브젝트를 전달합니다. 여기에서 설명서를 찾으 십시오 .
  • 'edit_post'두 개의 인수를 전달합니다 : $post_ID$post(개체)
  • 'post_updated'그 패스 3 인자 : $post_ID, $post_after(업데이트 후 포스트 개체), $post_before(후 개체 업데이트 전)
  • 또 다른 동적 훅 : "save_post_{$post->post_type}"포스트 유형에 따라, 예를 들어, 표준 게시물입니다 'save_post_post'및 페이지입니다 'save_post_page'이 훅 패스 3 개 인자 : $post_ID, $post(객체에게) 및 $update그, 당신은 업데이트를 수행 할 때 참 (true 또는 false) 부울입니다 사실이 후크는 게시물이 처음 저장 될 때도 시작됩니다.
  • ' save_post' 업데이트 및 첫 번째 저장시 시작되며 이전 후크의 동일한 3 개의 인수를 전달합니다.
  • ' save_post_{$post_type}' 업데이트 및 첫 번째 저장시 시작되며 이전 후크의 동일한 처음 두 인수를 전달합니다.
  • 마지막으로 ' wp_insert_post' 가 있으며 업데이트와 첫 저장시 모두 시작되며 이전 2 개의 후크와 동일한 3 개의 인수를 전달합니다.

이 후크는 게시물이 업데이트 될 때마다 백엔드의 관리 페이지를 통해 wp_update_post또는 "수동으로" 또는 wp_insert_post기능을 사용하여 업데이트 될 때를 통해 시작됩니다 .

관리자 페이지를 사용하여 게시물을 업데이트하면 추가 후크가 발생합니다 (예 : 'update_post_redirect'또는) 'post_updated_messages'. (참조 사용 예제 WPSE 답변).

일부 후크 인수를 사용하려면 첫 번째 인수가 아니며 add_action호출 에서 명시 적으로 선언해야 합니다.

예를 들어, 당신이 사용하려는 경우 '$update'인수 (3가 그)의 'save_post'후크 추가 필요 3$accepted_args에 PARAM add_action( 문서 참조 )

// if you don't add 3 as as 4th argument, this will not work as expected
add_action( 'save_post', 'my_save_post_function', 10, 3 );

function my_save_post_function( $post_ID, $post, $update ) {
  $msg = 'Is this un update? ';
  $msg .= $update ? 'Yes.' : 'No.';
  wp_die( $msg );
}

타이밍에 관한 마지막 참고 사항 : 작업이 트리거 되기 전에add_action 호출 되어야 합니다. 그렇지 않으면 아무것도하지 않습니다.

예를 들어이 코드 :

wp_update_post( $post );
add_action( 'save_post', 'my_function', 10, 3 );

후크가 실행 된 후에 작업이 추가되므로 아무 작업도 수행하지 않습니다. 실제 코드에서는 항상 그렇지는 않습니다.


대시 보드에서 Add New (Post, Page, CPT)를 누르면 'save_post'액션 후크도 발생한다고 생각합니다. 자신을 보려면이 코드를 실행하십시오. function save_post_test( $post_id, $post, $update ) { print ' post_id : '; var_export( $post_id ); print ' post : '; var_export( $post ); print ' update : '; var_export( $update ); wp_die( 'save_post hook runs when you click Add New..' ); } add_action( 'save_post', 'save_post_test', 10, 3 );'save_post'조치가 공개가 아닌 새로 추가에서 실행되는 이유는 무엇입니까? 자동 초안 게시물을 만들기 위해 가정합니다.
lowtechsun

@lowtechsun A에서 언급 한 것처럼 게시물은 업데이트 될 때마다 즉, DB에 저장 될 때마다 실행됩니다. "새로 추가"를 누르면 페이지로드에 가깝게 WP가 DB에 저장된 임시 게시물을 작성하여 후크가 시작되도록합니다.
gmazzap

다시 연락해 주셔서 감사합니다. 어제 이것에 대해 알게되었고 이것의 개념이 혼란 스럽다고 생각했습니다. 먼저 새 게시물을 추가하기 위해 페이지를 엽니 다. 이 단계에서 나는 아직 게시물을 작성 하지 않았다고 생각 했습니다. 만 일단 내가 게시 명중 나는 새 게시물이 생성 생각합니다. 자동 초안 게시물을 삭제 않습니다이 더 나는 희망 WP 촬영 하면 내가 새로 추가하지만 다음 게시를 타격하지 않고 페이지를 떠나 명중?
lowtechsun

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.