ACF - obtener campos de un grupo
He estado usando este código para obtener todos los campos de un grupo específico:
<?php
$GroupOrPostSlug = 'acf_specialgroup';
//o inserta el ID de tu grupo de campos
$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'];
}
}
?>
pero solo muestra los nombres de los campos. ¿No existe un gancho/función simple, algo como esto: get_all_fields_from_group($id)
?

¡Muchas gracias por tu publicación! Pasé medio día intentando averiguar cómo obtener los nombres de los campos por su grupo.
Si tienes los nombres de los campos, puedes obtener fácilmente sus valores: get_field($field['name']);
EJEMPLO DE CÓMO OBTENER IMÁGENES PARA UN SLIDER
<?php
//o inserta el ID de tu grupo de campos.
$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']."'/>";
}
}
?>
¡Gracias de nuevo!

Me sorprende que nadie haya mencionado acf_get_fields('someGroupId')
aún.
/**
* acf_get_fields
*
* Devuelve un array de campos para el $parent dado.
*
* @date 30/09/13
* @since 5.0.0
*
* @param (int|string|array) $parent El grupo de campos o configuración de campos. También acepta el ID o clave del grupo de campos.
* @return array
*/

Aquí hay una función que creé para obtener los campos de un grupo:
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;
}

En caso de que alguien llegara a esta página como me pasó a mí, intentando resolver esto, estos métodos ya no funcionarán con la versión 5 y superiores de Advanced Custom Fields, ya que utiliza posts en lugar de postmeta.
En ese entorno, esta es la forma en que pude obtener campos de un grupo y usarlos como valores para un campo de selección:
function acf_load_select_choices( $field ) {
global $wpdb;
$group_slug = 'Nombre o slug del grupo';
$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);
// para ver qué 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');

Dado que ACF utiliza posts personalizados de tipo 'acf' como grupos, podemos usar get_page_by_title para obtener el ID del grupo, y luego hacer el resto. Aquí una pequeña función utilitaria:
// Esto fue probado con ACF versión 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_'); // los campos de acf comienzan con "field_"
if($acf_meta_key) $acf_fields[] = get_field_object($key);
}
return $acf_fields; // retorna un array de objetos de campo
}
Uso:
$group_fields = get_group_fields('Mi maravilloso grupo');
foreach($group_fields as $field){
$label = $field['label'];
$value = $field['value'];
// etc...
}

Si alguien todavía está buscando. Puedes hacerlo simplemente así:
<?php
$fields = get_field_objects();
if( $fields )
{
foreach( $fields as $field_name => $field )
{
echo '<div>';
echo '<h3>' . $field['label'] . '</h3>';
echo $field['value'];
echo '</div>';
}
}
?>

Por favor, tómate un minuto y explica qué está pasando en el código en lugar de simplemente compartir un fragmento.

Bueno, se trata básicamente de la respuesta a la pregunta: "cómo obtener los nombres de los campos por su grupo." Y también incluye los valores aquí; El fragmento es bastante autoexplicativo

¡Increíble! No sé por qué no incluyen get_field_objects
en su documentación.
