Cómo completar dinámicamente la configuración avanzada de campos personalizados
Con algo de código PHP, es realmente fácil completar dinámicamente un valor o una opción de Campos personalizados avanzados (ACF). Puede hacer esto para cualquier tipo de entrada, incluidas las opciones de radio, casillas de verificación y similares. En este post veremos cómo.
El filtro
Advanced Custom Fields ofrece un filtro llamado [acf/load_field](https://www.advancedcustomfields.com/resources/acf-load_field/). Puede utilizar este filtro de varias maneras diferentes. O filtre acf/load_fieldpara aplicarlo a todo tipo de campos o incluya código dentro de su función enganchada para averiguar qué tipo de campo o nombre desea. O puede especificar el tipo de campo (acf/load_field/type=<type>), el nombre (acf/load_field/name=<name>) o la clave (acf/load_field/key=<key>).
Supongamos que creamos un campo de texto así:
Podríamos apuntar a esto por acf/load_field/name=dyn_pop_example(se dirige solo a este campo específico), acf/load_field/type=text(se aplica a todos los campos de tipo texto) o acf/load_field(se aplica a todos los campos de cualquier tipo o nombre). Al usar los dos últimos filtros, por supuesto, puede dirigirse dentro de la función por información de campo específica, como el nombre. Cada campo en ACF también tiene una clave única, pero están ocultos y son principalmente para uso interno de ACF.
El filtro proporciona una variable; la matriz de campo. Esta matriz le brinda toda la información sobre el campo actual. Lo que hace es simplemente cambiar la información en la matriz y devolver la matriz de campo modificada. Según el tipo de campo, los elementos de la matriz difieren. Por ejemplo, los tipos de campos de opción múltiple como select y radioboxes tendrán un elemento de matriz ‘ choices‘ que los campos de, por ejemplo, tipo de texto no tendrán. Le recomiendo que haga una var_dump()de las matrices proporcionadas para ver a qué tipo de información tiene acceso.
¡Empecemos a investigar un código real!
Población: ejemplos simples
Establecer el valor predeterminado de una entrada de texto se vería así:
add_filter('acf/load_field/name=dyn_pop_example', function($field) {
$field['default_value'] = __('This is default value', 'txtdomain');
return $field;
});
Dirigimos nuestra entrada de texto con el nombre dyn_pop_exampley establecemos su valor predeterminado (tecla ‘ default_value‘) en una cadena de nuestra elección. El campo se mostrará así:
Puede modificar cualquier configuración del campo. En el siguiente ejemplo, configuramos el marcador de posición del texto y las instrucciones:
add_filter('acf/load_field/name=dyn_pop_example', function($field) {
$field['placeholder'] = __('Type in here', 'txtdomain');
$field['instructions'] = __('Some instructions coming from code', 'txtdomain');
return $field;
});
Lo que hará que el campo se muestre así:
Completar opciones
Si desea completar dinámicamente las opciones de un campo de selección, opción o casilla de verificación, hágalo en el elemento de clave de matriz ‘ choices‘. Este choiceselemento ‘ ‘ se aplica a todos los campos de tipo select, radio y checkbox.
El choiceselemento ‘ ‘ debe ser una matriz de pares clave + valor. Las claves son los valores (que se guardarán) y los valores son la etiqueta que aparece como opción.
Supongamos que cambiamos nuestro campo a una selección. Puede dejar las opciones vacías, ya que se establecerán a través de nuestro código.
Para completar las opciones de selección, lo hacemos así:
add_filter('acf/load_field/name=dyn_pop_example', function($field) {
$choices = [
'red' => __('Red Color', 'txtdomain'),
'blue' => __('Blue Color', 'txtdomain'),
'green' => __('Green Color', 'txtdomain')
];
$field['choices'] = $choices;
$field['default_value'] = 'blue';
return $field;
});
En línea #2 - #6simplemente definimos una matriz de opciones. Modifique esto a sus necesidades. En línea #7asignamos las opciones del campo a nuestra matriz. Por si acaso, también establecemos el valor predeterminado del campo. Esto no es necesario: sin la línea, #8la selección simplemente elegiría automáticamente la primera opción en la matriz (‘roja’).
El código anterior representará el campo así:
Las opciones dependen de usted, todo lo que debe cuidar es proporcionar una matriz adecuada de clave + valor para el choiceselemento ‘ ‘ del campo. Como ejemplo básico, este ejemplo de código muestra cómo puede convertir un campo de selección normal en una selección de publicaciones.
add_filter('acf/load_field/name=dyn_pop_example', function($field) {
$posts = new WP_Query([
'post_type' => 'page',
'posts_per_page' => -1
]);
$choices = [];
while ($posts->have_posts()) {
$posts->the_post();
$choices[get_the_ID()] = get_the_title();
}
wp_reset_query();
$field['choices'] = $choices;
return $field;
});
El ejemplo de código anterior hace una consulta de publicación que busca todas las páginas y completa la matriz de elección con ID de publicación como claves y títulos de publicación como valores. Esto es solo como un ejemplo; si va a elegir publicaciones, ACF ofrece otros tipos de campos específicamente para esto.




