ACF - obține câmpurile dintr-un grup
Am folosit acest cod pentru a obține toate câmpurile dintr-un grup specific:
<?php
$GroupOrPostSlug = 'acf_specialgroup';
//sau inserează ID-ul Grupului de câmpuri
$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'];
}
}
?>
dar acesta afișează doar numele câmpurilor. nu există o funcție/hook simplă, ceva de genul: get_all_fields_from_group($id)

Mulțumesc foarte mult pentru articol, am petrecut o jumătate de zi să înțeleg cum să obțin numele câmpurilor pe grupuri.
Dacă aveți numele câmpurilor, puteți obține ușor valorile acestora: get_field($field['name']);
EXEMPLU DE OBTINERE A IMAGINILOR PENTRU SLIDER
<?php
//sau introduceți ID-ul grupului de câmpuri.
$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']."'/>";
}
}
?>
Mulțumesc din nou!

Sunt surprins că nimeni nu a menționat încă acf_get_fields('someGroupId')
.
/**
* acf_get_fields
*
* Returnează un array de câmpuri pentru $parent-ul dat.
*
* @date 30/09/13
* @since 5.0.0
*
* @param (int|string|array) $parent Grupul de câmpuri sau setările câmpului. Acceptă și ID-ul sau cheia grupului de câmpuri.
* @return array
*/

Iată o funcție pe care am creat-o pentru a obține câmpurile unui grup:
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;
}

În cazul în care cineva a dat peste această pagină, așa cum am făcut și eu, și a încercat să rezolve această problemă, aceste metode nu vor mai funcționa cu versiunea 5 și superioare a Advanced Custom Fields, deoarece utilizează postări în loc de postmeta.
În acest context, iată cum am reușit să obțin câmpurile dintr-un grup și să le folosesc ca valori pentru un câmp de tip select:
function acf_load_select_choices( $field ) {
global $wpdb;
$group_slug = 'Numele sau slug-ul grupului';
$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);
// pentru a vedea ce conține $fields, folosește:
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');

Deoarece ACF folosește postări personalizate de tipul 'acf' ca grupuri, putem folosi get_page_by_title pentru a prelua ID-ul grupului, apoi să facem restul. Iată o mică funcție utilitară:
// Acest cod a fost testat cu 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_'); // toate câmpurile ACF încep cu "field_"
if($acf_meta_key) $acf_fields[] = get_field_object($key);
}
return $acf_fields; // returnează un array de obiecte câmp
}
Utilizare:
$group_fields = get_group_fields('Grupul meu minunat');
foreach($group_fields as $field){
$label = $field['label'];
$value = $field['value'];
// etc...
}

Te rog să iei un minut și să explici ce se întâmplă în cod în loc să dai doar un fragment de cod.

Ei bine, este pur și simplu răspunsul la întrebarea: "cum să obții numele câmpurilor după grupul lor." Și de asemenea valorile aici; Fragmentul este destul de auto-explicativ

Minunat! Nu înțeleg de ce nu includ get_field_objects
în documentația lor!
