在页面上呈现Visual Composer短代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在页面上呈现Visual Composer短代码相关的知识,希望对你有一定的参考价值。

我正在尝试将echo视觉作曲家shortcodes放到页面上。

我已尝试过以下两种方法,但它们不起作用:

的functions.php

方法1

/*
 * add shortcode file
 */
function include_file($atts) {
    $a = shortcode_atts( array(
        'slug' => 'NULL',
    ), $atts );

    if($slug != 'NULL'){
        ob_start();
        get_template_part($a['slug']);
        return ob_get_clean();
    }
}
add_shortcode('include', 'include_file');

方法2

function someshortocode_callback( $atts = array(), $content = null ) {

    $output = "[vc_section full_width="stretch_row" css=".vc_custom_1499155244783{padding-top: 8vh !important;padding-bottom: 5vh !important;background-color: #f7f7f7 !important;}"][vc_row 0=""][vc_column offset="vc_col-lg-offset-3 vc_col-lg-6 vc_col-md-offset-3 vc_col-md-6"][/vc_column][/vc_row][/vc_section]";
    return $output;
}
add_shortcode('someshortocode', 'someshortocode_callback');

file_rendering_vc_shortcodes.php:

方法1

<?php if ( is_plugin_active( 'js_composer/js_composer.php' ) ) {
    wc_print_notice('js_composer plugin ACTIVE', 'notice');
    echo do_shortcode('[include slug="vc_templates/shop-page"]');
}; ?>

结果

  • js_composer插件ACTIVE
  • 短代码在页面上,括号括起来

方法2

<?php $post = get_post();

if ( $post && preg_match( '/vc_row/', $post->post_content ) ) {
// Visual composer works on current page/post
    wc_print_notice('VC ON', 'notice');
    echo add_shortcode('someshortocode', 'someshortocode_callback');
} else {
    wc_print_notice('VC OFF', 'notice');
    //echo do_shortcode('[include slug="vc_templates/shop-page"]');
}; ?>

结果

  • VC OFF(显然,因为短代码中的vc_row不存在)
  • 短代码不在页面上

店铺page.php文件

<?php
/**
Template Name:  Shop Page in theme
Preview Image:  #
Descriptions:   #
 * [vc_row][vc_column][/vc_column][/vc_row]
 */
?>
[vc_section full_width="stretch_row" css=".vc_custom_1499155244783{padding-top: 8vh !important;padding-bottom: 5vh !important;background-color: #f7f7f7 !important;}"][vc_row 0=""][vc_column offset="vc_col-lg-offset-3 vc_col-lg-6 vc_col-md-offset-3 vc_col-md-6"][/vc_column][/vc_row][/vc_section]

是否有可能在页面上呈现vc shortcodes,如果是这样,它是如何完成的?

答案

关于方法2。

您必须在短代码功能中使用do_shortcode()

function someshortocode_callback( $atts = array(), $content = null ) {
    $output = '[vc_section full_width="stretch_row" css=".vc_custom_1499155244783{padding-top: 8vh !important;padding-bottom: 5vh !important;background-color: #f7f7f7 !important;}"][vc_row 0=""][vc_column offset="vc_col-lg-offset-3 vc_col-lg-6 vc_col-md-offset-3 vc_col-md-6"]column text[/vc_column][/vc_row][/vc_section]';

    return do_shortcode( $output );
}

add_shortcode( 'someshortocode', 'someshortocode_callback' );

我的测试网站上的工作示例:http://test.kagg.eu/46083958-2/

页面仅包含[someshortocode]。上面的代码被添加到functions.php

在方法2的代码中还有另一个错误:line

echo add_shortcode('someshortocode', 'someshortocode_callback');

无法工作,因为add_shortcode()什么也没有回报。此代码应如下所示:

<?php $post = get_post();

if ( $post && preg_match( '/vc_row/', $post->post_content ) ) {
// Visual composer works on current page/post
    wc_print_notice('VC ON', 'notice');
} else {
    wc_print_notice('VC OFF', 'notice');
    add_shortcode('someshortocode', 'someshortocode_callback');
    echo do_shortcode('[someshortocode]');
}; ?>
另一答案

使用:

WPBMap::addAllMappedShortcodes();

然后像往常一样do_shortcode($content);

简而言之,由于性能而导致的页面构建器不会注册短代码,除非不需要。

如果你的元素是由vc_mapvc_lean_map注册的,那么不需要使用add_shortcode函数,只需使用WPBMap::addAllMappedShortcodes();即可完成所有操作,它将在渲染过程中调用短代码类回调,然后短代码模板。

以上是关于在页面上呈现Visual Composer短代码的主要内容,如果未能解决你的问题,请参考以下文章

在 Wordpress 的函数中使用简码 [重复]

将 PHP 代码插入 Visual Composer

禁用某些用户角色的简码使用

WpBakery (Visual Composer) - 响应式最佳实践

CATiledLayer 在 iPad 第 3 代放大时被移除和刷新

在Visual COmposer中添加自定义图标