代码之家  ›  专栏  ›  技术社区  ›  Energizer7

WP-高级自定义字段从字段到单选按钮获取值

  •  0
  • Energizer7  · 技术社区  · 6 年前

    我正在使用此代码

    <div class="text2">
    <h1>test</h1>
    <?php 
    
    $colors = get_field('color');
    
    if( $colors ): ?>
    <p>Color: <?php echo implode(', ', $colors); ?></p>
    <?php endif; ?>
    <?php
    
    $field_name = "color";
    $field = get_field_object($field_name);
    
    if( $field )
    {
      echo '<select name="' . $field['key'] . '">';
        foreach( $field['choices'] as $k => $v )
        {
          echo '<option value="' . $k . '">' . $v . '</option>';
        }
      echo '</select>';
    }
    
    ?>
    

    我得到这样的输出:

    Output

    正如您所看到的,内爆代码的第一部分工作得很好——我为本文选择了黄铜和金色。但选项字段从字段中生成每个值。我的目标是从“选项”字段中获取所有选项,但只获取我标记的这些选项。

    在这种情况下,正确的输出将只有2个选项-选择字段中的黄铜和黄金。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Sally CJ    6 年前

    替换此:

    if( $field )
    {
      echo '<select name="' . $field['key'] . '">';
        foreach( $field['choices'] as $k => $v )
        {
          echo '<option value="' . $k . '">' . $v . '</option>';
        }
      echo '</select>';
    }
    

    .. 有了这个:

    if( $field )
    {
      echo '<select name="' . $field['key'] . '">';
        $selected = $field['value'];
        foreach( $field['choices'] as $k => $v )
        {
          if ( in_array( $k, $selected ) ) {
            echo '<option value="' . $k . '">' . $v . '</option>';
          }
        }
      echo '</select>';
    }
    

    .. 或更短的版本:

    if( $field )
    {
      echo '<select name="' . $field['key'] . '">';
        foreach( $field['value'] as $value )
        {
          $label = $field['choices'][ $value ];
          echo '<option value="' . $value . '">' . $label . '</option>';
        }
      echo '</select>';
    }
    

    [编辑]创建一组 radio 按钮:

    (您可以更改CSS class es公司- radiobox-group 和/或 radiobox . 这个 无线电广播 按钮也使用 color 作为他们的 name .)

    if( $field )
    {
      echo '<div class="radiobox-group">';
        foreach( $field['value'] as $value )
        {
          $label = $field['choices'][ $value ];
          $checked = '';
    
          echo '<label class="radiobox">';
            printf( '<input type="radio" name="color" value="%s"%s /> ',
              esc_attr( $value ), $checked );
            echo esc_html( $label );
          echo '</label>';
        }
      echo '</div>';
    }