ACF - 获取页面或帖子的所有字段(包括子字段)

时间:2017-08-01 12:16:42

标签: php wordpress advanced-custom-fields

我使用ACF专业版和搜索循环我需要将页面或帖子的所有字段(包括子字段(repeaterfield))放入数组进行处理,这样我就可以从数组中提取“name”和“value”等数据-objects。

我在尝试“get_field_objects(mypageid);”这似乎很整洁,但它只获得了第一级的领域。我也需要获得子字段。

我环顾四周,现在似乎没有任何开箱即用的ACF,但获得这些数据的最佳方法是什么?特别是因为每个子场都可以有自己的子场。我无法绕过循环函数。有没有人写过这样的循环?

非常感谢任何帮助!

提前致谢, ANB_Seth

2 个答案:

答案 0 :(得分:0)

如何获取ACF转发器字段?

在页面中添加以下代码或发布

示例:

主要ACF文件名:homepage_slider

子字段名称:slider_title,slider_description

<?php 
    if( have_rows('homepage_slider') ):
        // loop through the rows of data
        while ( have_rows('homepage_slider') ) : the_row(); 
?>
        <h3><?php the_sub_field('slider_title'); ?></h3>
        <p><?php the_sub_field('slider_description'); ?></p>
<?php
        endwhile;       
    else :      
        // no rows found        
    endif;
?>

答案 1 :(得分:0)

好的,所以我一直在努力研究这些似乎可以解决问题的方法:

function abGetAllFields($pro_num){
    $tmpArr = get_field_objects($pro_num);
    $fillArray = array();
    foreach( $tmpArr as $tmpFieldObject ) {
        $fillArray = abGetAllFieldsCycle($fillArray, $tmpFieldObject["name"], $tmpFieldObject["value"]);
    }
    return $fillArray;
}

function abGetAllFieldsCycle($fillArray, $name, $value) {
    if (is_array($value)) {
        foreach( $value as $key => $value ) {
            $fillArray = abGetAllFieldsCycle($fillArray, $key, $value);
        }
    } else {
        array_push($fillArray, [$name, $value]);
    }
    return $fillArray;
}

$myFieldArray = abGetAllFields($pageId);

可能有一种更好或更简单的方法,但是哎呀,它做了我需要的,所以我会在那里停下来,以为我分享我的结果: - )