Устранение неполадок «Предупреждение: недопустимый аргумент, предоставленный для foreach()» при просмотре ленты WordPress JSON

#php #arrays #wordpress #foreach

#php #массивы #wordpress #foreach

Вопрос:

Мне нужно получить теги для записей WordPress в скрипте ленты JSON. Приведенный ниже код был в оригинальном скрипте, но он прерывается, если в сообщениях не более двух тегов, и выдает предупреждение Warning: Invalid argument supplied for foreach() .

 $tags = array();
foreach((get_the_tags()) as $tag) {
    $tags[] = $tag->name; 
}
$single["tags"] = $tags;
  

Вот некоторый код, который я обновил, чтобы заставить его работать, если тегов меньше двух, но это приведет к добавлению всех тегов к следующему сообщению в each. Итак, если в первом сообщении есть «tag1» и «tag2», а во втором — «tag3» и «tag4», третье сообщение в ленте JSON будет содержать такие теги, как «tag1», «tag2», «tag3», «tag4» и «tag5» (даже если в нем должно быть просто «tag5».

 $my_tags = get_the_tags();
if ($my_tags){
    foreach($my_tags as $tag) {
        $tags[] = $tag->name; 
    }
}
  

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

1. Просто сбрасывайте свой $tags массив с помощью $tags = array() перед началом каждой новой записи.

2. Возможно, ваш фрагмент кода находится внутри другого цикла, который повторяет все ваши одиночные файлы. Вы очищаете массив тегов перед тем, как начать чтение тегов для следующего сингла?

Ответ №1:

существует функция для проверки, является ли это массивом, она называется is_array() , подробнее -> http://php.net/manual/en/function.is-array.php

 if (is_array($my_tags)){
  

также очищайте этот массив каждый раз, когда вы просматриваете post, просто добавляя код из вашего первого примера:

 $my_tags = array();
$my_tags = get_the_tags();
if (is_array($my_tags)){