将复杂的json作为短码参数传递

时间:2021-07-14 作者:assistbss

我需要将带有嵌套对象数组的复杂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

提前谢谢。

1 个回复
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中的数组。