短代码 vc_map - 自定义标记输出参数问题

问题描述 投票:0回答:1

我正在尝试在主题中制作简单的短代码,以在管理视图中演示自定义标记选项。代码如下:

`<?php  
        ob_start(); ?>      
    
                <div class="item-container">            
                    <p>This is admin view:<p>
                    <h4><?php echo $heading?></h4>          
                </div> <?php 
        
        $wena02_markup = ob_get_clean();                
                                                                            
vc_map( array(
    'name'                    => __( 'Heading' , 'wena-theme' ),
    'base'                    => 'wena02_item',
    'description'             => __( 'Custom heading', 'wena-theme' ),  
    'content_element'         => true,
    'custom_markup' =>$wena02_markup, // 'CUSTOM MARKUP ADMIN VIEW'
    'show_settings_on_create' => true,
    'params'                  => array(
                array(
                    'type'        => 'textfield',
                    'heading'     => __( 'Test Heading', 'wena-theme' ),
                    'holder' => 'div',
                    'param_name'  => 'heading',
                    'description' => __( 'Heading will be displayed.', 'wena-theme' ),
                ),
                
    ),
    
) );

if(class_exists('WPBakeryShortCodesContainer')){ class WPBSC_Wena02_Item extends WPBakeryShortCodesContainer { /*Boom!*/ } }


if(!function_exists('wena02_item_output')){
    
    function wena02_item_output( $atts, $content = null){
        $atts =  extract(shortcode_atts( 
                    array( 'heading'             => '',
                   ),$atts )) ;
    
            ob_start(); ?>
            
                <div class="item-container">
                    <h4><?php echo $heading?></h4>      
                </div> <?php 
                
            return ob_get_clean();                                  
    }

    add_shortcode( 'wena02_item' , 'wena02_item_output' );
}`

参数在函数“wena02_item_output”中提取,并且在输出中与 $heading 一样工作。

然后,在数组中我将自定义标记添加到 $wena02_markup

简单的 ob_start 函数可以很好地处理创建的对象,但仅限于条件 - 它位于顶部 - 直到数组并且不隐藏在任何函数中。显示良好的 html 消息“这是管理视图:”,但不显示变量。

所以我在与自定义标记连接的 ob_start 输出中将参数提取到 $heading 时遇到问题。 寻找一些可行的解决方案。

我尝试使用全局 $heading 但目前没有成功。

php wordpress shortcode wpbakery
1个回答
0
投票

您可以尝试一下,希望它能满足您的需要

<?php  
$wena02_markup = '
    <div class="item-container">
        <p>This is admin view:</p>
        <h4>{{heading_placeholder}}</h4>
    </div>';

vc_map( array(
    'name'                    => __( 'Heading', 'wena-theme' ),
    'base'                    => 'wena02_item',
    'description'             => __( 'Custom heading', 'wena-theme' ),  
    'content_element'         => true,
    'custom_markup'           => $wena02_markup, // 'CUSTOM MARKUP ADMIN VIEW'
    'show_settings_on_create' => true,
    'params'                  => array(
        array(
            'type'        => 'textfield',
            'heading'     => __( 'Test Heading', 'wena-theme' ),
            'holder'      => 'div',
            'param_name'  => 'heading',
            'description' => __( 'Heading will be displayed.', 'wena-theme' ),
        ),
    ),
) );

if(class_exists('WPBakeryShortCodesContainer')){
    class WPBSC_Wena02_Item extends WPBakeryShortCodesContainer { /* Additional logic if needed */ }
}

if(!function_exists('wena02_item_output')){
    function wena02_item_output( $atts, $content = null ) {
        extract(shortcode_atts(array('heading' => ''), $atts));

        $output = str_replace('{{heading_placeholder}}', esc_html($heading), $wena02_markup);
       
        return $output;
    }

    add_shortcode('wena02_item', 'wena02_item_output');
}
?>
© www.soinside.com 2019 - 2024. All rights reserved.