Wordpress foreach недопустимый аргумент

Надеюсь, что кто-то может помочь мне с этим кодом. Этот код выводит налог как класс для моего изотопного фильтра / предметов. Он отлично работает на localhost, но после загрузки все еще работает, но вызывает следующую ошибку:

* Предупреждение: недопустимый аргумент для foreach () в /path-to-file.php в строке # *

<?php while ( $the_query->have_posts() ) : $the_query->the_post(); 
  $termsArray = get_the_terms( $post->ID, "print_type" );  //Get terms for item
  $termsString = ""; //initialize string that will contain the terms
    foreach ( $termsArray as $term ) { // for each term 
    $termsString .= $term->slug.' '; //create a string that has all the slugs 
    }
?> 
   <div class="<?php echo $termsString; ?>"> 
   </div> 
<?php endwhile; ?>

person Renegade    schedule 25.08.2016    source источник
comment
используйте get_the_ID () вместо $ post- ›ID   -  person Mouner Mostafa    schedule 26.08.2016


Ответы (2)


* Предупреждение: недопустимый аргумент для foreach () в /path-to-file.php в строке # *

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

<?php
while ( $the_query->have_posts() ):
    $the_query->the_post(); 
    $termsArray  = get_the_terms( get_the_ID(), "print_type" );  //Get terms for item
    $termsString = ""; //initialize string that will contain the terms

    // Only use foreach for a array or object.
    if( is_array($termsArray) ){
        foreach ( $termsArray as $term ) { // for each term 
            $termsString .= $term->slug.' '; //create a string that has all the slugs 
        }
    }
?>

<div class="<?php echo $termsString; ?>">
</div>

<?php endwhile; ?>
person Shivam Mathur    schedule 25.08.2016
comment
Это создает ошибку в конце страницы в конце инструкции. ‹? Php while ($ the_query-› have_posts ()) {$ the_query- ›the_post (); $ termsArray = get_the_terms ($ post- ›ID, print_type); $ termsString =; if (is_array ($ termsArray)) {foreach ($ termsArray as $ term) {$ termsString. = $ term- ›slug. ' '; }}}? ›‹ Div class = ‹? Php echo $ termsString; ? ›› ‹/div› ‹? Php end while; ?> - person Renegade; 26.08.2016
comment
И есть идеи, почему это будет работать на localhost (MAMP Pro), но не на сервере? - person Renegade; 26.08.2016
comment
Я обновил код, чтобы использовать: и нотацию end while для цикла while. Обычно я использую скобки. Отладьте свой код на сервере, чтобы проверить получаемое значение $termsArray. Скорее всего, это false или null. Если да, то вам нужно проверить, почему это так. Я не могу сказать точно, но это может быть связано с различием баз данных на сервере в вашей локальной настройке. - person Shivam Mathur; 26.08.2016
comment
Также, как указал @ mouner-mostafa, вам нужно использовать get_the_ID(), поскольку $post не определен. - person Shivam Mathur; 26.08.2016
comment
Это сработало - спасибо @Shivam Mathur. Проголосовали за ваш ответ, но не уверены, что у меня достаточно репутации :( - person Renegade; 26.08.2016
comment
Прохладный. Вы можете отметить ответ как принятый. Вот как это сделать. meta.stackexchange.com/questions/ 5234 /. - person Shivam Mathur; 26.08.2016

я думаю, проблема в твоем $post->ID это неясно. попробуй вот это

<?php 
     $guide = array(
        'post_type' => 'post', //type post type name here
        'posts_per_page' => -1, //number of posts
        );
query_posts($guide); while(have_posts()) : the_post(); ?>
    <?php 
    $cats = get_the_terms(get_the_ID(),'type_terms_name_here');
    if($cats){
     foreach ($cats as $value){
         echo $value->term_id; //call term id
         echo $value->name; //call term name
         echo $value->slug; //call term slug
         echo $value->term_group; //call term_group
         echo $value->term_taxonomy_id; //call term_taxonomy_id
         echo $value->taxonomy; //call term taxonomy type
         echo $value->description; //call term description
         echo $value->count; // call term post count
     }
    }
    ?>
    <?php endwhile; ?>
person Mouner Mostafa    schedule 25.08.2016
comment
Может заставить это работать либо @Mourner Не могу заставить это работать - он не выводит значение <?php while ( $the_query->have_posts() ) : $the_query->the_post(); $cats = get_the_terms( get_the_ID(), "print_type" ); if($cats) { foreach ($cats as $value); } ?> <div class="<?php echo $value->name; ?>"> - person Renegade; 26.08.2016
comment
Вы называете термины именем из определенного типа сообщения ??? а какую страницу вы использовали для отображения моего ответа ??? - person Mouner Mostafa; 26.08.2016