将 Flexible ACF php 插入 Easing Slider php

Inserting Flexible ACF php into Easing Slider php

我使用 Easing Slider Pro 制作幻灯片,使用高级自定义字段构建自定义页面布局。我不明白为什么 ACF & Easing PHP 只输出我想插入页面的滑块的 ID 号,而不是滑块本身。

我找到了这个旧线程,它有同样的问题,但它是针对常规 ACF,而不是灵活的内容字段:Wordpress PHP within PHP -- 另外,推荐的 ES 输出代码也有一些变化,比如 slider 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; ?>

我试过将 the_sub_field 与 get_sub_field 切换,但这甚至没有输出 ID。我是 PHP 的新手,如果得知我错过了一些简单的事情,我不会感到惊讶,但是什么?提前致谢!

更新: 谢谢 Hobo!根据您的建议,我测试了 ES 函数(有效),发现 "echo get_sub_field('easing_slider_shortcode')" 和 "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函数替换为它的值returns,例如

<div class="col-md-6">
    <h2>Sliders</h2>
    <?php if ( function_exists( 'easingslider' ) ) 
        { easingslider( 159 ); } ?>
</div>

如果看起来没问题,那么您就知道问题出在 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 正在存储的内容的更多详细信息。参见 the print_r documentation

如果仍然没有任何内容,请检查您的字段名称是否正确。

如果此过程不能帮助您找到问题,请用您找到的内容更新您的问题。

更新

感谢您的更新。我有点困惑为什么它不起作用,但还有一些事情要尝试。我没有使用 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() 代码中某处有类型检查。