为自定义字段添加wordpress过滤器以添加动态值

时间:2017-02-09 13:04:16

标签: php wordpress

我想在wordpress中为自定义字段添加动态值。 我不想使用update_post_meta(),因为它是我想在每次加载帖子时添加的动态值。

自定义字段是tm_video_file,并使用get_post_meta()检索。 这将返回一个URL,我想将一个查询字符串附加到它。

我正在尝试挂钩一个会改变“tm_video_file”值的函数,但没有成功。

// URL will be called as:
get_post_meta($post_id, 'tm_video_file', true);

// I try to add a filter for these meta data
add_filter('get_post_metadata', array($this,'add_hash_key'),1,4);

// And try to append the tm_video_file value here:
public function add_hash_key ($meta_value, $post_id, $meta_key, $single ) {

    if($meta_key == 'tm_video_file')  {
        var_dump($meta_value); // ALWAYS NULL ???
        var_dump($post_id);
        var_dump($meta_key);
        var_dump($single);
}

return $meta_value.'?hash=something-dynamic-here';

}

更新 我在网上发现了一些信息,我认为我更接近解决方案:

public static function add_hash_key($meta_value, $object_id, $meta_key, $single) {

if ($meta_key == 'tm_video_file') {
            $meta_type = 'post';
            $meta_cache = wp_cache_get($object_id, $meta_type . '_meta');
            if ( !$meta_cache ) {
                $meta_cache = update_meta_cache( $meta_type, array( $object_id ) );
                $meta_cache = $meta_cache[$object_id];
            }

            if ( isset($meta_cache[$meta_key]) ) {
                if ( $single ) {
                    $meta_value = maybe_unserialize( $meta_cache[$meta_key][0] );
                } else {
                    $meta_value = array_map('maybe_unserialize', $meta_cache[$meta_key]);
                }
            }
            // At this point $meta_value contains the right data!
            $meta_value .=  '?Hash-Here';
            return array($meta_value); //
        }
    }

在wordpress文件meta.php中有一个名为的函数: get_metadata() 这将应用过滤器,并在最后返回值:

    $check = apply_filters( "get_{$meta_type}_metadata", null, $object_id, $meta_key, $single );
    if ( null !== $check ) {
        if ( $single && is_array( $check ) )
            return $check[0];
        else
            return $check;
    }


//For some reason $check is ALWAYS null .. ? But the filter function did run for sure..

0 个答案:

没有答案