很抱歉,如果这是一个n00b问题,因为我更多的是UX设计师,而不是开发人员。我在WordPress论坛上发布了这个,并且是在这里发布的,所以这里就是......
我正在尝试在Wordpress中查询自定义帖子类型,并返回按自定义元日期分组的结果。我有循环和代码工作来显示我想要的所有帖子,但是在尝试按自定义元日期对它们进行分组时遇到问题。
我希望查询能够找到meta_value中的所有日期,将它们显示为h3,然后为帖子创建一个ul,每个日期都为li。
自定义元日期保存为mm / dd / yy HH:MM。我是这样做的,因为无论如何我需要一个相关的开始日期字段,它让我使用WordPress的orderby。我只是根据需要格式化输出。
我似乎无法绕头1)把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 ......
答案 0 :(得分:0)
您的部分问题可能是您对$ post var的使用。您正在调用全局$ post var,然后在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。假设您将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 );
这可以让你更近一点。
答案 1 :(得分:0)
使用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();
?>