Получить список значений, затем все заголовки сообщений с этим значением - PullRequest
1 голос
/ 31 мая 2019

У меня есть рабочий цикл WordPress, который отображает все сообщения с определенным значением meta_query. Единственная проблема заключается в том, что значения повторяются. Например, если у меня есть два сообщения со значением «Синий», тогда оба сообщения появляются в цикле, в результате чего «Синий» появляется дважды.

Мне бы хотелось, чтобы "Синий" появился один раз, а под ним - список всех заголовков сообщений с этим значением.

Вот мой текущий запрос:

<?php 
$the_query = new WP_Query(array(
    'post_type'     => 'post',
    'post_status'   => 'publish',
    'meta_key'      => 'colors',
));

while ( $the_query->have_posts() ) : $the_query->the_post(); 

$colors = get_field('colors');

if( $colors ): foreach( $colors as $color ):  
    endforeach;
    endif; 
    echo' <div><h2>'.$color.'</h2><div>'.get_the_title( $post_id ).'</div></div>';

    endwhile; wp_reset_postdata();?>

Я попытался использовать массив для заголовков, но он только что возвратил "Массив"

$titles = get_the_title();
$title_names = array();
foreach ($titles as $title){
$title_names[] = get_the_title($id);}

эхо $title_names

Я думаю, мне нужен другой оператор if где-нибудь с массивом? Или, может быть, я подхожу к этому с неправильного направления.

1 Ответ

1 голос
/ 31 мая 2019

Вы хотели бы попробовать что-то вроде этого:

$results = [];
while ( $the_query->have_posts() ) {

    $the_query->the_post(); 
    $colors = get_field('colors');
    if( !empty($colors) ) {

        foreach( $colors as $color ) {  
            $results [$color][]['title'] = get_the_title();
            $results [$color][]['link'] = get_attachment_link();
        }

    }

}

foreach ($results as $color => $posts) {

    echo "<div><h2>{$color}<h2>";

    foreach($posts as $post) {
        echo "<div><a href=\"{$post['link']}">{$post['title']}</a></div>";
    }

    echo '</div>';
}
...