web-dev-qa-db-ja.com

ビジュアルのレンダリングComposerページ上のショートコード

echovisual composer 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オフ(明らかに、ショートコードのvc_rowがないため)
  • ショートコードはページにありません

shop-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をレンダリングすることは可能ですか?その場合、どのように行われますか?

14
Jadeye

方法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のコードに、別のエラーがあります:行

_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]');
}; ?>
_
2
KAGG Design

使用:

_WPBMap::addAllMappedShortcodes();
_

その後、いつものようにdo_shortcode($content);

つまり、パフォーマンス上のページビルダーは、必要がない限り、ショートコードを登録しません。

要素が_vc_map_または_vc_lean_map_によって登録されている場合、_add_shortcode_関数を使用する必要はありません。WPBMap::addAllMappedShortcodes();を使用するだけですべてを実行できます。ショートコードクラスが呼び出されます。レンダリングプロセス中のコールバック、次にショートコードテンプレート。