更改meta框中的发布日期

时间:2012-01-31 作者:Caleb

我在自己编写的自定义函数中更新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日期以匹配我的新元日期。

我做错了什么?

3 个回复
最合适的回答,由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\');

SO网友:mor7ifer

我为你准备了一个宽松的实施方案。查看\'wp_insert_post_data\' 过滤器,是执行的最后一个过滤器/操作,可以访问插入的数据。您应该考虑只接收第一个参数,即数据数组,更改它,然后返回它。您将有权访问将要插入的所有post数据,因此如果需要进行检查(或者get_post_meta()) 这将是一个很好的时机去做。无论帖子是新帖子还是更新,都会执行此筛选器。。。但除此之外,没有太多的警告。如果您需要查看源代码,请访问/wp-includes/post.php

SO网友:decoder88

我知道这是一个前不久提出的问题,但万一有人想知道,一个更简单的方法是:

<?php $date = get_post_meta($post->ID, "cfc_date", true);
echo the_time(\'Y-m-d\' , $date );?>
退房Wordpress Codex

结束

相关推荐

在短代码中获取Metabox值?

是否可以在该页上执行的短代码中获取该页的元盒值?场景:我每个页面都有一个侧边栏元数据库</我有一些自定义的Gallery快捷码我的gallery快捷码输出600x200幅图像(我在这里使用timthumb)。但如果没有侧栏,我希望它显示900x300。通常我会使用:$sidebar = get_post_meta($post->ID, \'metabox_sidebar\', true); if($sidebar == \"true\") { do something }