如果未设置值,则空元框返回PublishDate?

时间:2012-09-28 作者:mathiregister

我不知道为什么会发生这种情况。

我有一个为自定义帖子类型设置的“event\\u end\\u date”自定义元数据库。如果我将此字段留空,它总是显示帖子本身的发布日期?

我使用Custom-Metaboxes-and-Fields-for-WordPress 像这样的库…

$meta_boxes[] = array(
    \'id\'         => \'event_info_optional\',
    \'title\'      => \'Optional\',
    \'pages\'      => array( \'wr_event\'),
    \'context\'    => \'normal\',
    \'show_names\' => true,
    \'priority\' => \'core\',
    \'fields\'     => array(

        array(
            \'name\' => \'End time of event\',
            \'id\'   => $prefix . \'event_end_time\',
            \'type\' => \'text_time\',
        )
    ),
);
我这样保存值…

$wr_event_end_date = isset($_POST[\'wr_event_end_date\']) ? $_POST[\'wr_event_end_date\'] : \'\';
$event_end_date = new DateTime($wr_event_end_date);
update_post_meta($post->ID, "event_end_date", $event_end_date->getTimestamp());
我像这样查询值…

function get_event_end_date($post) {
   $date = get_post_meta($post->ID, \'event_end_date\');
   if ( !empty( $date[0] ) ) {
       //only if a value is saved I return the value
       return $date[0];
   }
}
这适用于所有其他自定义字段。就我的事件结束日期而言,它不是。如果我在后端将字段留空并保存帖子,帖子本身总是将帖子的发布日期显示为事件结束日期。

为什么会这样get_event_end_date() 如果我将帖子留空,函数将返回帖子的发布日期。如果我为字段设置了一个值,它就可以正常工作,但如果我将其保留为空,我不希望函数返回任何内容。

UPDATE

        // End-event-date
        /*$wr_event_end_date = isset($_POST[\'wr_event_end_date\']) ? $_POST[\'wr_event_end_date\'] : \'\';
        $event_end_date = new DateTime($wr_event_end_date);
        update_post_meta($post->ID, "event_end_date", $event_end_date->getTimestamp());*/

        if ( isset($_POST[\'wr_event_end_date\']) ) {
            die(\'this is getting called even though the field is submitted blank\');
            $event_end_date = new DateTime($_POST[\'wr_event_end_date\']);
            update_post_meta($post->ID, "event_end_date", $event_end_date->getTimestamp());
        } else {
            update_post_meta($post->ID, "event_end_date", "");
        }

1 个回复
最合适的回答,由SO网友:Adam 整理而成

我在这里半睡半醒,如果我错了,请纠正我,但在我看来,每次保存帖子时,你都在保存帖子的发布日期,

$wr_event_end_date = isset($_POST[\'wr_event_end_date\']) ? $_POST[\'wr_event_end_date\'] : \'\';
$event_end_date = new DateTime($wr_event_end_date);
update_post_meta($post->ID, "event_end_date", $event_end_date->getTimestamp());
这个-> $event_end_date->getTimestamp() 是罪魁祸首。

所以不管你的变量是什么$wr_event_end_date 无论是否设置值,您的元值将通过getTimestamp() 因为首先没有条件语句检查,

$_POST[\'wr_event_end_date\'] 
如果FALSE 将改为还原为\'\' (无值),然后传递给

new DateTime($wr_event_end_date);
其次,因为

new DateTime( //is now empty here );
您的

getTimestamp()
返回帖子的当前时间戳。

更新您仍应使用text_date 自定义字段,示例:

array(
    \'name\' => \'Test Date Picker\',
    \'desc\' => \'field description (optional)\',
    \'id\'   => $prefix . \'test_textdate\',
    \'type\' => \'text_date\',
),
。。。不要使用时间戳,尤其是如果你没有理由使用时间戳而不是将其转换回常规日期格式,因为WordPress具有处理日期和时间格式的内置函数。

这里有一个例子;

global $post;
$text = get_post_meta( $post->ID, \'_cmb_test_textdate\', true );
$text = date(\'d F Y\', $text); 
echo $text;
    //prints 25 September 2012 for example
我已确保测试此库,以确保它实际上正确输出结果,而且确实如此。

结束

相关推荐

创建行为类似Taxonomy Box的Metabox

我需要在存档页上显示所有自定义文章,但按主题分组/排序。所以结果有点像主题A:一篇示例文章另一篇示例文章主题B:关于培根的帖子等等我在这里读了一些相关的帖子17155 和14306 并得出结论,这种类型的分组必须用后元完成。但是,带有文本输入的简单元框不如类别元框的复选框友好。。。。也没有标签框及其(从最常用的标签选项中选择)。因此,我正在寻求建议,什么是最好的方式,以获得最好的两个世界?我只想对1个主题进行选择,但我希望能够看到其他主题已经被使用了。我是否可以替换类别元框,使其使用单选按钮而不是复选框,