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,使遵循逻辑更容易、更清晰。如果为空或没有匹配项,则可能什么都不是。
我目前正在为 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,使遵循逻辑更容易、更清晰。如果为空或没有匹配项,则可能什么都不是。