Получить список значений, затем все заголовки сообщений с этим значением

У меня есть рабочий цикл 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 где-нибудь с массивом? Или, может быть, я подхожу к этому не с той стороны.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

$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>';
}

Удивительно! Именно то, что я искал. Если я хочу, чтобы эти заголовки были ссылками, например <a href = "'.get_attachment_link($id).'">'.$post.'</a>, мне понадобится другой массив, верно?

BlueHelmet 31.05.2019 06:31

Вы можете просто использовать ассоциативный массив, например, как я обновил свой ответ.

Josh 31.05.2019 06:37

Спасибо, по какой-то причине <a> появляется дважды вместо того, чтобы обтекать заголовок. Выглядит это так: <div><a href = "correct-url"></a><a href = "">Title of Post</a><div>

BlueHelmet 01.06.2019 07:06

Не знаю, зачем это делать. Мне нужно увидеть ваш новый код, но это, вероятно, новый вопрос.

Josh 01.06.2019 07:08

Хорошо, спасибо, я создам новый пост. Ценю твою помощь!

BlueHelmet 01.06.2019 07:31

Новый пост с ответом здесь: stackoverflow.com/questions/56404224/…

BlueHelmet 01.06.2019 09:02

Другие вопросы по теме