我需要将带有嵌套对象数组的复杂json作为shortcode参数传递。
例如,我需要传递如下内容:
{
"a":"va",
"b":{
"b1":"vb1",
"b2":[
{
"kb2":"vb2"
}
]
}
}
所以我试着这样设置快捷码:
[my_shortcode parameters=\'{"a": "va", "b": {"b1": "vb1", "b2": [{"kb2": "vb2"}]}}\']
问题似乎与数组(方括号)有关。实际上,另一个示例也可以:
[my_shortcode parameters=\'{"a": "va", "b": {"b1": "vb1"}}\']
以下是shorcode中如何处理参数:
function myshortcodehandler($atts){
$arrparameters = json_decode($atts["parameters"], true);
ob_start();
?>
<pre><?php echo json_encode($arrparameters); ?></pre>
<?php
return ob_get_clean();
}
如果json包含一些嵌套数组,则输出仅显示一些括号。那么,将复杂json作为短代码参数传递的正确方法是什么?
我已经阅读了此文档:https://codex.wordpress.org/Shortcode_API#Square_Brackets
提前谢谢。
SO网友:assistbss
也许有更好的解决方案,但是serialize 似乎能胜任这项工作。
我可以传递json\\u解码后再序列化的参数,而不是json。
例如
$jsonval = json_decode(\'{"foo": "bar"}\');
$serialized = serialize($jsonval);
短代码类似于:
[myshortcode parameters=\'O:8:"stdClass":1:{s:8:"foo";s:3:"bar";}\']
此时,我可以处理未序列化的参数:
function myshortcodehandler($atts){
$arrparameters = (array) unserialize($atts["parameters"]);
...
似乎也适用于json中的数组。