收到警告 : implode(): 收到 var 值后



我遇到以下错误:

警告 : array_map((: 参数 #2 应该是...

警告 : implode((:在 wp-include/class-wp-query.php 第 1918 行传递的参数无效

在我的 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

似乎您从POST请求中获得的值只包含一个帖子 ID,该 ID 应该是 int,但可能是字符串。您需要执行一些类型和错误检查。希望像下面这样的东西可以工作。我看到query_postspost__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'
);

但是您似乎没有逗号分隔的帖子 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

相关内容

最新更新