第一content_save_pre
是一个非常古老的钩子。Adam Brown has a warning that:
最新版本的WordPress(3.5)中没有此挂钩。Do not use it. 它已弃用。您应该查看下面的“相关挂钩”列表,看看是否可以找出是什么替代了它。
我会建议一个类似于我为question asking about restricting status changes based on content word count.
密切关注您的代码,解决方案应如下所示:
function cmeta_as_content_wpse_92012($data){
if (!empty($data[\'post_content\'])) {
$tsvcontent = get_field(\'article_content\'); //The custom content
$data[\'post_content\'] = $tsvcontent;
}
return $data;
}
add_action(\'wp_insert_post_data\',\'cmeta_as_content_wpse_92012\');
但我担心:
我不知道get_field
如果我找到了get_field
这个函数看起来像是从数据库中提取数据,因此它对更新帖子没有任何好处,除非您更新帖子和Posteta,然后运行另一个查询来更改帖子数据,这看起来很浪费。您的问题确实指定了“在写入数据库之前”因此,我想我应该分析$_POST
直接获取数据。
function cmeta_as_content_wpse_92012($data){
global $_POST;
if (!empty($data[\'post_content\']) && !empty($_POST[\'meta\'])) {
foreach ($_POST[\'meta\'] as $v) {
if (\'article_content\' == $v[\'key\']) {
$data[\'post_content\'] = wp_kses( $v[\'value\'] ); // The custom content
}
}
}
// var_dump($_POST,$data); die; // debugging
return $data;
}
add_action(\'wp_insert_post_data\',\'cmeta_as_content_wpse_92012\',1);
还有更多注意事项:
我不记得WordPress在哪一步应用了自己的过滤器,所以我应用了wp_kses
第1项可能有点过分validation function 如果有多个自定义元字段具有相同的键,则需要--article_content
-- 将使用最后一个,并且仅使用最后一个