ACF - ottenere i campi da un gruppo
Ho utilizzato questo codice per ottenere tutti i campi da un gruppo specifico:
<?php
$GroupOrPostSlug = 'acf_specialgroup';
//oppure inserisci l'ID del tuo gruppo di campi
$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'];
}
}
?>
ma visualizza solo i nomi dei campi. Non esiste una funzione/hook più semplice, qualcosa del tipo: get_all_fields_from_group($id)

Grazie mille per il tuo post, ho passato mezza giornata a cercare di capire come ottenere i nomi dei campi in base al loro gruppo.
Se hai i nomi dei campi, puoi facilmente ottenere i loro valori: get_field($field['name']);
ESEMPIO SU COME OTTENERE IMMAGINI PER UNO SLIDER
<?php
//o inserisci l'ID del tuo gruppo di campi.
$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']."'/>";
}
}
?>
Grazie ancora!

Mi sorprende che nessuno abbia ancora menzionato acf_get_fields('someGroupId')
.
/**
* acf_get_fields
*
* Restituisce un array di campi per il dato $parent.
*
* @date 30/09/13
* @since 5.0.0
*
* @param (int|string|array) $parent Il gruppo di campi o le impostazioni del campo. Accetta anche l'ID o la chiave del gruppo di campi.
* @return array
*/

Ecco una funzione che ho creato per ottenere i campi di un gruppo:
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;
}

Nel caso qualcuno si imbattesse in questa pagina come è successo a me, e stesse cercando di capire come fare, questi metodi non funzionano più dalla versione 5 in poi di Advanced Custom Fields in quanto utilizza post invece di postmeta.
In questo contesto, questo è il modo in cui sono riuscito a ottenere i campi da un gruppo e usarli come valori per un campo select:
function acf_load_select_choices( $field ) {
global $wpdb;
$group_slug = 'Nome o slug del gruppo';
$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);
// per vedere cosa contiene $fields, usa:
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');

Dato che ACF utilizza post personalizzati di tipo 'acf' come gruppi, possiamo usare get_page_by_title per recuperare l'ID del gruppo, e poi fare il resto. Ecco una piccola funzione di utilità:
// Questo è stato testato con ACF versione gratuita 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_'); // i campi acf iniziano tutti con "field_"
if($acf_meta_key) $acf_fields[] = get_field_object($key);
}
return $acf_fields; // restituisce un array di oggetti campo
}
Utilizzo:
$group_fields = get_group_fields('Il mio meraviglioso gruppo');
foreach($group_fields as $field){
$label = $field['label'];
$value = $field['value'];
// ecc...
}

Se qualcuno sta ancora cercando una soluzione, puoi farlo semplicemente così:
<?php
// Ottieni tutti i campi personalizzati
$fields = get_field_objects();
// Verifica se ci sono campi
if( $fields )
{
// Cicla attraverso ogni campo
foreach( $fields as $field_name => $field )
{
echo '<div>';
echo '<h3>' . $field['label'] . '</h3>'; // Mostra l'etichetta del campo
echo $field['value']; // Mostra il valore del campo
echo '</div>';
}
}
?>

Per favore, prenditi un minuto e spiega cosa sta succedendo nel codice invece di incollare solo uno snippet di codice.

Beh, si tratta semplicemente della risposta alla domanda: "come ottenere i nomi dei campi in base al loro gruppo." E anche i valori qui presenti; Lo snippet è abbastanza autoesplicativo

Fantastico! Non so perché non includano get_field_objects
nella loro documentazione!
