如果这是一个n00b问题,我很抱歉,因为我更多的是一个用户体验设计师,而不是开发人员。我在WordPress论坛上发布了这篇文章,并被引导到这里,所以它开始了。。。
我试图在Wordpress中查询一个自定义的帖子类型,并返回按自定义元日期分组的结果。我有循环和代码来显示我想要的所有帖子,但在尝试按自定义元日期对它们进行分组时遇到了问题。
我希望查询能在meta_value中找到所有日期,将它们显示为h3,然后为帖子创建一个ul,每个都是li。
自定义元日期保存为mm/dd/yy HH:mm。我这样做是因为我需要一个相关的开始日期字段,它可以让我使用WordPress的orderby。我只是在需要时按照自己的意愿格式化输出。
我似乎无法将h3和ul放在哪里;以及2)按日期对项目进行分组。这是我迄今为止的代码:
<ul>
<?php
global $post;
$all_args = array(
'post_type' => 'agenda',
'category' => the_title,
'post_status' => 'publish',
'meta_key' => 'cpt_agenda-event-date',
'posts_per_page' => 5,
'orderby' => 'meta_value',
'order' => 'ASC'
);
$all_agenda_posts = get_posts( $all_args );
foreach( $all_agenda_posts as $post ) : setup_postdata($post);
$metas = get_post_meta( get_the_ID( ), 'cpt_agenda-event-date', false );
// If you want to show values
foreach ( $metas as $meta ) {
$meta;
$formatted = date("l, F j", strtotime($meta));
echo '<h3>' . $formatted . '</h3>';
}
?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; ?>
</ul>
我也有图片发布在https://wordpress.stackexchange.com/questions/42846/group-posts-by-custom-meta-field-date其示出了电流输出和期望输出。请忽略时间字段和样式,因为一旦正确工作,就需要应用CSS。
谢谢你的帮助!
更新:我已经完成了这项工作,下面的代码可以帮助其他人。我需要使用tax_query
部分问题可能是您使用$post-var。您调用全局$post-val,然后在foreach中使用相同的var名称:
foreach( $all_agenda_posts as $post ) : setup_postdata($post);
这些有冲突,请尝试更改为
foreach( $all_agenda_posts as $aa_post ) : setup_postdata($aa_post);
另一个可能的问题是arg数组。您有:
'category' => the_title,
我认为这应该是
'category' => the_title(),
最后,get_the_ID()返回当前/全局$post的ID,该post由于第一个错误而被覆盖。假设您将foreach中的$post重命名为$aa_post,则更改
$metas = get_post_meta( get_the_ID( ), 'cpt_agenda-event-date', false );
至
$metas = get_post_meta( $aa_post->ID, 'cpt_agenda-event-date', false );
这应该会让你更近一点。
使用tax_query帮助了我。我刚刚从工作示例中复制/粘贴了代码,所以添加了一些内容。
<?php
global $post;
$term = get_term_by('name', $event_name, 'agenda_category');
$all_args = array(
'post_type' => 'agenda',
'post_status' => 'publish',
'meta_key' => 'cpt_agenda-event-date',
'posts_per_page' => -1,
'orderby' => 'meta_value',
'order' => 'ASC',
'tax_query' => array(
array(
'taxonomy' => 'agenda_category',
'field' => 'id',
'terms' => $term->term_id
)
)
);
$all_agenda_posts = new WP_Query($all_args);
$prev_start_date = "";
while ( $all_agenda_posts->have_posts() ) : $all_agenda_posts->the_post();
$agenda_date = get_post_meta( get_the_ID( ), 'cpt_agenda-event-date', true);
$agenda_end_time = get_post_meta( get_the_ID( ), 'cpt_agenda-end-time', true);
if($prev_start_date!=date("l, F dS", strtotime($agenda_date))) {
echo "<h3>".date("l, F dS", strtotime($agenda_date))."</h3>";
$prev_start_date = date("l, F dS", strtotime($agenda_date));
}
?>
<div class="schedule">
<div class="stime"><?php echo date("h:i a", strtotime($agenda_date)); ?>
<?php if ($agenda_end_time){
echo ' to ';
echo date("h:i a", strtotime($agenda_end_time));
} else {
echo '';
}
?>
</div>
<div class="stitle">
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</div>
</div>
<?php endwhile;
if ( $agenda_disclaimer ) { ?>
<p class="change">~ <?php echo $agenda_disclaimer; ?> ~</p>
<?php }
wp_reset_postdata();
?>