Skip to content

Instantly share code, notes, and snippets.

@FullStackAlex
Forked from mcguffin/acf-get-field-key.php
Created November 1, 2018 09:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save FullStackAlex/b5e2afb1388afee5f87164ff58c6b504 to your computer and use it in GitHub Desktop.
Save FullStackAlex/b5e2afb1388afee5f87164ff58c6b504 to your computer and use it in GitHub Desktop.
WordPress Advanced Custom Fields get field key from field name
<?php
/**
* Get field key for field name.
* Will return first matched acf field key for a give field name.
*
* ACF somehow requires a field key, where a sane developer would prefer a human readable field name.
* http://www.advancedcustomfields.com/resources/update_field/#field_key-vs%20field_name
*
* This function will return the field_key of a certain field.
*
* @param $field_name String ACF Field name
* @param $post_id int The post id to check.
* @return
*/
function acf_get_field_key( $field_name, $post_id ) {
global $wpdb;
$acf_fields = $wpdb->get_results( $wpdb->prepare( "SELECT ID,post_parent,post_name FROM $wpdb->posts WHERE post_excerpt=%s AND post_type=%s" , $field_name , 'acf-field' ) );
// get all fields with that name.
switch ( count( $acf_fields ) ) {
case 0: // no such field
return false;
case 1: // just one result.
return $acf_fields[0]->post_name;
}
// result is ambiguous
// get IDs of all field groups for this post
$field_groups_ids = array();
$field_groups = acf_get_field_groups( array(
'post_id' => $post_id,
) );
foreach ( $field_groups as $field_group )
$field_groups_ids[] = $field_group['ID'];
// Check if field is part of one of the field groups
// Return the first one.
foreach ( $acf_fields as $acf_field ) {
if ( in_array($acf_field->post_parent,$field_groups_ids) )
return $acf_field->post_name;
}
return false;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment