如何将wp_query的输出分成单独的部分

时间:2017-04-07 13:57:00

标签: php wordpress

我有一个正在检查自定义帖子类型元字段的WP查询。

我有两种自定义帖子类型:

  1. 国家
  2. 媒体
  3. 只需创建国家/地区自定义帖子类型,即可将媒体帖子类型的内容拉入。

    媒体CPT包含2个元场:

    1. 第一个元素是媒体过滤器选择,允许选择" TV"," Radio"," Digital"并且具有此ID _rtl_media_filter
    2. 第二个包含要将帖子类型关联到的国家/地区,并且具有此ID _rtl_country_filter,这会将国家/地区CPT名称拉入下拉列表,并且可以从媒体帖子类型中进行选择。
    3. 目的是在查看国家/地区CPT时显示与国家/地区CPT相关的所有媒体类型。

      我有这个循环,这是有效的。但我想知道我是否可以按媒体类型_rtl_media_filter对单个循环项目进行分组?而不是为每个创建多个循环?

      <?php
          // Grab this posts ID
          $post = $wp_query->post;
          $this_id = $post->ID;
      
          // Query the meta vaules against the posts ID
                $args = array(
                  'post_type'     => 'media',
                  'meta_query'    =>  array(
                          'relation' => 'OR',
                              array( // TV
                                      'relation' => 'AND',
                                      array(
                                              'key' => '_rtl_media_filter',
                                              'value' => 'tv',
                                              'compare' => '=',
                                      ),
                                      array(
                                              'key' => '_rtl_country_filter',
                                              'value' => $this_id,
                                              'compare' => '=',
                                      ),
                              ),
                              array( // DIGITAL
                                      'relation' => 'AND',
                                      array(
                                              'key' => '_rtl_media_filter',
                                              'value' => 'digital',
                                              'compare' => '=',
                                      ),
                                      array(
                                              'key' => '_rtl_country_filter',
                                              'value' => $this_id,
                                              'compare' => '=',
                                      ),
                              ),
                              array( // RADIO
                                      'relation' => 'AND',
                                      array(
                                              'key' => '_rtl_media_filter',
                                              'value' => 'radio',
                                              'compare' => '=',
                                      ),
                                      array(
                                              'key' => '_rtl_country_filter',
                                              'value' => $this_id,
                                              'compare' => '=',
                                      ),
                              ),
                      ),
                 'posts_per_page' => -1,
              );
      
              $the_query = new WP_Query( $args );
      
              if($the_query -> have_posts()) :
                  while ($the_query -> have_posts()) : $the_query -> the_post();
      
                  echo '<h2>' . the_title() . '</h2>';
      
                  endwhile;
                  wp_reset_postdata();
              endif;
      
      ?>
      

      这就是我想要输出的方式:

      | TV |

      ITV | ITV2 | ITV3

      | RADIO |

      Radio 1 |第二广播电台

      | DIGITAL |

      HUB 1 | HUB 2

1 个答案:

答案 0 :(得分:0)

因此,在Antonis指出按meta_value排序之后,我想出了它可以做到的方式。对于其他任何尝试过此问题的人来说,解决方案就在于这几行:

       'orderby' => 'meta_value',
       'meta_key' => '_rtl_media_filter',

将这些添加到循环查询的底部。