我正在尝试在短代码功能中使用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');
答案 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='']