2017-02-23 5 views
-1

Это архив CPT с условиями таксономии, я не могу получить сообщение «Нет сообщений»? цикл работает, он отображает каждое имя термина в качестве заголовка и показывает записи под каждым термином в списке. Я пробовал много кода, чтобы получить сообщение «Нет сообщений» ... ничего не работает?Else сообщений в столбце foreach пока нет

<?php 


//fetch the terms for the policy taxonomy 
    $terms = get_terms('policy-groups', array(
    'hide_empty' => 'true', 
)); 

// run a query for each policy-group term 
foreach($terms as $term) : 
    $args = array(
    'post_type' => 'policies', 
    'policy-groups' => $term->slug , 
    'order'  => 'DSC', 
    'posts_per_page' => -1, 
); 

    $query = new WP_Query($args); 
    if($query->have_posts()) : ?> 

     <ul> 

     <?php 
     // output the policy-group name in a heading tag    
     echo'<h4 class="policy-archive-heading">' . $term->name . '</h4>'; 

     // Start while the Loop 
      while ($query->have_posts()) : $query->the_post(); 
      $attachment_id = get_field("policy_upload"); 
      $url = wp_get_attachment_url($attachment_id); 
      ?> 

      <li> 
       <a href="<?php echo $url; ?>" target="_blank"><?php the_title(); ?></a> 
      </li> 


<?php endwhile; //endwhile ?> 

<?php else: printf(__('<strong>Sorry , No posts were found</strong>')); ?> 

<?php endif; //end if posts ?> 

</ul> 

<?php endforeach ?> 


// use reset postdata to restore orginal query 
wp_reset_postdata(); 
+0

Я не думаю, что это может сработать, потому что «ЕСЛИ» нет сообщений, которые он никогда не доберется до «Остального»? – andytc

ответ

0

Вы не отображая terms, которые не имеют posts. Для отображения условий, не имеющих сообщений, измените 'hide_empty' => 'false' в своем коде.

Вы можете найти обновленный код $ терминов запроса:

$terms = get_terms('policy-groups', array(
    'hide_empty' => false, 
)); 

А также исправить $ ARGS запрос, пожалуйста, найти код ниже:

$args = array(
     'post_type' => 'policies', 
     'post_status' => 'publish', 
     'tax-query' => array(
       array( 
       'taxonomy' => 'policy-groups', 
       'field' => 'slug', 
       'term' => $term->slug, 
      ) 
     ), 
     'orderby'  => 'title', 
     'order'  => 'ASC', 
     'posts_per_page' => -1, 
    ); 

А также разместить отверстие '<ul>' тег перед тем if($query->have_posts()) или поместите закрытие '</ul>' сразу после 'endwhile;', так как они не синхронизированы должным образом.

Ведь коррекции, вот ваш полный код, скопируйте & заменить код:

<?php 
//fetch the terms for the policy taxonomy 
    $terms = get_terms('policy-groups', array(
    'hide_empty' => false, 
)); 

// run a query for each policy-group term 
foreach($terms as $term) : 
    $args = array(
     'post_type' => 'policies', 
     'post_status' => 'publish', 
     'tax-query' => array(
       array( 
       'taxonomy' => 'policy-groups', 
       'field' => 'slug', 
       'term' => $term->slug, 
      ) 
     ), 
     'orderby'  => 'title', 
     'order'  => 'ASC', 
     'posts_per_page' => -1, 
    ); 

    $query = new WP_Query($args); ?> 
    <ul> 
     <?php if($query->have_posts()) : 
      // output the policy-group name in a heading tag    
      echo'<h4 class="policy-archive-heading">' . $term->name . '</h4>'; 

      // Start while the Loop 
      while ($query->have_posts()) : $query->the_post(); 
       $attachment_id = get_field("policy_upload"); 
       $url = wp_get_attachment_url($attachment_id); ?> 
       <li> 
        <a href="<?php echo $url; ?>" target="_blank"><?php the_title(); ?></a> 
       </li> 


      <?php endwhile; //endwhile ?> 

     <?php else: printf(__('<strong>Sorry , No posts were found</strong>')); ?> 

     <?php endif; //end if posts ?> 

    </ul> 

<?php endforeach ; 
// use reset postdata to restore orginal query 
wp_reset_postdata(); ?> 

Пожалуйста, измените 'order' => 'ASC/DESC' согласно вашему требованию в приведенных выше запросов.

Надеюсь, это может быть полезно для вас.

+0

Спасибо за попытку, но это не сработает. Если я использую отредактированный код, фактические заголовки терминов отображаются правильно, но сообщения в списке под ними отображаются все сообщения, независимо от того, какой срок они назначены. под каждым термином заголовок должны быть только те термины, которые назначены этой группе политик. Мой оригинальный код работает для достижения этого, но не показывает «нет сообщений». Кроме того, ваш код также не показывает «нет сообщений». – andytc

+0

Извините, брат, моя ошибка, удалите одну инвертированную запятую ('') из «false», просто напишите ее как «hide_empty» => false. Попробуйте один раз. Я уже обновил код. –

+0

Спасибо за попытку, но тот же результат для этого. – andytc

0

Я хотел бы изменить пару вещей:

  • Поиск срочными ид
  • только публиковать посты
  • Move сброса POSTDATA в нужное место
  • Опечатка в порядке DESC

Код ниже:

<?php 


    //fetch the terms for the policy taxonomy 
     $terms = get_terms('policy-groups', array(
     'hide_empty' => 'true', 
    )); 

    // run a query for each policy-group term 
    foreach($terms as $term) : 
     $args = array(
     'post_type' => 'policies', 
     'post_status' => 'publish', 
     'tax-query' => array(
       array( 
       'taxonomy' => 'policy-groups', 
       'term' => $term->term_id 
      ) 

     ), 
     'order'  => 'DSC', 
     'posts_per_page' => -1, 
    ); 

     $query = new WP_Query($args); 
     if($query->have_posts()) : ?> 

      <ul> 

      <?php 
      // output the policy-group name in a heading tag    
      echo'<h4 class="policy-archive-heading">' . $term->name . '</h4>'; 

      // Start while the Loop 
       while ($query->have_posts()) : $query->the_post(); 
       $attachment_id = get_field("policy_upload"); 
       $url = wp_get_attachment_url($attachment_id); 
       ?> 

       <li> 
        <a href="<?php echo $url; ?>" target="_blank"><?php the_title(); ?></a> 
       </li> 


    <?php endwhile; //endwhile ?> 

    <?php else: printf(__('<strong>Sorry , No posts were found</strong>')); ?> 

    <?php endif; //end if posts ?> 

    </ul> 

    <?php 
     // use reset postdata to restore orginal query 
     wp_reset_postdata(); 
     endforeach; ?> 
+0

Спасибо за попытку, но это тоже не работает, тот же результат, что и в моем комментарии к Prateek Verma – andytc

Смежные вопросы