我想在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..