Как получить объект WP_Post из многомерного массива

#php #arrays #wordpress #multidimensional-array

#php #массивы #wordpress #многомерный массив

Вопрос:

Мне трудно извлечь post_title объекта WP_Post из массива, который находится внутри массива массива.

Я создал типы записей и настраиваемые поля, чтобы у меня были «блюда», в которых сами «ингредиенты».

В соответствии с этим примером конечный результат должен быть:

Сосиски и пюре

Сосиски

Картофель

Это мой код:

 <?php

// Create our arguments for getting our post
$args = array(
  'post_type'=> 'meals',
  'orderby' => 'title',
  'order' => 'ASC',
  'posts_per_page' => -1,
  'nopaging' => true,
);

$query = new WP_Query( $args) ;

if ( $query->have_posts() ) { ?>
        <ul>
          <?php 
    while ( $query->have_posts() ) {
        $query->the_post(); ?>
          
          <li><?php the_title(); ?></li>
          <ul>
          <li>
          
          <?php 
    
          $ingredients = get_field('ingredients', $post);
          echo "<pre>";
          print_r ($ingredients); //output array
          echo "</pre>";
          
          echo "<ul>";
          foreach ( $ingredients['post_title'] as $value => $ingredient ): 
             echo "<li>" . $ingredient . "</li>";
          endforeach;
          echo "</ul>";
          
          ?>

          </li>
          </ul>
          
          <?php } ?>
        </ul>
        <?php }
wp_reset_postdata();
?>

  

Используя print_r выше, мы можем видеть, что содержимое массива содержит необходимые ингредиенты:

 Array
(
    [0] => Array
        (
            [ingredient] => Array
                (
                    [0] => WP_Post Object
                        (
                            [ID] => 491
                            [post_author] => 1
                            [post_date] => 2020-10-28 17:46:10
                            [post_date_gmt] => 2020-10-28 17:46:10
                            [post_content] => 
                            [post_title] => Sausages
                            [post_excerpt] => 
                            [post_status] => publish
                            [comment_status] => open
                            [ping_status] => open
                            [post_password] => 
                            [post_name] => sausages
                            [to_ping] => 
                            [pinged] => 
                            [post_modified] => 2020-10-28 17:46:10
                            [post_modified_gmt] => 2020-10-28 17:46:10
                            [post_content_filtered] => 
                            [post_parent] => 0
                            [guid] => https://www.website.com/home/ingredients/sausages/
                            [menu_order] => 0
                            [post_type] => ingredients
                            [post_mime_type] => 
                            [comment_count] => 0
                            [filter] => raw
                        )

                )

            [quantity] => 1
        )

    [1] => Array
        (
            [ingredient] => Array
                (
                    [0] => WP_Post Object
                        (
                            [ID] => 448
                            [post_author] => 1
                            [post_date] => 2020-10-28 09:23:52
                            [post_date_gmt] => 2020-10-28 09:23:52
                            [post_content] => 
                            [post_title] => Potatoes
                            [post_excerpt] => 
                            [post_status] => publish
                            [comment_status] => closed
                            [ping_status] => closed
                            [post_password] => 
                            [post_name] => potatoes
                            [to_ping] => 
                            [pinged] => 
                            [post_modified] => 2020-10-28 10:57:21
                            [post_modified_gmt] => 2020-10-28 10:57:21
                            [post_content_filtered] => 
                            [post_parent] => 0
                            [guid] => https://www.website.com/home/?post_type=ingredientsamp;p=448
                            [menu_order] => 0
                            [post_type] => ingredients
                            [post_mime_type] => 
                            [comment_count] => 0
                            [filter] => raw
                        )

                )

            [quantity] => 1
        )

)
  

Итак, если информация есть, почему мой foreach $ingredients в качестве $ingredient не отображает код?

Я действительно ценю вашу помощь, поскольку я потратил на это весь день, ссылаясь на множество статей о StackOverflow, на сайте WordPress, а также на многие блоги независимых разработчиков. Я знаю, что мне чего-то не хватает, и это связано с тем, что это объект post внутри массива или массива, и, несмотря на то, что я играю с вариациями кода, я все еще не могу его взломать.

Вы можете помочь?

Спасибо

Комментарии:

1. Вероятно, хотите get_field('ingredients', $post->ID) , если только «ингредиенты» не являются объектом post в поле ACF? Через что вы проходите в своем цикле foreach? Эта часть также немного сбивает с толку.

2. @HowardE — Спасибо, ваш комментарий помог мне найти ответ.

Ответ №1:

Благодаря комментарию Говарда я более внимательно изучил эту конкретную процедуру и разработал ее. Я недостаточно глубоко вникал в массив объекта post, и исправить это так же просто, как добавить [0] к echo:

 echo "<li>" . $ingredient['ingredient'][0]->post_title . "</li>";
  

И все — это работает.

Спасибо.