有没有办法过滤帖子上的所有自定义字段?
为了简单起见,我们假设:
标准字段:
自定义字段:
作者ISBN让我们假设在页面加载时,我想在每个自定义字段值的末尾附加123456,但我想使用过滤器来实现这一点。哪个add\\U过滤器可以实现这一点?一小段代码会很有帮助。
Edit as per the current top answer:
在找到最上面的答案后,我遇到了一个问题,即它只能在第一个字段上工作。然后我意识到我需要遍历每个元素,这就是我所拥有的。奇怪的是,数据看起来完好无损,但页面没有显示新数据。我的代码中有以下注释:function my_post_meta_filters($null, $post_id, $key, $single){
if(is_admin() || (substr($key, 0, 8) != \'_author_\' && substr($key, 0, 7) != \'_quote_\')){
return $null;
}
static $filtered_values = NULL;
if(is_null($filtered_values)){
$cache = update_postmeta_cache(array($post_id));
$values = $cache[$post_id];
//must loop through all the fields or else only the first field is affected
foreach($values AS $valkey => $value){
if(substr($key, 0, 8) == \'_author_\' || substr($key, 0, 7) == \'_quote_\'){
$filtered[$valkey] = filtered($values[$valkey][0]);
$filtered[$valkey] = maybe_serialize($filtered[$valkey]); //at this point the data is correct and even reserialized where expected
$filtered_values[$valkey] = $filtered[$valkey];
}
}
return $filtered_values;
}
}
add_filter(\'get_post_metadata\', \'my_post_meta_filters\', 0, 4);
function filtered($it){
if(!is_array($it) && !is_serialized($it)){
$filtered = apply_filters(\'number_filter\', $it); //adds numbers to the end
} else {
//otherwise we ran into a serialized array so lets unserialize and run each part through our function
$unserialized = maybe_unserialize($it);
$filtered = array_map(\'filtered\', $unserialized);
}
return $filtered;
}