Php 显示自定义帖子类型中的帖子,并按开始时间自定义字段对其排序,按天分组
我有html模板,我必须从中创建自定义Wordpress主题-我使用的大多数是高级自定义字段,我需要以我在标题中解释的方式显示帖子(显示自定义帖子类型的帖子,并按开始时间自定义字段对其排序,按天分组)。这张图片展示了帖子的实际外观。 这里是我定义的字段 所以,如果我在周一有3个研讨会,它们将在周一下展示,并将按照最早的开始时间排序。对于研讨会演讲者,我正在使用关系字段,该字段允许我将一个或多个演讲者(也是自定义帖子类型)添加到研讨会自定义帖子类型(我还没有弄清楚,但我会) 我对排序有一些概念,比如Php 显示自定义帖子类型中的帖子,并按开始时间自定义字段对其排序,按天分组,php,wordpress,sorting,advanced-custom-fields,Php,Wordpress,Sorting,Advanced Custom Fields,我有html模板,我必须从中创建自定义Wordpress主题-我使用的大多数是高级自定义字段,我需要以我在标题中解释的方式显示帖子(显示自定义帖子类型的帖子,并按开始时间自定义字段对其排序,按天分组)。这张图片展示了帖子的实际外观。 这里是我定义的字段 所以,如果我在周一有3个研讨会,它们将在周一下展示,并将按照最早的开始时间排序。对于研讨会演讲者,我正在使用关系字段,该字段允许我将一个或多个演讲者(也是自定义帖子类型)添加到研讨会自定义帖子类型(我还没有弄清楚,但我会) 我对排序有一些概念,
$arrayname[date][startingtime]=array(需要显示的所有数据)
,但我不知道如何在实际的查询中实现它,从而拉动研讨会(可能是foreach循环?)
所以基本上这就是我现在拥有的代码,以及我在陷入困境之前所取得的进展
<?php
$args = array('post_type' => 'workshop');
$workshoptime = the_field('time');
$yeardate = the_field('workshop_date');
$sorting = array(
array('time' => '$workshoptime'),
array('yearmonthdate' => '$yeardate'),
);
$loop = new WP_Query( $args );
//Display the contents
while ( $loop->have_posts() ) : $loop->the_post();
?>
<!--Tabs Box-->
<div class="tabs-box">
<!--Tab / Current / Monday-->
<div class="tab current" id="monday">
<div class="hour-box active-box">
<div class="hour">10:00 AM</div>
<div class="img-circle circle"><span></span></div>
<div class="toggle-btn active"><h3><?php the_title();?></h3></div>
<div class="content-box collapsed">
<div class="content"><p><?php the_content();?></p></div>
<br>
<div class="row professional clearfix">
<div class="col-md-6 col-sm-6 col-xs-12 info">
<figure class="img-circle image"><img class="img-circle" src="images/resource/testi-thumb-1.jpg" alt=""></figure>
<h5 class="prof-title"></h5>
<h6 class="prof-occup">Speaker</h6>
</div>
<div class="col-md-6 col-sm-6 col-xs-12 text-right">
<a href="#" class="theme-btn btn-style-one hvr-bounce-to-right dull">10:00 - 12:00</a>
<a href="single-event.html" class="theme-btn btn-style-one hvr-bounce-to-right"><span class="fa fa-play"></span>DETAILS ABOUT THE EVENT</a>
</div>
</div>
</div>
</div>
</div>
</div>
上午10:00
演讲者
您可以使用WP\u查询对项目进行排序
:
$args = array(
'posts_per_page' => -1,
'orderby' => 'meta_value_datetime',
'order' => 'ASC',
'meta_type' => 'DATETIME',
'meta_key' => 'workshop_date',
'post_type' => 'workshop',
'post_status' => 'publish'
);
现在您在循环中有了正确的顺序
分组方式可能如下所示:
// in loop
$timestamp = strtotime( $workshop_date );
$date = date( 'Y-m-d', $timestamp );
if ( $date == $current_date ) {
// it is the same day
} else {
// it is a new day
$current_date = $date;
}
您必须在PHP脚本中进行分组(在文章中循环,您可以检测日期何时更改,并输出相应的节头/页脚)。为了做到这一点,你需要让你的文章先按日期再按时间排序,这可以通过常规的WP_查询来实现,但是你需要使用meta_查询功能,因为它的文档不是非常清晰 下面是一个简单的例子:
<?php
$args = [
'post_type' => 'workshop',
'meta_query' => [
'workshop_date' => [
'key' => 'workshop_date',
'compare' => 'EXISTS'
],
'workshop_time' => [
'key' => 'workshop_time',
'compare' => 'EXISTS'
]
],
'orderby' => [
'workshop_date' => 'ASC',
'workshop_time' => 'ASC'
]
];
$loop = new WP_Query($args);
function print_workshop() {
?>
<section class="workshop">
<?php the_title() ?> at <?php the_field('workshop_time') ?>
</section>
<?php
}
function print_day_header() {
?>
<article>
<header><?php the_field('workshop_date') ?></header>
<?php
}
function print_day_footer() {
?>
</article>
<?php
}
$curday = false;
if ($loop->have_posts()) : while ($loop->have_posts()) : $loop->the_post();
if($curday !== get_field('workshop_date')) {
// start a new day
if($curday) {
print_day_footer();
}
print_day_header();
$curday = get_field('workshop_date');
}
// content
print_workshop();
endwhile;
// close the last one
print_day_footer();
else : ?>
<article id="post-not-found" class="hentry cf">
Text for no workshop found
</article>
<?php endif; ?>
在
找不到研讨会的文本
这将生成以下HTML:
<article>
<header>06/10/2016</header>
<section class="workshop">
Workshop on the 6th at 11:00 </section>
</article>
<article>
<header>13/10/2016</header>
<section class="workshop">
Workshop before the others on the 13th at 08:00 </section>
<section class="workshop">
Workshop 1 at 10:00 </section>
<section class="workshop">
Workshop 2, same day at 12:00 </section>
</article>
<article>
<header>14/10/2016</header>
<section class="workshop">
Workshop 3, next day at 10:00 </section>
</article>
<article>
<header>01/11/2016</header>
<section class="workshop">
A workshop in November at 09:00 </section>
</article>
06/10/2016
六号工作坊11:00
13/10/2016
13日08:00在其他车间之前
10:00第1车间
车间2,当天12:00
14/10/2016
第三车间,第二天10:00
01/11/2016
11月09:00的研讨会
最后一件事-如果您的时间以文本形式存储在数据库中,请以规范化的方式存储(即“13:00”,而不是“1 pm”),否则它将无法正确排序。你可以用ACF来做。ACF已经为date字段处理了这个问题,所以您不必担心这个问题,只需担心时间
希望这有帮助 也许(但我不知道)最好使用datetime。