读取序列化数组作为短代码参数

时间:2017-08-28 19:16:18

标签: php wordpress advanced-custom-fields

我在WordPress中使用带有高级自定义字段插件的事件管理器插件。

在我的活动帖子类型中,我添加了一个带有ACF的图片库,并希望在事件管理器创建的事件列表页面中显示第一个图像。我可以在事件列表中执行此操作的唯一方法是创建一个短代码,该代码将读取从自定义字段返回的序列化数组,通常类似于a:1:{i:0;s:4:"6903";}

function unseralLink( $atts ) {
    $atts = shortcode_atts(
        array(
            'id' => '',
        ), $atts, 'unseralizeLink');
    if($atts['id']!='')
        {
        $mydata =  unserialize($atts['id']);
        $url = wp_get_attachment_image_url($mydata[0]);
        return "<img src=\"".$url."\" alt=\"\" class=\"attachment-thumbnail size-thumbnail\" />";
    }
}
add_shortcode( 'unseralizeLink', 'unseralLink' );

我用[unseralizeLink id="#_ATT{gallery}"]调用短代码。但没有任何回报。

我真正需要帮助的是将序列化数组作为短代码参数读取并将其存储到函数内的局部变量中。在那之后,我应该没事。

2 个答案:

答案 0 :(得分:0)

经过大量的实验,我找到了解决方案。

function eventImgURL( $atts ) {
shortcode_atts(
    array(
        'id' => '',
    ), $atts );
    $myvar = unserialize($atts[id]);
    return wp_get_attachment_image($myvar[0]);

}
add_shortcode( 'unseralizelink', 'eventImgURL' );

部分问题在于,当使用双引号时,我在短代码中使用双引号调用序列化数组。

[unseralizelink id='#_ATT{gallery}']

答案 1 :(得分:0)

我遇到了同样的问题,提问者发布的解决方案也无法解决。这是我的,工作得很好,下一个有同样的问题:

function eventImgURL( $atts ) {
    $atts = shortcode_atts( array( 'id' => '',), $atts, 'unserialize-link' );
    return wp_get_attachment_image($atts['id']);
}
add_shortcode( 'unserialize-link', 'eventImgURL' );

然后在HTML模板中调用它,如下所示:

<p>[unserialize-link id='#_ATT{logo}']</p>

有关详细信息,请参阅documentation on shortcodes from the WordPress Codex