我在自己编写的自定义函数中更新post\\u日期时遇到问题。
我正在尝试将“post\\u date”更改为我的自定义“meta\\u date”值。
功能如下:
function cfc_reset_postdate( $data, $postarr ) {
// If it is our form has not been submitted, so we dont want to do anything
if(defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE) return;
if($data[\'post_type\'] == \'scripture-memory\') {
$date = get_post_meta( get_the_ID(), \'cfc_date\', true );
$date = DateTime::createFromFormat(\'D - M j, Y\', $date);
$date = $date->format(\'Y-m-d\');
$data[\'post_date\'] = $date;
return $data;
}
add_filter( \'wp_insert_post_data\', \'cfc_reset_postdate\', \'10\', 2);
我尝试将其链接到所有这些过滤器,但似乎都不起作用。。。
它可以工作,除了我必须按两次“更新”按钮来更改post\\u日期以匹配我的新元日期。
我做错了什么?
最合适的回答,由SO网友:WraithKenny 整理而成
注意:操作和过滤器并不是真正可以互换的:过滤器通常必须返回传递的数据,否则会破坏某些内容。
基于m0r7if3r所说的内容,wp_insert_post_data
是一个过滤器,因此您应该修改帖子的$数据,并在函数末尾返回它。
(或者,您可以在适当的操作期间对需要更改的变量进行全局化,然后对其进行更改。)
有关教程,请首先阅读:http://core.trac.wordpress.org/browser/tags/3.3.1/wp-includes/post.php#L2566
然后考虑以下内容(我还没有对此进行测试,但它是基于您的代码):
function cfc_reset_postdate( $data ) {
$date = get_post_meta( get_the_ID(), \'cfc_date\', true );
$date = DateTime::createFromFormat(\'D - M j, Y\', $date);
$date = $date->format(\'Y-m-d\');
$data[\'post_date\'] = $date;
return $data;
}
add_filter( \'wp_insert_post_data\', \'cfc_reset_postdate\');