ACF - obține câmpurile dintr-un grup

9 apr. 2013, 12:36:33
Vizualizări: 40.1K
Voturi: 7

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)

0
Toate răspunsurile la întrebare 6
2
10

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!

10 iul. 2013 18:47:29
Comentarii

Doar o notă despre de ce funcționează: ACF folosește tipuri personalizate de postări și valori meta native WordPress ("post customs") :)

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

Aceasta este foarte complicat; vezi răspunsul de la Lucas pentru o funcție deja furnizată de ACF

jla jla
12 feb. 2022 10:28:04
1

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

Mulțumesc pentru asta. Mă întrebam de ce toate celelalte răspunsuri sunt atât de complexe în comparație cu acf_get_fields

CodeBrauer CodeBrauer
13 oct. 2021 13:00:25
0

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

Î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');
25 mai 2015 19:44:14
Comentarii

acf_get_fields_by_id a fost învechit în favoarea noului acf_get_fields()

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

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

Dacă cineva încă caută. Poți să faci asta în felul următor:

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

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

user9447 user9447
31 oct. 2017 20:20:19

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

Artemiy Egorov Artemiy Egorov
12 dec. 2017 12:47:35

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

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

Și cum am putea obține numele unui anumit grup de câmpuri în loc de toate?

Johan Johan
1 oct. 2021 22:11:21