Предупреждение: указан неверный аргумент для foreach() php wordpress

У меня есть этот PHP-код, который выдает предупреждение:

Warning: Invalid argument supplied for foreach() php wordpress

Вот код:

<?php   
    $post_status1  = 'publish'; 
    $post_type1 = 'page';
    $featucat = "about";
    $featucount = "1";

    $my_query = new WP_Query('post_status='. $post_status1 .'&post_type='. $post_type1.'');  
    if ($my_query->have_posts()){
        while ($my_query->have_posts()) : $my_query->the_post();

            $front_values = get_post_custom_values('Homepage_Blog_01p', get_the_ID());
            foreach ( $front_values as $front_key => $result_value ) {
                if($result_value == 'about') {
?>

                    <div class="thewidgets">
                        <?php
                        $description_values = get_post_custom_values('Description_Field', get_the_ID());
                        foreach ( $description_values as $description_key => $description_value ) {
                            echo $description_value;

                        }
                        ?>
                        <a href="<?php the_permalink(); ?>" title="Read the whole post" class="rm">Read More</a>
                    </div>
    <?php } } endwhile; } ?>

Вот полная ошибка:

Warning: Invalid argument supplied for foreach() in 
D:\PROGRAM FILES\wamp\www\westchester\wp-content\themes\
computerrepair\footer.php on line 22"

Что я делаю не так?


person Jacky lou    schedule 18.08.2013    source источник


Ответы (3)


$front_values не является массивом, если вы это понимаете. Проверьте его содержимое и, если иногда это действительно не массив (например, если get_post_custom_values возвращает null, когда нет никаких результатов), учтите это, заключив foreach в условное выражение if(is_array($front_values)) {.

person ceejayoz    schedule 18.08.2013
comment
спасибо за ответ, основываясь на том, что вы сказали, я добавил if(is_array($front_values)) {, который обертывает foreach ( $front_values as $front_key => $result_value ) { if($result_value == 'homepage1') {, и ошибка исчезла, но содержимое не отображается :( - person Jacky lou; 19.08.2013
comment
Если ничего не отображается, get_post_custom_values('Homepage_Blog_01p', get_the_ID()) ничего не возвращает. Проверьте его вывод с помощью print_r($front_values). - person ceejayoz; 19.08.2013
comment
да, я пробовал print_r($front_values), и ничего не было выведено, поэтому я могу сделать вывод, что на самом деле он ничего не возвращает, так что я должен сделать, чтобы это отображалось? Есть идеи? - person Jacky lou; 19.08.2013
comment
спасибо! я уже разобрался, спасибо за наводку :) - person Jacky lou; 19.08.2013

Как воспроизвести это предупреждение PHP:

Поместите это в a.php:

<?php
$skipper = "abcd";
foreach ($skipper as $item){       //warning happens on this line.
    print "ok";
}

?>

Отпечатки:

eric@dev ~ $ php a.php
PHP Warning:  Invalid argument supplied for foreach() in 
/var/www/sandbox/eric/code/php/run06/a.php on line 3
PHP Stack trace:

Предупреждение означает именно то, что оно говорит. Вы передали параметр в структуру foreach, который не может быть оценен в foreach. Перед циклом foreach убедитесь, что первый параметр является структурой, которую может обработать foreach.

person Eric Leschinski    schedule 11.08.2014

<?php wp_head(); ?>

Добавьте этот код в тег head. Я думаю, это решит ваше предупреждение. Предупреждение: для foreach() указан неверный аргумент в C:\wamp64\www\development\wp-includes\script-loader.php в строке 2652.

person Jai Prakash    schedule 26.07.2021