最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

filters - How to remove get_post_metadata using remove_filter inside a class?

programmeradmin4浏览0评论

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 ?

发布评论

评论列表(0)

  1. 暂无评论