do_shortcode没有解析里面的短代码

时间:2017-11-04 00:13:29

标签: wordpress advanced-custom-fields shortcode

我正在尝试在短代码功能中使用do_shortcode。问题是,当我在页面上使用[terms_and_conditions]时,它不会解析do_shortcode,我会看到[MM_Form_Field type='custom' id='1' isRequired='true' class='']。它没有被执行。

这就是我的功能:

function terms_and_conditions( $atts ) {
    // Variables
    $terms = get_field('terms_content', 'options');
    $checkbox = get_field('terms_checkbox_msg', 'options');
    // $smarttag = get_field('terms_smarttag', 'options');
    $smarttag = do_shortcode(get_field('terms_smarttag', 'options'));

    var_dump($smarttag);

    $html_out = '';

    $html_out .= '<section id="terms">';

        $html_out .= '<div class="terms-content-wrapper">';
            $html_out .= $terms;
        $html_out .= '</div>'; // end terms-content-wrapper

        $html_out .= '<div class="terms-checkbox-wrapper">';
            $html_out .= '<div class="terms-checkbox">';
                $html_out .= do_shortcode($smarttag);
                $html_out .= '<p>' . $checkbox . '</p>';
            $html_out .= '</div>'; // end terms-checkbox
        $html_out .= '</div>'; // end terms-content-wrapper

    $html_out .= '</section>'; // end tip-wrapper

    return $html_out;
}
add_shortcode( 'terms_and_conditions', 'terms_and_conditions');

1 个答案:

答案 0 :(得分:0)

使用ob_start可以彻底清理您的短代码。但你可能更愿意避免它们。这应该有用......

<?php
function terms_and_conditions( $atts ) {
    // Variables
    $terms = get_field('terms_content', 'options');
    $checkbox = get_field('terms_checkbox_msg', 'options');
    $smarttag = get_field('terms_smarttag', 'options');

    ob_start();
    ?>
    <section id="terms">
        <div class="terms-content-wrapper">
        <?php
        if($terms){
            echo $terms; // <- is terms an array or a string?
        }
        ?>
        </div>
        <div class="terms-checkbox-wrapper">
            <div class="terms-checkbox">
                <?php 
                echo do_shortcode($smarttag); 
                if(!empty($checkbox)){
                    echo '<p>' . $checkbox . '</p>'; // <- is checkbox an array or a string?
                }
                ?>
            </div>
        </div>
    </section>
    <?php
    return ob_get_clean();
}
add_shortcode( 'terms_and_conditions', 'terms_and_conditions');

您可能想要尝试的另一件事是更改您在短代码中使用的引号:

例如,使用此:

[MM_Form_Field type="custom" id="1" isRequired="true" class=""]

而不是:

[MM_Form_Field type='custom' id='1' isRequired='true' class='']