PHP 和 ACF - 是否可以对字段名称执行 if/else 以输出值?

PHP and ACF - Is it possible to do if/else in regards to field name to output value?

我目前正在为 ACF 编写简码,想知道是否有缩短它的方法,而不是一次又一次地重新创建相同的简码,只是更改 $value。

代码如下:

function acf_shortcode_distance( $atts ) {
  
  // extract attributs
  extract( shortcode_atts( array(
    'field'      => '',
    'post_id'    => false,
    'format_value'  => true
  ), $atts ) );
  
  
  // get value and return it
  $value = get_field( $field, $post_id, $format_value );
  if (empty($value)) {
    return '';
  }
  
  // array
  if( is_array($value) ) {
    $value = @implode( ', ', $value );
  }
  $value = '<img src="distance-logo.svg" alt="distance-logo" class="svg-img"><br/><p>Distance: '.$value.'</p>';
  // return
  return $value;
}

add_shortcode('acf_if_value_distance', 'acf_shortcode_distance');

我需要的是针对我正在使用的给定 ACF 字段进行值输出。类似于:

  if( is_array($value) ) {
    $value = @implode( ', ', $value );
  }
--- IF FIELD = DISTANCE, OUTPUT THIS:
  $value = '<img src="distance-logo.svg" alt="distance-logo" class="svg-img"><br/><p>Distance: '.$value.'</p>';

--- IF FIELD = TIME, OUTPUT THIS:
  $value = '<img src="time-logo.svg" alt="distance-logo" class="svg-img"><br/><p>Time: '.$value.'</p>';

--- ETC. ETC. FOR EACH NEW FIELD
  // return
  return $value;
}

有什么办法可以解决这个问题吗?我尝试过的所有方法都不起作用,而且我认为为我拥有的 15 个以上的字段重新创建整个短代码有点极端!

希望有人能给我指路,先谢谢了!

我会为此查看 switch 语句 - https://www.php.net/manual/en/control-structures.switch.php

避免了很多 if 和 else if,使遵循逻辑更容易、更清晰。如果为空或没有匹配项,则可能什么都不是。