2014-08-29 135 views
-2

在我的代码中,booklist是一个自定义帖子类型,booklink作为自定义字段。这书目是postobject为自定义后类型的书籍错误为foreach提供的strip_tags()和无效参数()

我不断收到此错误

用strip_tags()预计参数1是线串11

提供的foreach

无效的参数()为线12

<?php 

$all= get_posts(array('post_type' => 'books', 'numberposts' => -1,)); 

foreach ($all as $post) : setup_postdata($post); 

    if (!empty($post)) 
    { 
    $booklink = array(); 

    $booklist = strip_tags(get_field('booklist')); 
       foreach ($booklist as $post) : setup_postdata($post); 
        if (!empty($post)) 
         { 
         $booklink[] = strip_tags(get_field('booklink',$post));          
         } 
       endforeach; 
       wp_reset_postdata(); 
echo $booklink[0]; 

    } 
endforeach; 
?> 
+1

那么问题是什么?很显然,'get_field('booklist')'产生一个对象,'strip_tags'想要一个字符串... – Ohgodwhy 2014-08-29 16:24:01

+2

当出现错误时'strip_tags'返回一个字符串或'FALSE',但'foreach'想要一个数组。 – Barmar 2014-08-29 16:24:35

回答

0

你治疗$booklist如下字符串(strip_tags返回一个字符串)

$booklist = strip_tags(get_field('booklist')); 

然后这里作为阵列

foreach ($booklist as $post) : 

你不能做到这一点。 foreach需要一个数组。

你需要做的(假设get_field返回数组,因为它显然不是返回一个字符串)什么是通过数组循环和运行功能有

$booklist = get_field('booklist'); 
foreach ($booklist as $post) : 
    $post = strip_tags($post); 
+0

这是不正确的,你可以在一个字符串上使用foreach(),并在每次迭代中获得它的一个字符。这里的问题是,在这种情况下,传递给'strip_tags'('get_field('...')')的参数返回类似null的其他参数(未定义)。 你应该用!is_string()检查'get_field'的返回值,你可能想把它分成数组然后('explode(',',get_field('bookmarks'))'),你有你的数组迭代(我猜这个字段有一个来自wordpress后端的文本值) – Torben 2014-08-29 16:34:46

+0

@Torben尽管你可以将一个字符串当作一个数组来解析它,但是我真的怀疑这里是用例(这种用途不常见)。该函数可能会返回null,但为什么你会“foreach”呢?无论哪种方式,我们都不知道'get_result'实际上做了什么。 OP应该启发我们 – Machavity 2014-08-29 16:56:35

1

我添加endforeach和删除的带状标签代码为get_field,它解决了这个问题。

相关问题