使用WP Shortcode作为另一个Shortcode

时间:2015-05-27 18:15:23

标签: wordpress advanced-custom-fields

我正在尝试使用高级自定义字段插件短代码作为另一个短代码中的属性。

我的主题制作公司目前不提供定制支持。

原始短代码列于此

public function plan( $atts, $content )
    {
        $html = array();

        extract( shortcode_atts( array(
            'price'     => '',
            'price_info'    => '',
            'type'  => '',
            'delay'     => '',
            'class'     => '',
        ), $atts ) ); 

        $html[] = '<div class="' . ( $class ) . '">';
        $html[] =   '<div class="plan has-animation" data-delay="' . ( (int)$delay ) . '">';
        $html[] =       '<div class="plan-container">';
        $html[] =           '<ins class="plan-price">' .( $price ) . '</ins>';
        $html[] =           '<span class="price-info">' . ( $price_info ) . '</span>';
        $html[] =           '<h2 class="second_color">' . ( $type ) . '</h2>';

        $html[] =           do_shortcode( $content );

        $html[] =       '</div>';
        $html[] =   '</div>';
        $html[] = '</div>';

        return implode("\n", $html); 
    }

当我调用短代码[pt_plan price="$12.99" price_info="per month" type="Standard" delay="400" class="col-lg-4 col-md-4 col-sm-4"]时,我想让价格属性允许使用短代码作为值来利用高级自定义字段。

但是,如果我将[acf field='session_price_1']作为属性值,就像这样[pt_plan price="[acf field='session_price_1']" price_info="per month" type="Standard" delay="400" class="col-lg-4 col-md-4 col-sm-4"],就会发现它就像是一个字符串并打破原来的pt_plan短代码。

有人能指出我正确的方向吗?我认为将do_shortcode()添加到计划短代码中的$ price变量,但它不起作用。

希望所有这些都有意义,并提前感谢!!

1 个答案:

答案 0 :(得分:1)

我实际上已经开始工作了。 因为短代码在WP中的工作方式,嵌套短代码的结尾]关闭了原始的短代码,搞砸了一切。 为了解决这个问题,我做了以下几点:

$html[] = '<div class="plan-price">'.do_shortcode('['.$price.']').'</div>';

[pt_plan price="acf field='session_price_1'" price_info="per month" type="Standard" delay="400" class="col-lg-4 col-md-4 col-sm-4"]

这很有效!

基本上我只输入了短代码的文本和&#39;而不是&#34;进入属性,在将属性值打印到[和]中时连接[和],并使用do_shortcode()来运行短代码。