在发布这篇文章之前,我已经做了一个公平的调查,我没有得到多少运气。下面是场景。我有一个搜索查询,它检索普通帖子和两个额外的自定义帖子类型(需要的分销商和事件),并使用foreach循环将结果显示为各自的div,因此:
if( have_posts() ){
$types = array(\'post\', \'tribe_events\', \'distribute\');
$counter = 1;
foreach( $types as $type ){
echo \'<div class="results \';
echo $type. \'">\';
if($type == \'post\'){
echo \'<h4><i class="fa fa-newspaper-o"></i> Articles</h4>\';
}
if($type == \'distribute\'){
echo \'<h4><i class="fa fa-truck"></i> Distributors Wanted</h4>\';
}
if($type == \'tribe_events\'){
echo \'<h4 class="events">Events</h4>\';
}
echo \'<ul class="looplist">\';
while( have_posts() ){
the_post();
if( $type == get_post_type() ){
get_template_part(\'parts/search\', $type);
}
$counter++ ;
}
rewind_posts();
echo \'</ul></div>\';
}
这一切都正常,检索选定的部分,但有两个问题我不知道如何解决。1: 因为它是按发布日期升序(默认)对结果进行排序,所以对于事件(由
\'the events calendar\' by Modern Tribe)- 因为它们是在列表出现时的任意日期发布的,但它们的开始日期有一个特定的元值,如果可能的话,我想按这个值排序。我在普通WP\\U查询中使用了此查询,如下所示:
\'meta_key\'=>\'_EventStartDate\',
\'orderby\'=>\'_EventStartDate\',
\'order\'=>\'ASC\',
2:由于代码使用的是foreach循环,我不知道如何隐藏空结果,这意味着即使没有为讨论中的post类型返回结果,它仍然会呈现heading和container div。
有人能提出解决方案吗?我曾有过一次关于有条件地向每种帖子类型传递$args的讨论,但我做了一些尝试,结果只得到了头痛和一个白色屏幕。。抱歉,如果我的知识不足是这里的一个障碍,我是一个相对的新手!干杯皮特
SO网友:Sam
下面应该循环您的帖子类型,如果有针对该帖子类型的帖子,则只插入一次标题。我相信有很多更好的方法来编写这个清理器,但这应该可以工作。我没有测试过只在这个页面中编写的代码。
我不确定自定义帖子类型属性的顺序,因为我不知道插件和您的查询看起来是正确的,如果没有\\uuI可能值得尝试,因为我在高级自定义字段中已经这样做了,并且不需要\\uI。
值得检查您的数据库,因为我知道高级自定义字段会保存像03212017这样的日期,Wordpress可能无法将其视为有效日期。
if (have_posts()) :
$counter = 1;
$post_counter_1 = 0;
$post_counter_2 = 0;
$post_counter_3 = 0;
while ( have_posts() ) : the_post();
// Get post type to display
if(get_post_type() == \'post\'){
// run once for creating header
if($post_counter_1 == 0)
{
$post_counter_1 = 1;
echo \'<h4><i class="fa fa-newspaper-o"></i> Articles</h4>\';
}
echo \'<div class="results post">\';
get_template_part(\'parts/search\', \'post\');
}
endwhile;
while ( have_posts() ) : the_post();
if(get_post_type() == \'tribe_events\'){
if($post_counter_2 == 0)
{
$post_counter_2 = 1;
echo \'<h4><i class="fa fa-truck"></i> Distributors Wanted</h4>\';
}
echo \'<div class="results tribe_events">\';
get_template_part(\'parts/search\', \'tribe_events\');
}
endwhile;
while ( have_posts() ) : the_post();
if(get_post_type() == \'distribute\'){
if($post_counter_3 == 0)
{
$post_counter_3 = 1;
echo \'<h4 class="events">Events</h4>\';
}
echo \'<div class="results distribute">\';
get_template_part(\'parts/search\', \'distribute\');
}
endwhile;
endif;