我遇到以下错误:
警告:array_map():参数#2应该是......
中的数组警告:implode():在第1918行的wp-includes / class-wp-query.php中传递的参数无效
在我的php上,我收到了另一个页面的var,我这样做:
$myId = $_POST['varPostId'];
$parts = explode(',', $myId);
然后我需要读取该值
query_posts(array(
'post__in' => $myId
));
但是我得到了上述错误。
如果我这样做:
'post__in' => $parts
));
我得到一个空白页。
我尝试使用implode
$myId = $_POST['varPostId'];
$parts = implode(',', $myId);
直接在查询中获取值
query_posts(array(
'post__in' => $_POST['varPostId']
));
$_POST['varPostId']
是单个值,例如405
答案 0 :(得分:0)
您从POST
请求获得的值似乎只包含一个帖子ID,该ID应该是一个int,但可能是一个字符串。你需要做一些类型和错误检查。希望以下类似的东西可以起作用。我看到query_posts
和post__in
,我假设WordPress在这里发挥作用?
// Put your ID into a variable and sanitize it
$myId = sanitize_key( $_POST['varPostId'] );
// Force it to an int (in case it's not from sanitize_key)
$myId = (int) $myId;
// Don't explode because it's not appropriate here
// $parts = explode( ',', $myId );
// Add the post id to the arguments as an array
query_posts(
array(
'post__in' => array( $myId )
)
);
要跟进explode
这里不合适的原因,它用于转换字符串,通常是这样的:
哦,你好,世界
进入包含多个项目的数组,如下所示:
$asdf = array(
0 => 'oh',
1 => 'hello',
2 => 'world'
);
但是你似乎没有逗号分隔的post id字符串,你只需要一个这样的字符串,所以最好不要在这里使用。
正如评论中已经说明的那样,explode
接受一个字符串并将其拆分为一个项目数组。 implode
恰恰相反。它需要一个数组并将其压缩成一个字符串。
所以你可以拥有如下内容:
$myArray = array(
0 => 'hello',
1 => 'world'
);
// Convert to a string
$myString = implode( ', ', $myArray );
echo $myString; // prints: hello, world
// Convert back to an array
$myString = explode( ', ', $myArray );
var_dump( $myString ); // prints the array above