This is the filter that i use.
add_filter('get_post_metadata', array(WPKWP::CLASS_NAME, 'get_post_metadata'), 10, 4);
I have to use the get_metadata
inside the above call back function. If I use directly it will create an infinite loop, so I believe I have to remove the filter temporally and enable it back .
But remove_filter('get_post_metadata', array(WPKWP::CLASS_NAME, 'get_post_metadata'), 0);
does not seems to work
public static function get_post_metadata($meta_value, $post_id, $meta_key, $single){
if (is_admin()){
return null;
}
remove_filter('get_post_metadata', array(WPKWP::CLASS_NAME, 'get_post_metadata'), 0);
$child_meta = get_metadata('post', $post_id, $meta_key, false);
$meta=null;
if (WPKWP::get_parent()){
$parent_meta = get_metadata('post', WPKWP::get_parent(), $meta_key, false);
if (is_array($parent_meta) && is_array($child_meta)) {
$meta = array_merge($parent_meta, $child_meta);
} else {
$meta = $parent_meta;
}
} else {
$meta = $child_meta;
}
add_filter('get_post_metadata', array(WPKWP::CLASS_NAME, 'get_post_metadata'), 0, 4);
return $meta;
}
Update : @kero add_filter('get_post_metadata', array(WPKWP::CLASS_NAME, 'get_post_metadata'), 0, 4); which is added after removing seems to bring back the filter again. filter mode becomes active even if removed ..any fixes for that ?