我正在使用Easing Slider Pro用于幻灯片和高级自定义字段来构建自定义页面布局。我不明白为什么ACF & &;Easing PHP只输出我想要插入到页面中的滑块的ID号,而不是滑块本身。
我发现了这个旧线程,它有同样的问题,但它是常规的ACF,而不是一个灵活的内容字段:PHP中的Wordpress PHP -此外,推荐的ES输出代码已经改变了一点,像滑块159看起来像:
<?php if ( function_exists( 'easingslider' ) ) { easingslider( 159 ); } ?>
下面是我的代码,它可以很好地用于照片和文本:
<?php while(the_flexible_field('flex_field')): ?>
<?php if(get_row_layout() == 'photo'): ?>
<div class="col-md-6">
<h2>Photos</h2>
<img src='<?php the_sub_field('photo-stack_image'); ?>' class="img-responsive" />
<BR><BR>
<img src='<?php the_sub_field('photo-stack_image2'); ?>' class="img-responsive" />
</div>
<?php elseif( get_row_layout() == 'text' ): ?>
<div class="col-md-6">
<h2>Texts</h2>
<?php the_sub_field('text_field');?>
</div>
<?php elseif(get_row_layout() == 'slider'): ?>
<div class="col-md-6">
<h2>Sliders</h2>
<?php if ( function_exists( 'easingslider' ) )
{ easingslider( the_sub_field('easing_slider_shortcode') ); } ?>
</div>
<?php endif; ?>
<?php endwhile; ?>
我试过用get_sub_field切换the_sub_field,但这甚至没有输出ID。我是PHP新手,如果我错过了一些简单的东西,我不会感到惊讶,但是什么呢?提前感谢!
更新:谢谢Hobo!根据您的建议,我测试了ES函数(它有效),并发现两者"echo get_sub_field('easing_slider_shortcode')"one_answers"print_r(get_sub_field('easing_slider_shortcode'))"带回了滑块的ID号,没有额外的代码。我已经仔细检查了伸缩字段、字段和子字段的名称,它们都是正确的。
我不知道这是否有助于建议问题是什么,但我通过ACF的管理端前置和追加功能在ES ID号周围添加了PHP代码,但它没有在页面上回显代码。
更新二第二次尝试成功了——谢谢Hobo!如果将来有人遇到这个问题,下面是我的最终代码:
<div class="col-md-6">
<?php elseif(get_row_layout() == 'slider'): ?>
<?php if ( function_exists( 'easingslider' ) ) {
$slider_id = (int) get_sub_field('easing_slider_shortcode');
easingslider( $slider_id );
} ?>
首先,get_sub_field()
几乎肯定是您想要的。the_sub_field()
将直接输出一个值;当需要在其他函数中使用该值时,请使用get_sub_field()
。
现在您需要调试问题是与easingslider()
函数还是get_sub_field()
返回的值有关。
要检查easingslider()
函数,只需将ACF函数替换为它返回的值,例如
<div class="col-md-6">
<h2>Sliders</h2>
<?php if ( function_exists( 'easingslider' ) )
{ easingslider( 159 ); } ?>
</div>
如果看起来OK,您知道get_sub_field()
返回的值有问题。如果看起来不正确,请检查您使用了正确的ID。
假设问题是由get_sub_field()
返回的值,您将需要检查它只返回一个整数,而不是(说)在额外的HTML中包装的整数(名称的_shortcode
部分在这方面让我担心)。所以这一次,只回显返回的值,而不调用easingslider()
函数,例如
<div class="col-md-6">
<h2>Sliders</h2>
#<?php echo get_sub_field('easing_slider_shortcode'); ?>#
</div>
然后查看生成的页面源(例如Chrome中的Ctrl-U
),并看看#
符号之间的区别。如果除了ID之外还有其他内容,请检查字段定义并确保它只是一个数字。如果没有,试试
<div class="col-md-6">
<h2>Sliders</h2>
#<?php print_r(get_sub_field('easing_slider_shortcode')); ?>#
</div>
,它会给你更多关于PHP存储内容的细节。参见print_r文档。
如果仍然没有,请检查您是否有正确的字段名。
如果这个过程没有帮助你找到问题,用你找到的内容更新你的问题。
谢谢你的更新。我有点困惑为什么它不起作用,但还有一些东西可以尝试。我没有使用ACF的管理端前置和追加功能,所以我不确定缺乏回显值是否是一个问题。
首先,PHP日志中是否有消息或错误?如果有,这可能有助于调试问题。
下一步,检查easingslider()
是否可以将变量作为参数。我不明白为什么它不会,但我不明白为什么你所拥有的不起作用…
<div class="col-md-6">
<h2>Sliders</h2>
<?php if ( function_exists( 'easingslider' ) ) {
$slider_id = 159 ;
easingslider( $slider_id );
} ?>
</div>
如果可以,试试
<div class="col-md-6">
<h2>Sliders</h2>
<?php if ( function_exists( 'easingslider' ) ) {
$slider_id = (int) get_sub_field('easing_slider_shortcode');
easingslider( $slider_id );
} ?>
</div>
也许在easingslider()
代码的某个地方有类型检查