update_post_meta와 delete_post_meta를 연결하는 방법은 무엇입니까?


29

나는이 모든 것들에 푹 빠져있어 내 머리를 잡기 위해 고심하고있다. 그래서 나는 다음과 같은 일을하려고 노력하고있다.

실행되면 update_post_meta다음 meta_key과 같은지 확인하십시오 (특정 meta_key가 사용되면 일부 코드를 트리거하고 싶습니다). 내가 찾고있는 메타 키라면 $post->ID업데이트되는 메타 키 를 알아야하는 코드를 실행 하십시오.

나는에 연결해야합니다 delete_post_meta위와 같이 반대를하지 너무 종류.

사람에 접선에 대한 몇 가지 예제 코드로 날을 제공 할 수 있습니다 update_post_metadelete_post_meta?

답변:


45

update_post_meta후크는보다 일반적인에서 호출 update_metadata()당신이 직접 발견되지 않을 수도 있습니다, 기능. 세 가지 고리는 다음과 같습니다.

  • update_post_metadata메타 데이터 업데이트를 '강탈'하고 다른 작업을 수행 할 수있는 필터입니다. 부울을 리턴하는 함수를 연결하면 실행이 중지되고 부울이 리턴됩니다.
  • update_post_meta데이터가 데이터베이스에서 업데이트 되기 전에 호출되는 작업입니다 .
  • updated_post_meta데이터가 데이터베이스에서 업데이트 된 호출되는 조치입니다 .

메타 키가 데이터베이스에 아직 존재하지 않은 경우, update_metadata()제어에 전달 add_metadata()유사한 후크를 가지고있는, add_post_metadata, add_post_meta,와 added_post_meta. 이것은 update[d]_post_meta호출 되기 전에 발생합니다 . 메타 키를 추가 할 때 당신이 뭔가를하고 싶은 그래서 경우 또는 업데이트 확인 모두에 후크 수 update*add*만 고지 사항 것을 - 후크 updated_*added_*행동이 유사한 매개 변수를 전달, update_*그리고 add_*하지 않습니다 ( add_post_meta먼저 메타 ID를 전달하지 않습니다) .

delete_metadata()비슷한 후크를 가지고 delete_post_metadata, delete_post_meta하고 deleted_post_meta.

샘플 코드 :

add_action( 'added_post_meta', 'wpse16835_after_post_meta', 10, 4 );
add_action( 'updated_post_meta', 'wpse16835_after_post_meta', 10, 4 );
function wpse16835_after_post_meta( $meta_id, $post_id, $meta_key, $meta_value )
{
    if ( 'wpse16835_meta_key' == $meta_key ) {
        wpse16835_do_something( $post_id, $meta_value );
    }
}

add_action( 'deleted_post_meta', 'wpse16835_deleted_post_meta', 10, 4 );
function wpse16835_deleted_post_meta( $deleted_meta_ids, $post_id, $meta_key, $only_delete_these_meta_values )
{
    if ( 'wpse16835_meta_key' == $meta_key ) {
        wpse16835_undo_something( $post_id );
    }
}

이것에 대한 슈퍼 thx. 내가 대해 알고 있었다 update_post_meta사용 update_metadata하고 거기에 후크가 있었다 added_post_meta그리고 updated_post_meta지금까지 내가 얻을 수있는만큼하지만 그게 전부는. 사용 방법을 이해하지 못했습니다. 그러나 지금 나는 그것을 얻었다 고 생각한다 :)
Brady

3
보다 구체적으로, 후크는updated_{$post_type}_meta
Benjamin Intal

8

Jan 답변은 게시물 편집 페이지에서 사용자 지정 메타 데이터가 삭제되는 경우를 제외하고는 위 내용과 거의 같습니다. 이것은 wp-admin / admin-ajax.php를 호출하여 메타 데이터 아래의 "삭제"버튼을 클릭하자마자 비동기 적으로 발생합니다. 불행히도, 그 호출 delete_metadata()은 meta.php 의 함수를 우회하고delete_meta() 대신 wp-admin / includes / post.php를 호출합니다 (wp-includes / post.php와 혼동하지 마십시오).

그래도 delete_postmeta(삭제 전) 및 deleted_postmeta(삭제 후 ) 두 가지 작업을 계속 사용할 수 있습니다 . 둘 다 단일 매개 변수를 사용합니다 $mid. 이는 키가 아닌 메타 데이터의 ID입니다 . 다음을 사용하여 메타 데이터 개체를 검색 할 수 있습니다.

$meta = get_post_meta_by_id($mid);  

meta_id, post_id, meta_key abd meta_value를 가진 객체를 반환합니다. 물론 시간 deleted_postmeta이 지날 수록 메타 데이터가 삭제되어get_post_meta_by_id() 작동하지 않습니다.

게시물 편집 페이지에서 사용자 지정 메타 데이터를 업데이트 할 때도 마찬가지입니다. update_metadata()meta.php 의 함수 (및 해당 조치)는 호출 되지 않지만 update_meta()wp-admin / includes / post.php의 함수는 대신 사용됩니다. 두 작업을 다시 여기 update_postmetaupdated_postmeta. 인수는 $ meta_id, $ post_id, $ meta_key, $ meta_value입니다.

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