0

我正在为 WordPress 使用 ACF 插件

使用灵活内容字段,管理员可以添加一个名为“复制”的布局。

在此布局中,他们可以选择“网格类型”(四分之一、三分之一、一半、完整)。这是它在 ACF 中的外观:

ACF 灵活内容

这是它在我的模板文件中的外观:

<?php
  // Begin layout builder
  if( have_rows('layout_builder') ):
  while ( have_rows('layout_builder') ) : the_row();
?>

  <?php

    // Begin layout - Copy
    if( get_row_layout() == 'copy' ):

    // Begin repeater
    if( have_rows('copy') ):

    // Grid
    echo '<div class="grid-wrap">';

    while ( have_rows('copy') ) : the_row();

  ?>

    <div class="<?php

      if ( get_sub_field('grid_type') == 'quarter' ) {
        echo 'quarter';
      }

      if ( get_sub_field('grid_type') == 'third' ) {
        echo 'third';
      }

      if ( get_sub_field('grid_type') == 'half' ) {
        echo 'half';
      }

      if ( get_sub_field('grid_type') == 'full' ) {
        echo 'full';
      }

    ?>">

      <?= get_sub_field('copy'); ?>

    </div>

  <?php
    // End repeater
    endwhile;

    // End grid
    echo '</div>';

    endif;

    // End layout
    endif;
  ?>

<?php // End layout builder
  endwhile;
  endif;
?>

我期待这个grid_type领域会在前端吐出一个类,但它会空出来。

当我用 测试该字段时<?php var_dump( get_sub_field('grid_type') == 'half' ); ?>,它返回bool(false).

我在这里做错了什么?

4

1 回答 1

1

您将子字段 grid_type 放在错误的位置,您必须在复制中继器循环之外进行。这应该有效:

<?php
  // Begin layout builder
  if( have_rows('layout_builder') ):
  while ( have_rows('layout_builder') ) : the_row();
?>

  <?php

    // Begin layout - Copy
    if( get_row_layout() == 'copy' ):


    $gridType = get_sub_field('grid_type');

    // Begin repeater
    if( have_rows('copy') ):

    // Grid
    echo '<div class="grid-wrap">';

    while ( have_rows('copy') ) : the_row();

  ?>

    <div class="<?php

      if ( $gridType == 'quarter' ) {
        echo 'quarter';
      }

      if ( $gridType == 'third' ) {
        echo 'third';
      }

      if ( $gridType == 'half' ) {
        echo 'half';
      }

      if (  $gridType == 'full' ) {
        echo 'full';
      }

    ?>">

      <?= get_sub_field('copy'); ?>

    </div>

  <?php
    // End repeater
    endwhile;

    // End grid
    echo '</div>';

    endif;

    // End layout
    endif;
  ?>

<?php // End layout builder
  endwhile;
  endif;
?>

我建议您更改中继器的名称,而不是副本,因为您的布局具有相同的名称。

于 2018-08-13T22:02:10.693 回答