ACF - obtener campos de un grupo

9 abr 2013, 12:36:33
Vistas: 40.1K
Votos: 7

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)?

0
Todas las respuestas a la pregunta 6
2
10

¡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!

10 jul 2013 18:47:29
Comentarios

Solo una nota sobre por qué esto funciona: ACF utiliza tipos de posts personalizados nativos de WordPress y valores meta ("custom posts") :)

jave.web jave.web
19 jun 2016 03:10:35

Esto es muy complicado; mira la respuesta de Lucas para una función ya proporcionada por ACF

jla jla
12 feb 2022 10:28:04
1

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
 */
2 oct 2021 01:08:24
Comentarios

Gracias por eso. Me preguntaba por qué todas las otras respuestas son tan complejas en comparación con acf_get_fields

CodeBrauer CodeBrauer
13 oct 2021 13:00:25
0

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;
}
9 oct 2013 19:02:13
1

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');
25 may 2015 19:44:14
Comentarios

acf_get_fields_by_id fue desaprobado en favor del nuevo acf_get_fields()

jave.web jave.web
24 feb 2021 17:04:49
0

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...
}
31 jul 2017 12:33:20
4

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>';
        }
      }
?>
31 oct 2017 20:06:57
Comentarios

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

user9447 user9447
31 oct 2017 20:20:19

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

Artemiy Egorov Artemiy Egorov
12 dic 2017 12:47:35

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

Protector one Protector one
25 mar 2019 19:42:30

¿Y cómo obtendríamos el nombre de un cierto grupo de campos en lugar de todos?

Johan Johan
1 oct 2021 22:11:21