godsplan
@godsplan

Как заменить этот цикл?

Пытаюсь вывести метки как заголовки и посты с этими метками под ними.
Написал такой говнокод
$args = array( 
        'posts_per_page' => 1000, 
        'orderby' => 'ABS',
        'post_type'   => 'master',
      );
      $lastposts = get_posts( $args );
      foreach( $lastposts as $post ) {
        $posttags = get_the_tags();
        if( $posttags ){
          foreach( $posttags as $tag ){
          echo $tag->name . ' ';
          }
        }
      } 
      wp_reset_postdata()

Но цикл перебирает метки не на их количество, а на количество постов (оно и понятно)
Как мне записать это чтобы цикл перебирался столько раз сколько меток, а не сколько постов?
Вне цикла echo $tag->name не работает.
Notice: Trying to get property of non-object in
  • Вопрос задан
  • 108 просмотров
Пригласить эксперта
Ответы на вопрос 1
dimovich85
@dimovich85
https://u-academy.net/
Если правильно понял, то сначала получаете только метки, для этого есть get_terms
Потом по результатам проходитесь циклом, получаете посты этой метки, для этого get_posts. Просто в параметры запроса передаете, что Вас интересуют посты с такой-то меткой.
Дальше выводите сами метки и еще один цикл по постам этой метки внутри цикла по меткам.
Схематически вот так:
$tags = get_terms(); // параметры смотрите в доке
foreach( $tags as $tag ):
    $posts = get_posts([ // передаете $tag сюда согласно доке ])
?>
   <h2> <?= $tag->name; ?> </h2>
<?php
    foreach( $posts as $post ):
         setup_postdata( $post );
?>
     <article>
          <h3> <?= the_title(); > </h3>
          ......
      </article>
<?php
        endforeach;
     wp_reset_postdata;
   endforeach;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы