这里更多的是一个概念问题,而不是一个严格的代码问题:
为一位想要列出即将举行和过去的音乐会的音乐家创建一个网站。这些是使用自定义字段作为显示日期(格式为yyyymmdd)的自定义帖子类型。对于查询和排序,显示日期是关键的数据位,而不是帖子的发布日期,后者有点不相关。
以下页面显示了今年的未来和过去演出:http://dev.bobpassaro.com/david/concerts/
生成此查询的查询(实际上是两个查询和循环):
<?php
//Query $args for upcoming concerts, ordered soonest to furthest in future
$upcoming_args = array(
\'post_type\' => \'concert\',
\'meta_key\' => \'date\',
\'orderby\' => \'meta_value_num\',
\'order\' => \'ASC\',
\'posts_per_page\' => -1,
\'meta_query\' => array(
array(
\'key\' => \'date\',
\'value\' => date(\'Ymd\'),
\'compare\' => \'>=\',
),
)
);
//Query $args for past concerts, ordered most recent to oldest
$past_args = array(
\'post_type\' => \'concert\',
\'meta_key\' => \'date\',
\'orderby\' => \'meta_value_num\',
\'order\' => \'DESC\',
\'posts_per_page\' => -1,
\'meta_query\' => array(
array(
\'key\' => \'date\',
\'value\' => array(date(\'Y\') . \'0101\',date(\'Ymd\')),
\'compare\' => \'BETWEEN\',
),
)
);
?>
你还会看到(在那一页的底部)我有点“分页”旧音乐会,按年份分组。(使用自定义帖子类型进行常规WP分页很痛苦,但无论如何,这不是我想要的。我不想要音乐会数量相等的页面,我想要音乐会按年份分组的页面。)因此,我所做的是使用类似的查询创建另一个模板:
<?php
//Query $args for past concerts, grouped by year
$concert_year = substr($post->post_name,0,4);
$year_args = array(
\'post_type\' => \'concert\',
\'meta_key\' => \'date\',
\'orderby\' => \'meta_value_num\',
\'order\' => \'DESC\',
\'posts_per_page\' => -1,
\'meta_query\' => array(
array(
\'key\' => \'date\',
\'value\' => array($concert_year . \'0101\', $concert_year . \'1231\'),
\'compare\' => \'BETWEEN\',
),
)
);
?>
这在我为每年设置的页面分配的自定义模板中使用。(这些页面的内容实际上是空的,但页面slug用于设置上面的$concert\\u year变量,然后允许查询提取正确的音乐会集。)然后,我在这些页面的底部使用一个常规的可湿性粉剂菜单,其中包括所有这些页面,并允许人们回顾前几年的演出。
这一切都是我想要的,但这是一个相当笨拙的解决方案。我的意思是,到2015年时,我必须为2014年翻开新的一页,否则2014年的演唱会将不会在任何地方出现。我希望这是动态发生的。我还有所有这些基本上是空白/空白的页面(过去每年一个),它们唯一的功能是调用模板并在WP菜单中使用(也就是说,它们唯一的功能是允许用户选择与每年关联的url,并设置$concert\\u year以便在查询中使用。)
如何更好地解决这个问题?