2014-11-07 7 views
1

며칠 전 save_post라는 액션 훅을 발견했으며이를 활용하고 싶습니다.맞춤 메타 필드 만 편집 할 때 save_post가 실행되지 않습니다.

관련 메타 필드가있는 사용자 지정 게시 유형 "속성"을했습니다. 문제는 게시물 설명과 제목을 업데이트 할 때 save_post 만 실행되고 내 기능이 실행되지만 설명과 제목을 건드리지 않고 게시물과 연결된 메타 필드를 변경하면 save_post가 실행되지 않는다는 것입니다.

무엇이 누락 되었습니까?

간단한 시나리오 : "게시물 제목"및 "게시물 설명"을 업데이트 한 경우에만 save_post가 실행되지만 설명 및 제목을 변경하지 않고 메타 필드 만 편집하면 save_post가 실행됩니다.

제안 사항?

내 Functions.php Code for save_post.

function myplugin_save_postdata() { 
alert('vijay','Event Fired!'); 
$postid=get_the_ID(); 

if ('page' == $_POST['post_type']) { 
if (! current_user_can('edit_page', $postid)) 
return; 
} else { 
if (! current_user_can('edit_post', $postid)) 
return; 
} 
$old_price = doubleval(get_post_meta($postid, 'REAL_HOMES_property_price', true)); 
$new_price = $_POST['REAL_HOMES_property_price']; 
$vijay=doubleval(get_post_meta($postid, 'REAL_HOMES_property_old_price', true)); 
update_post_meta($postid,'REAL_HOMES_property_old_price',$old_price); 
if($vijay !=''){ 
$sub_price = $new_price - $vijay; 
$dev_price = intval(($sub_price * 100)/$vijay); 
update_post_meta($postid, 'REAL_HOMES_property_price_development', $dev_price.'%'); 
} 
} 
add_action('save_post', 'myplugin_save_postdata'); 
(가) 사후 조치를 저장 발사 할 metafields을 변경 후에는 게시물에 업데이트 버튼을 시도 할 수 있습니다

답변

0

... post_meta 그러나 업데이트 될 때

는 필터가 즉시 사용할 수있는 save_post 후크가 실행되지
+0

분명히 나는 ​​업데이트 버튼을 눌러 게시물을 업데이트합니다 ...하지만 그 일은 일어나지 않습니다. – user3533246

0

게시물 메타 데이터를 저장하기 전에 : update_post_metadata. 이를 사용하여 동일한 처리를 수행 할 수 있습니다 (처리는 save_post 중에 삭제 될 수 있음).

function prefix_add_custom_filter_for_postmeta_update() { 
    add_filter('update_user_metadata', 'myplugin_update_foo', 10, 5); 
} 
add_action('init', 'prefix_add_custom_filter_for_postmeta_update'); 


function prefix_custom_filter_for_postmeta_update($null, $object_id, $meta_key, $meta_value, $prev_value) { 

    // check if this update is for the key we want. 
    if ('REAL_HOMES_property_price' == $meta_key && empty($meta_value)) { 
     // do your processing of values and updating of other metakeys here. 
     // processing.... 
    } 

    return null; // this means: go on with the normal execution and save. 

}