循环访问多个自定义字段,且数量不断增加

时间:2014-11-24 作者:jenseo

我有一个自定义字段的问题,我一直在努力解决一段时间,但没有运气。

我正在构建的网站上有一个部分,让用户从前端发布内容。用户内容存储在帖子附加的几个自定义字段中。到目前为止一切正常。

我的问题是找出获取此内容的最佳方法。

用户发布的帖子被分成小块,例如,他们可以添加图像、文本或视频。

每个信息的自定义字段都是这样创建的:

custom_text
custom_text1
custom_text2

custom_image
custom_image1
custom_image2

custom_video
custom_video1
custom_video2
。。。等等

问题是,我永远无法确定用户决定向其帖子中添加什么,每个帖子的自定义字段将如下所示:

custom_image
custom_text1
custom_image2
custom_video3
custom_text4
必须以这种方式保存,以便进行排序。内容需要按照用户在创建帖子时选择的顺序显示。

因此,我需要的是一个高级自定义字段循环,该循环遍历这些自定义字段,并相应地显示内容。

类似于:

php start loop
counter = 0

if custom_text (display custom_text)
else if custom_image (display custom_image)
else if custom_video (display custom_video)

counter++;
end loop
我在想,计数器可以每次增加一个,然后对数字1、2、3等再次循环。

我们不知道将创建多少字段,但最多有40个块,因此最后一个数字是39。

我做了很多实验,但还没有找到解决方案。

也许有人能给我指出正确的方向?

谢谢

//詹斯。

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

您需要在循环中通过计数器进行循环,对于每个值,检查每个键是否存在,并附加当前计数器值。

// max custom field index
$number = 40;
// the counter
$counter = \'\';
// the meta keys to check for
$keys = array(
    \'custom_text\',
    \'custom_image\',
    \'custom_video\'
);
// all our custom field values
$custom_fields = get_post_custom( get_the_ID() );

// loop over our counter
while( $counter < $number ){
    // loop over each of the keys
    foreach( $keys as $key ){
        // check if a custom field with key + counter exists
        if( isset( $custom_fields[ $key . $counter ] ) ){
            // output the field
            // values will be in an array, 0 is the first index.
            // you can loop over these as well if you have multiple values.
            echo $custom_fields[ $key . $counter ][0];
        }
    }
    // increment the counter
    $counter++;
}

结束