Array создает дубликаты тегов (WordPress) - PullRequest
1 голос
/ 01 июня 2019

У меня есть ассоциативный массив, который выводит список значений.Под каждым значением должны быть ссылки на посты WordPress с этим значением.

Эти ссылки должны выводиться как: <a href="url">Title</a>

По какой-то причине они выводятся как: <a href="">Title</a><a href="url"></a>

Похоже, тег <a> создается дляи заголовок, и URL.

Вот код:

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

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

    $the_query->the_post(); 
    $credits = 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 '<a href="'.$post['link'].'">'.$post['title'].'</a>';
    }
    echo '</div>';
}

wp_reset_postdata();?>

Пара тестов:

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

выводит <div><a href="">Title</a></div>, но для каждого заголовка есть два пробела без заголовка:

<div><a href="">Title1</a></div>
<div><a href=""></a></div>
<div><a href=""></a></div>
<div><a href="">Title2</a></div>
<div><a href=""></a></div>
<div><a href=""></a></div>

Аналогично, foreach($posts as $post) { echo '<div>'.$post['link'].''.$post['title'].'</div>';} создает пустые контейнеры:

<div>Title1</div>
<div>URL1</div>
<div></div>
<div>Title2</div>
<div>URL2</div>
<div></div>

1 Ответ

2 голосов
/ 01 июня 2019

Вот проблема:

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

Вы используете [] для одного и того же массива 2 раза. И это отделяет пару цветовых связей друг от друга. Они сохраняются в другой массив. Вместо этого используйте определенные индексы

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

или вы можете просто сделать это одной строкой

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