自定义搜索结果-根据帖子类型对结果进行不同的排序

时间:2017-03-22 作者:designbypete

在发布这篇文章之前,我已经做了一个公平的调查,我没有得到多少运气。下面是场景。我有一个搜索查询,它检索普通帖子和两个额外的自定义帖子类型(需要的分销商和事件),并使用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的讨论,但我做了一些尝试,结果只得到了头痛和一个白色屏幕。。抱歉,如果我的知识不足是这里的一个障碍,我是一个相对的新手!干杯皮特

1 个回复
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;

相关推荐

Media searching ignored

我们的网站使用WordPress,有很多媒体文件。我们网站的媒体名称格式如下[Car brand\'s name]-[number].jpg, 例如Tesla-1.jpg 或Aston Martin-3.jpg. 因此,我们可以通过搜索文章的名称轻松找到文章的特定媒体。但突然间,我们找不到媒体。我们正在尝试搜索名称为的媒体,但搜索结果不变。(不搜索任何内容时的媒体屏幕)(搜索Aston Martin时的媒体屏幕)当然,在填充搜索文本框后,它会显示一个加载图标,但结果总是一样的。为什么会发生这种情况?更新+