ACF - получение полей из группы
Я использовал следующий код для получения всех полей из определенной группы:
<?php
$GroupOrPostSlug = 'acf_specialgroup';
//или вставьте ID вашей группы полей
$groupID='';
global $wpdb;
if (empty($groupID))
{$groupID = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_name = '$GroupOrPostSlug' ");}
if (empty($groupID))
{$groupID = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_title = '$GroupOrPostSlug' ");}
$custom_field_keys = get_post_custom_keys($groupID);
foreach ( $custom_field_keys as $key => $fieldkey )
{
if (stristr($fieldkey,'field_'))
{
//echo $key . " => " . $fieldkey . "<br />";
//echo $field['label'] . ': ' . $field['value'];
//echo $fieldkey . "<br />";
$field = get_field_object($fieldkey, $groupID);
echo $field['label'];
}
}
?>
но он отображает только названия полей. Не существует ли простой хук/функция, что-то вроде: get_all_fields_from_group($id)

Большое спасибо за ваш пост, я потратил полдня, чтобы разобраться, как получить названия полей по их группе.
Если у вас есть названия полей, вы легко можете получить их значения: get_field($field['name']);
ПРИМЕР ПОЛУЧЕНИЯ ИЗОБРАЖЕНИЙ ДЛЯ СЛАЙДЕРА
<?php
//или вставьте ID вашей группы полей.
$groupID='116';
$custom_field_keys = get_post_custom_keys($groupID);
foreach ( $custom_field_keys as $key => $fieldkey )
{
if (stristr($fieldkey,'field_'))
{
//echo $key . " => " . $fieldkey . "<br />";
//echo $field['label'] . ': ' . $field['value'];
//echo $fieldkey . "<br />";
$field = get_field_object($fieldkey, $groupID);
$acf_field_name = $field['name'];
$attachment = get_field($acf_field_name);
echo "<img src='".$attachment['url']."' title='".$attachment['title']."'/>";
}
}
?>
Ещё раз спасибо!

Удивительно, что никто еще не упомянул acf_get_fields('someGroupId')
.
/**
* acf_get_fields
*
* Возвращает массив полей для указанного $parent.
*
* @date 30/09/13
* @since 5.0.0
*
* @param (int|string|array) $parent Настройки группы полей или полей. Также принимает ID или ключ группы полей.
* @return array
*/

Вот функция, которую я создал для получения полей группы:
function my_acf_get_fields_in_group( $group_id ) {
$acf_meta = get_post_custom( $group_id );
$acf_fields = array();
foreach ( $acf_meta as $key => $val ) {
if ( preg_match( "/^field_/", $key ) ) {
$acf_fields[$key] = $val;
}
}
return $acf_fields;
}

Если кто-то, как и я, наткнулся на эту страницу и пытался разобраться, то эти методы больше не работают с версией 5 и выше Advanced Custom Fields, так как теперь используются записи (posts) вместо postmeta.
В такой среде вот способ, который позволил мне получить поля из группы и использовать их как значения для поля выбора (select):
function acf_load_select_choices( $field ) {
global $wpdb;
$group_slug = 'Название или ярлык группы';
$group_ID = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_name = '$group_slug' ");
if (empty($group_ID))
$group_ID = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_title = '$group_slug' ");
$field['choices'] = array();
$fields = acf_get_fields_by_id($group_ID);
// чтобы увидеть, что содержит $fields, используйте:
echo '<pre>'.var_dump($fields).'</pre>';
if( $fields ) {
foreach( $fields as $fieldrow ) {
$field['choices'][ $fieldrow['name'] ] = $fieldrow['label'];
}
}
return $field;
}
add_filter('acf/load_field/name=selectfieldname', 'acf_load_select_choices');

Поскольку ACF использует пользовательские записи типа 'acf' для групп, мы можем использовать get_page_by_title для получения ID группы, а затем выполнить остальные действия. Вот небольшая вспомогательная функция:
// Тестировалось с ACF free edition v4.4.11
function get_group_fields($group_name){
$group = get_page_by_title($group_name, OBJECT, 'acf');
if(empty($group)) return false;
$meta = get_post_meta($group->ID);
$acf_fields = array();
foreach($meta as $key => $value){
$acf_meta_key = stristr($key,'field_'); // все поля ACF начинаются с "field_"
if($acf_meta_key) $acf_fields[] = get_field_object($key);
}
return $acf_fields; // возвращает массив объектов полей
}
Использование:
$group_fields = get_group_fields('Моя замечательная группа');
foreach($group_fields as $field){
$label = $field['label'];
$value = $field['value'];
// и т.д...
}

Если кто-то все еще ищет решение. Вы можете сделать это следующим образом:
<?php
// Получаем все объекты полей ACF
$fields = get_field_objects();
// Проверяем, есть ли поля
if( $fields )
{
// Проходимся по каждому полю
foreach( $fields as $field_name => $field )
{
echo '<div>';
echo '<h3>' . $field['label'] . '</h3>'; // Выводим заголовок поля
echo $field['value']; // Выводим значение поля
echo '</div>';
}
}
?>

Пожалуйста, уделите минуту и объясните, что происходит в коде, вместо того чтобы просто скидывать фрагмент кода.

Ну, это практически ответ на вопрос: "как получить названия полей по их группе." А также значения здесь; Фрагмент кода достаточно самодостаточен

Потрясающе! Не понимаю, почему они не включают get_field_objects
в свою документацию!
