PHP - создание нового массива через вложенные массивы при создании отношения пост / изображение - PullRequest
0 голосов
/ 02 ноября 2018
  • PHP 7.2
  • Wordpress 4.9.8
  • Расширенные пользовательские поля 5.7.7

Я заинтересован в создании массива, в котором будет храниться каждый элемент:

  • почтовый идентификатор
  • заголовок сообщения
  • массив изображений, принадлежащих посту

Я использую повторитель ACF для каждого сообщения, содержащего много изображений, имя повторителя: carousel.

Нет связи между почтовым объектом WP и полями ACF.

Выпуск:

вложенный foreach помещает все изображения в первый пост.

Ожидаемое:

вложенный foreach заполнит $randomArray только изображениями, которые принадлежат этому идентификатору записи.

<code>$workshop_posts_args = array(
    'post_type' => 'workshops'
);

$randomArray = [
    'post_id' => '',
    'post_title' => '',
    'post_image_url' => []
];
$post_query = new WP_Query($workshop_posts_args);
if ($post_query->have_posts()) {
    while ($post_query->have_posts()) {
        $post_query->the_post();
        $carousel_array = get_field('carousel', get_the_ID());
        echo "<h2>".get_the_title()."</h2>";
        if ($carousel_array) {
            foreach ($carousel_array as $carousel_images) {
                foreach ($carousel_images as $image) {
                    $randomArray['post_id'] = get_the_ID();
                    $randomArray['post_title'] = get_the_title();
                    $randomArray['post_image_url'][] = $image['url'];
                    echo 'image_url:'.$image['url'].'<br>The array: <pre>'.print_r($randomArray, true).'
'; ?> <? PHP } } } } } ?>

ОБЩАЯ ЧАСТЬ

<?php print_r($randomArray) ?>

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Вы переписываете индекс массива снова и снова внутри цикла, и это ваша проблема.

так же: -

$randomArray = []; //before post_query

И изменить if блок, как показано ниже: -

if ($post_query->have_posts()) {
    while ($post_query->have_posts()) {
        $post_query->the_post();
        $id = get_the_ID();
        $randomArray[$id]['post_id'] = $id;
        $randomArray[$id]['post_title'] = get_the_title();
        $carousel_array = get_field('carousel', $id);
        if ($carousel_array) {
            foreach ($carousel_array as $carousel_images) {
                foreach ($carousel_images as $image) {
                    $randomArray[$id]['post_image_url'][] = $image['url'];
                    ?>
                    <?php
                }
            }
        }
    }
}

Примечание: - код отдыха будет таким же

код выше даст вам многомерный массив на основе post-id. если вы хотите, чтобы индексы были в формате 0,1,2,3 ....., то выполните: -

$randomArray = array_values($randomArray);
0 голосов
/ 02 ноября 2018

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

<code><?php
  $workshop_posts_args = array(
  'post_type' => 'workshops'
);

$randomArray = array();
$post_query = new WP_Query($workshop_posts_args);
$index = 0;
if ($post_query->have_posts()) {
    while ($post_query->have_posts()) {
        $post_query->the_post();
        $randomArray[$index]['post_id'] = get_the_ID();
        $randomArray[$index]['post_title'] = get_the_title();
        $carousel_array = get_field('carousel', get_the_ID());
       //echo "<h2>".get_the_title()."</h2>";
       if ($carousel_array) {
        foreach ($carousel_array as $carousel_images) {
            foreach ($carousel_images as $image) {

                $randomArray[$index]['post_image_url'][] = $image['url'];
                //echo 'image_url:'.$image['url'].'<br>The array: <pre>'.print_r($randomArray, true).'
'; ?> <? PHP } } } $ Индекс ++; } } ?>

ОБЩАЯ ЧАСТЬ

<?php print_r($randomArray) ?>
...