#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>";
И все — это работает.
Спасибо.