是否按部分显示自定义字段值?

时间:2015-07-14 作者:Advanced SEO

我在帖子中有一个名为hex\\u colors的自定义字段,其中包含用空格分隔的十六进制颜色代码,自定义字段值如下:

"000000 f0f0f0 c0c0c0 202020 404040 "
如果有帮助的话,我可以将创建它的函数更改为用“,”或“|”或其他任何东西分隔。

我可以这样展示:

<?php
if (get_custom_field(\'hex_colors\')) { 
echo \'<div>\'; echo get_custom_field(\'hex_colors\'); echo \'</div>\';
}
?>
但我想一个接一个地显示每个颜色代码,并对每个颜色代码进行样式设置,例如,而不是这样:

<div>000000 f0f0f0 c0c0c0 202020 404040</div>
要得到这样的结果:

<div class="colors" style="background-color:#000000">000000</div>
<div class="colors" style="background-color:#f0f0f0">f0f0f0</div>
<div class="colors" style="background-color:#c0c0c0">c0c0c0</div>
<div class="colors" style="background-color:#202020">202020</div>
<div class="colors" style="background-color:#404040">404040</div>
<小时>
I tried like this:
    if ( get_post_meta( get_the_ID(), \'hex_colors\', true ) ){
    $colors = get_post_meta( get_the_ID(), \'hex_colors\', true );
    $colors = explode( \' \' , $colors );
    foreach( $colors as $color ) {
        echo \'<div>\';
        echo $color;
            echo \'</div>\';
    }
}
这是可行的,但我得到的输出是这样的:

<div>000000</div>
<div></div>
<div>f0f0f0</div>
<div></div>
<div>c0c0c0</div>
<div></div>
<div>c0c0c0</div>
<div></div>
<div>404040</div>
<div></div>
结尾处为空div()(因为自定义字段值结尾处有“”空格。这是创建自定义字段的函数:

<?php
for ($i = 0; $i < $colors_to_show; $i += $inc) {
for($j=0;$j<$inc;$j++) {
$out_color_text .= \'\'.$colors_key[$i + $j].\' \'; // CUSTOM FIELD VALUE
}
}

$id = $post->ID; // Post ID
$value = $out_color_text;
add_post_meta($id, \'hex_colors\', $value, true);
?>
有什么办法可以在结尾没有空白的情况下创造价值?

2 个回复
最合适的回答,由SO网友:bonger 整理而成

根据评论,只需修剪$colors 使用前:

if ( get_post_meta( get_the_ID(), \'hex_colors\', true ) ){
    $colors = get_post_meta( get_the_ID(), \'hex_colors\', true );
    $colors = explode( \' \' , trim( $colors ) );
    foreach( $colors as $color ) {
        echo \'<div>\', $color, \'</div>\';
    }
}

SO网友:Mike

如果得到这样的空div,那么每个值之间可能有两个空格。在这种情况下,只有第一个空格将被视为分隔符。

我认为最好的做法是将它们与其他物理字符分开,然后从各个值中删除所有空格(这就是调用trim() 下面就可以了)。

我会这样做:

$colors = get_post_meta( get_the_ID(), \'hex_colors\', true );

if ( !empty($colors) ) {
    $colors = explode( \'|\', $colors );
    // NOTE: I like to delimit values with pipe characters since they aren\'t used very often in normal text on my sites.

    foreach ($colors as $color) {
        $color = trim($color); // Strip Whitespace from value

        if (!empty($color)) { // If color is not empty, print the div
            echo \'<div>\' . $color . \'</div>\';
        }
    }
}
这只调用一次get\\u post\\u meta()。由于如果没有meta,该函数将返回一个空值,因此可以设置$colors 并检查以确保它不是空的。

另外,你不需要三个echo 呼叫。使用. 将串联值,以便echo \'<div>\' . trim($color) . \'</div>\'; 使用一行标记可以获得相同的结果。

结束

相关推荐