问题
这是之前的一个问题,米洛在这里很客气地回答了这个问题-
How to sort CPT by custom meta value (date), and return posts month by month简而言之,我在一些方面遇到了一些问题,无法正确格式化我的自定义元框日期。。。即,在“我的自定义列”的后端,然后在“我的存档模板”的前端。
例如,在我的存档模板中,我试图通过下面粘贴的代码返回帖子所属的当前日期,但当我访问没有帖子的月份时,我的模板会返回日期;1970年1月“;相反
<?php $calendar_month = get_post_meta($post->ID, \'epr_startdate\', TRUE);?>
<?php $this_month = strtotime($calendar_month); ?>
<span id="current_month"><?php echo date( \'F Y\', $this_month ); ?></span>
此外,在后端,我正在尝试使用它,以便;“开始日期”;则只输出该信息,而如果用户同时输入;“开始日期”;和一个“;“结束日期”;然后重新运行这两个日期,但当我使用下面的代码示例时,我的开始日期将以两个形式返回,如下所示:2013年3月3日-2013年3月3日。
case "eventdate":
$eventstart = get_post_meta($post->ID, \'epr_startdate\', true);
$eventstart_col = strtotime($eventstart);
$eventend = get_post_meta($post->ID, \'epr_enddate\', true);
$eventend_col = strtotime($eventend);
if ( get_post_meta($post->ID, \'epr_startdate\', true) && ! get_post_meta($post->ID, \'epr_enddate\', true) )
echo date( \'M n, Y\', $eventstart_col );
elseif ( get_post_meta($post->ID, \'epr_enddate\', true) )
echo date( \'M n, Y\', $eventstart_col ) . \' — \' . date( \'M n, Y\', $eventend_col );
else
echo \'NA\';
break;
提前感谢您抽出时间
最佳
最终解决方案非常感谢s_ha_dum 感谢他的耐心和支持
下面是我的问题的最终工作解决方案。。。
Correctly outputting the date when no posts exist for the currently queried month:
<?php $this_month = strtotime($calendar_month);
if (false === $this_month) {
$this_month = strtotime(get_query_var( \'calendar_year\' ) . get_query_var( \'calendar_month\' ) .\'01\');
} ?>
<span id="current_month"><?php echo date( \'F Y\', $this_month ); ?></span><?php
?>
Custom columns:case "eventdate":
$start_date = get_post_meta($post->ID, \'epr_startdate\', true);
$start_date_col = strtotime($start_date);
$end_date = get_post_meta($post->ID, \'epr_enddate\', true);
$end_date_col = strtotime($end_date);
if ( $start_date_col && !$end_date_col )
echo date( \'M d, Y\', $start_date_col );
elseif ( $start_date_col && $end_date_col )
echo date( \'M d, Y\', $start_date_col ) . \' — \' . date( \'M d, Y\', $end_date_col );
else
echo \'NA\';
break;
Redirecting /calendar -> /calendar/yyyy/mm:
function redirect_empty_archive() {
$m = get_query_var(\'calendar_month\');
$y = get_query_var(\'calendar_year\');
if (
is_post_type_archive(\'calendar\') &&
( empty($m) || empty($y) )
) {
wp_safe_redirect( \'/calendar\' . date(\'/Y/m\') );
}
}
add_action(\'template_redirect\',\'redirect_empty_archive\');
最合适的回答,由SO网友:s_ha_dum 整理而成
但是,当我访问一个月没有帖子时,我的模板会返回日期“1970年1月”。
对这将发生。UNIXTIME开始于1970年1月1日。这是“0000/00/00”,但负数可以追溯到1901年的某个时候。strtotime
将返回false
任何超出范围的事情,包括你不存在的日期。date
如果给出了一个错误的日期,将假定为“零日”,因此,如果日期不存在或有其他缺陷,将得到1970年1月1日。如果我没记错的话,64位机器可以处理更大的范围。不管怎样,一个不存在的日期会给你1970年。尝试:
$calendar_month = "1901/01/01";
$this_month = strtotime($calendar_month);
var_dump($this_month);
echo \'<br />\';
echo date(\'Y\',$this_month);
echo \'<br />\';
在显示之前,您要确保您有一个好的日期。
<?php $this_month = strtotime($calendar_month);
if (false !== $this_month) { ?>
<span id="current_month"><?php echo date( \'F Y\', $this_month ); ?></span><?php
}
您的另一个代码有点庞大,但看起来应该可以工作,只是日期格式错误。我怀疑您并没有得到想要的“月-日,年”,而是“月-名-月-号,年”,如果两个日期在同一个月/年内,则看起来像是重复的。请仔细查看
date formatting operators.
$eventstart = get_post_meta($post->ID, \'epr_startdate\', true);
$eventstart_col = strtotime($eventstart);
$eventend = get_post_meta($post->ID, \'epr_enddate\', true);
$eventend_col = strtotime($eventend);
if ( $eventstart_col && !$eventend_col ) {
// only the start date
echo date( \'M d, Y\', $eventstart_col );
} elseif ( $eventstart_col && $eventend_col ) {
// both start and end date
echo date( \'M d, Y\', $eventstart_col ) . \' — \' . date( \'M d, Y\', $eventend_col );
} else {
echo \'NA\';
}
我想我已经把它们正确地组合在一起了。