Last active
June 13, 2023 13:32
-
-
Save mcguffin/81509c36a4a28d9c682e to your computer and use it in GitHub Desktop.
WordPress Advanced Custom Fields get field key from field name
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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; | |
} |
@Hollyw00d Allow me. There are few ways:
- Use get field object - if you have the exact selector, its simple
- Parse the acf-json/*.json and extract keys from there. It can done on the fly Or you may generate your own index
Hope that helps
@Mulli I used your suggestion below to add the ACF field ID (like field_63c84b9cb5f66
):
Parse the acf-json/*.json and extract keys from there. It can done on the fly Or you may generate your own index
I can't display the code here as I used it for my job but this another option to get the ACF field ID without making database calls.
Or one can simply use acf_get_reference()
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@ShinekhuuD can you please tell us an alternative if you don't think this is a good idea?