私は特定のグループからすべてのフィールドを取得するためにこのコードを使っています:
<?php
$GroupOrPostSlug = 'acf_specialgroup';
//or insert the ID of your fields Group.
$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'];
}
}
?>
しかし、それはフィールドの名前だけを表示します。このような単純なフック/関数は存在しません。get_all_fields_from_group($id)
あなたの投稿を本当にありがとう、私は彼らのグループによってどのようにフィールド名を得るかを理解するために半日を費やしました。
フィールド名がある場合は、それらの値を簡単に取得できます。get_field($ field ['name']);
スライダーの画像を取得する方法の例
<?php
//or insert the ID of your fields Group.
$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']."'/>";
}
}
?>
再度、感謝します!
これは私がグループのフィールドを取得するために作成した関数です:
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;
}
ACFはグループとしてタイプ 'acf'のカスタム投稿を使用するので、グループのIDを取得するためにget_page_by_titleを使用して、残りを実行できます。これは小さな効用関数です:
// This was tested with 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_'); // acf fields all start with "field_"
if($acf_meta_key) $acf_fields[] = get_field_object($key);
}
return $acf_fields; // returns an array of field objects
}
使用法:
$group_fields = get_group_fields('My marvelous group');
foreach($group_fields as $field){
$label = $field['label'];
$value = $field['value'];
// etc...
}
私がやったように誰かがこのページに出くわしてこれを見つけようとした場合、postmetaの代わりにpostを使っているのでこれらの方法はAdvanced Custom Fieldsのバージョン5以降ではもううまくいきません。
その環境では、これは私がグループからフィールドを取得し、選択フィールドの値としてそれらを使用することができた方法です:
function acf_load_select_choices( $field ) {
global $wpdb;
$group_slug = 'Name or slug of the group';
$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);
// to see what $fields contains, use:
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');
誰かがまだ探しているなら。あなたはちょうどこれのようにそれをすることができます:
<?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>';
}
}
?>