Почему вываливается такая ошибка? - WordPress

316
29 октября 2017, 20:21

У меня появились вот такие ошибки:

Warning: Invalid argument supplied for foreach() in C:\OpenServer\domains\TITAN\wp-content\themes\titan\main-page.php on line 185 и т.д.

Дело в том, что почти в самом верху у меня есть секция в которой выводятся последние работы из портфолио. Для сортировки используется изотоп и так как я не особо разбирался в таксономиях. Я эту секцию пропустил. Продолжил делать другие секции. Использовал плагин carbon fields для добавления произвольных полей в кастомные записи.

Далее я вытягиваю данные из нужных мне произвольных полей и выводу всё это ввёрстке:

 <div class="row">
        <?php $tm_list = carbon_get_the_post_meta('tm_select', 'association');
        ?>
        <?php foreach ($tm_list as $item): ?>
            <div class="mb-sm-20 wow fadeInUp col-sm-6 col-md-3" onclick="wow fadeInUp">
                <div class="team-item">
                    <div class="team-image"><img
                                src="<?php echo carbon_get_post_meta($item['id'], 'team_img'); ?>"
                                alt="Member Photo"/>
                        <div class="team-detail">
                            <h5 class="font-alt"><?php echo carbon_get_post_meta($item['id'], 'team_title'); ?></h5>
                            <p class="font-serif"><?php echo carbon_get_post_meta($item['id'], 'team_desc'); ?></p>
                            <div class="team-social">
                            <?php $st =  carbon_get_post_meta($item['id'], 'team_list', 'complex'); ?>
                            <?php foreach ($st as $item2): ?>
                                <a href="<?php echo $item2['team_link']; ?>"><i class="<?php echo $item2['team_icon']; ?>"></i></a>
                            <?php endforeach; ?>
                            </div>
                        </div>
                    </div>
                    <div class="team-descr font-alt">
                        <div class="team-name"><?php echo carbon_get_post_meta($item['id'], 'team_name'); ?></div>
                        <div class="team-role"><?php echo carbon_get_post_meta($item['id'], 'team_pos'); ?></div>
                    </div>
                </div>
            </div>
        <?php endforeach; ?>
    </div>

Затем я разобрался с таксономиями и вернулся к секции где выводится последние 6 работ из портфолио Для вывода этих записей я самостоятельно создал custom_post_type и вывожу их:

<ul class="works-grid works-grid-gut works-grid-3 works-hover-w" id="works-grid">
           <?php
           $args = [
                'post_type' => 'portfolio_post_type',
            ];
           $works = new  WP_Query($args);
            ?>
           <?php if($works->have_posts()):?>
            <?php while ($works->have_posts()):?>
            <?php $works->the_post();?>
            <li class="work-item illustration webdesign">
                <a href="<?php echo get_permalink(); ?>">
                    <div class="work-image"><img src="<?php echo get_the_post_thumbnail(); ?>" alt="Portfolio Item"/></div>
                    <div class="work-caption font-alt">
                        <h3 class="work-title"><?php echo  get_the_title();?></h3>
                       <div class="work-descr"><?php echo get_the_excerpt(); ?></div>
                    </div>
               </a></li>
                <?php endwhile;?>
            <?php endif;?>
       </ul>

Проблема в том что после того как я добавил код для вывода записей последних работ портфолио. У меня появились ошибки:

Warning: Invalid argument supplied for foreach() in C:\OpenServer\domains\TITAN\wp-content\themes\titan\main-page.php on line 185 и т.д.

Он ругается на foreach потому что после добавления кода который выводит последние записи из порфолио

В переменной:

$tm_list = carbon_get_the_post_meta('tm_select', 'association');

Образуется пустота!!! т.е. если выполнить var_dump($tm_list); то выдаст string 0 а если убрать код который выводит последние работы в портфолио в переменной вновь есть данные О_о такого вида:

array(4) {
  [0]=>
  array(3) {
    ["id"]=>
    string(2) "24"
    ["type"]=>
    string(4) "post"
    ["post_type"]=>
    string(14) "team_post_type"
  }

Я не понимаю где я ошибся. Почему после добавления кода который выводит работы из портфолио у меня вываливается эта ошибка.

Answer 1

Цикл должен заканчиваться wp_reset_postdata().

Почитайте статью на эту тему.

WordPress всегда выполняет главный цикл. Внутри этого цикла определены некие глобальные переменные, в том числе $post, содержащие данные текущего поста.

Вызов carbon_the_post_meta использует эти данные.

Когда вы запускаете пользовательский цикл через WP_Query, вы переопределяете глобальные переменные, в том числе, $post посредством вызова $works->the_post().

Использование wp_reset_postdata() восстановит глобальные переменные основного цикла и carbon_the_post_meta будет возвращать правильный результат.

READ ALSO
Структура функции ООП

Структура функции ООП

Какова структура класса в данном коде?

221
Вывод в alert выделенного текста работает не из всех мест

Вывод в alert выделенного текста работает не из всех мест

обычный текст при выделении и нажатии кнопки - выводится, а вот тот, который подгружается в iframe - нет, как это поправить?

246
PHP удаление тегов

PHP удаление тегов

Здравствуйте добрые люди, не судите строго за детский вопрос, я только учусьВ PHP есть функция strip_tags, которая удаляет html теги в строке

239