对于Wordpress,使用高级自定义字段(ACF)灵活的部分,我有各种很好的灵活字段。我已经使用ACF多年了,后来又开始使用灵活的部分。
我注意到,当我在弹性部分(WYSWIG编辑器或类似工具)中插入短代码时,它会中断循环,并且以下弹性部分都不会出现在页面或检查器/ DOM中。我认为简码打破了while循环。
这里是我当前要在页面中插入的简码。可以,但是后面的其余页面部分丢失了。
function spotlight_boxes( $atts ){
$args = array( 'post_type' => 'customer-spotlight', 'posts_per_page' => -1, 'post_status' => 'publish' );
$loop = new WP_Query( $args );
$loopTitle = $atts['title'];
ob_start(); ?>
<section class="feature-boxes page">
<h2 class="center std section-title"><?php echo $loopTitle; ?></h2>
<div class="small-wrap">
<div class="boxes flex">
<?php while ( $loop->have_posts() ) : $loop->the_post();
$customer_logo = get_field("customer_logo");
?>
<div class="feature-box">
<span class="tag-btn">Spotlight</span>
<img src="<?php the_post_thumbnail_url(); ?>" width="100%"/>
<div class="feature-info">
<img src="<?php echo $customer_logo['sizes']['medium']; ?>" width="100%">
<h5 class="std"><?php the_field('overview_title'); ?></h5>
<a href="<?php the_permalink(); ?>" class="learnmore">Learn More</a>
</div>
</div>
<?php endwhile; ?>
</div>
</div>
</section>
<?php
return ob_get_clean();
}
add_shortcode( 'spotlight_boxes', 'spotlight_boxes' );
答案 0 :(得分:0)
这是因为您正在使用以前用短代码代替的功能来生成内容。如Wordpress Codex中所述,由简码调用的函数绝不能产生任何形式的输出。简码函数应返回将用于替换简码的文本。直接产生输出会导致意外结果。这类似于过滤器函数的行为方式,因为它们不能从调用中产生预期的副作用,因为您无法控制从何时何地调用它们。
例如,如果您创建的HTML需要用简码替换,则示例返回应类似于
$html = '<div class="test-field">';
$html .= get_field('test-field');
$html .= '</div>';
return $html;
不是这样
the_field('test-field');