WordPress循环,每个自定义域仅显示一个帖子

时间:2016-08-08 作者:user48745

我有一个循环,最多50个自定义帖子类型的帖子,称为deals。其中每一个都分配了一个名为“company”的自定义字段,设置为ID,并分配给另一个名为“companys”的自定义帖子类型。这些设置使用Relationship field 来自ACF。

我希望主页上的循环显示所有交易,但是,不要显示同一公司的多个交易。现在,我可以为每家公司制作50个自定义循环,但我确实希望最新的交易显示在页面顶部。

我正在考虑使用自定义post类型的foreach集,但是我不知道如何做到这一点。

这是我当前拥有的循环:

<?php
$num_cats_to_show = 50;
$count = 0;

$posts = new WP_Query(array(\'post_type\' => \'companies\'));
$terms = $posts->get_posts();
if ($terms) {
  foreach( $terms as $term ) {
    $args2=array(
      \'post_type\' => \'deals\',
      \'meta_query\' => array(
                        array(
                            \'key\' => \'company\', // name of custom field
                            \'value\' => \'"\'. ($term->ID) .\'"\', // matches exaclty "123", not just 123. This prevents a match for "1234"
                            \'compare\' => \'LIKE\'
                            )
                    ),
      \'posts_per_page\' => 1,
      );
    $my_query = null;
    $my_query = new WP_Query($args2);
    if( $my_query->have_posts() ) {
      $count ++;
      if ($count <= $num_cats_to_show) {
        while ($my_query->have_posts()) : $my_query->the_post(); ?>
          <?php echo $term->ID ?><p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
         <?php
        endwhile;
      }
    }
  }
}
wp_reset_query();  // Restore global post data stomped by the_post().
?>
从理论上讲,这是可行的,但是这些帖子是按公司排序的,而不是按交易排序的。

1 个回复
最合适的回答,由SO网友:KnightHawk 整理而成

我会在顶部添加一个数组,以便在您遍历所有交易时存储公司的ID。

每次通过循环时,都会检查阵列中的当前公司ID。如果没有,则可以安全地显示该交易。然后将ID添加到数组中,以便下次该公司出现时,您可以跳过该公司的任何其他交易。

下面是您的新代码的外观。(我认为,用适当的变量替换“当前公司ID”,以便通过ID跟踪您的公司。)$term->ID, 但我承认,我只读了你的代码,对它的主要功能有了一个大致的了解。)

<?php
$num_cats_to_show = 50;
$count = 0;
/*----NEW STUFF----*/
$company_id_array = array();//NEW VARIABLE

$posts = new WP_Query(array(\'post_type\' => \'companies\'));
$terms = $posts->get_posts();
if ($terms) {
  foreach( $terms as $term ) {
    $args2=array(
      \'post_type\' => \'deals\',
      \'meta_query\' => array(
                        array(
                            \'key\' => \'company\', // name of custom field
                            \'value\' => \'"\'. ($term->ID) .\'"\', // matches exaclty "123", not just 123. This prevents a match for "1234"
                            \'compare\' => \'LIKE\'
                            )
                    ),
      \'posts_per_page\' => 1,
      );
    $my_query = null;
    $my_query = new WP_Query($args2);
    if( $my_query->have_posts() ) {
      $count ++;
      /*----NEW STUFF----*/
      if ($count <= $num_cats_to_show && !(in_array("the current company ID", $company_id_array))) {
        while ($my_query->have_posts()) : $my_query->the_post(); ?>
          /*----NEW STUFF----*/
          $company_id_array[] = "the current company ID";//ADD THE ID TO THE ARRAY (YOU HAVE ALREADY CHECKED THAT IT WASN\'T THERE YET)
          <?php echo $term->ID ?><p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
         <?php
        endwhile;
      }
    }
  }
}
wp_reset_query();  // Restore global post data stomped by the_post().
?>

相关推荐

当in_the_loop()为假时,何时以及为什么is_Single(‘my_cpt’)为真?

我正在使用模板系统的示例代码。此地址的页码:http://project.test/my_cpt/hello-post/.无法理解原因is_singular( \'my_cpt\' ) 是true 虽然in_the_loop() 是false.在页面模板中The Loop "E;“工程”:if ( have_posts() ) { while ( have_posts() ) { the_post(); ?>