Cómo autorrellenar un campo select de Advanced Custom Fields con datos de una página de opciones

Te pongo en situación.

Tenemos un campo de tipo «Select» en un grupo de ACF pero, por el motivo que sea, no disponemos de los datos o diferentes opciones que podrá seleccionar el usuario en ese campo. Normalmente, en una caso «normal», rellenaríamos las opciones del campo «select» directamente desde la edición del campo de ACF pero puede darse el caso de que esos valores u opciones no las tengamos a nuestra disposición en el momento de crear el campo «select» sino que pueden ser valores que dependan de alguna otra opción o que incluso los estemos calculando o recogiendo de otros sitios o campos. No se si me explico bien… Espero que me entiendas.

Una opción para poder hacer esto puede ser utilizar un campo de una página de opciones. Éste campo es posible que lo rellenemos «a mano» pero también es posible que lo hagamos a través de alguna función, etc…

Bueno, voy a comentar esta opción. Autorrellenaremos el campo «select» con los datos de un campo de tipo «texarea» que tenemos en una página de opciones.

Por el momento he creado una página de opciones bien sencilla con el siguiente código:

add_action('acf/init', 'oaf_otra_pagina_opciones');
function oaf_otra_pagina_opciones() {

	// Comprobar si existe la función acf_add_options_page
	if( function_exists('acf_add_options_page') ) {

			acf_add_options_page(array(
				'page_title'    	=> 'Opciones',
				'menu_title'    	=> 'Opciones',
				'menu_slug'     	=> 'opciones',
				'capability'    	=> 'edit_posts',
				'update_button' 	=> 'Actualizar',
				'updated_message' => 'Las opciones se han guardado',
				'redirect'      	=> false
			));

	}
}

Y posteriormente he creado un grupo de campos con un campo de tipo «select». He asignado este grupo de campos a la página de opciones que acabo de crear así:

Cómo autorrellenar un campo select de Advanced Custom Fields

Y para que quede claro, el campo no tiene ningún valor asignado:

Cómo autorrellenar un campo select de Advanced Custom Fields

Ahora sólo faltaría disponer y tener a mano la información del misterioso campo «Select» del que tanto estoy hablando. Por ejemplo, pongamos:

Cómo autorrellenar un campo select de Advanced Custom Fields

Ya vemos que no tiene ninguna opción establecida.

Ahora vamos al lío…

En el «texarea» de la página de opciones voy a añadir algunas opciones de esta manera:

Cómo autorrellenar un campo select de Advanced Custom Fields

Si, ya se. Nada de original. Es lo que hay, que hay prisa…

Ahora es cuando viene lo bueno, lo interesante. El código que hará esta magia por nosotros.

Antes de mostrar los resultados de este código, aluna puntualización:

Utilizamos el filtro «acf/load_field» que, en resumen, se lanza cuando se cargan los campos. Podemos utilizarlo sin más para que se ejecute algo cada vez que se cargue un campo, cualquier campo pero lo más lógico es limitarlo a un campo en concreto, un tipo de campo, etc…

A continuación, algunas opciones:

  • acf/load_field => Se aplica a todos los campos
  • acf/load_field/type={$type} => Se aplica a todos los ficheros de un tipo específico
  • acf/load_field/name={$name} => Se aplica a los campos con un nombre específico
  • acf/load_field/key={$key} => Se aplica a los campos con una clave específica

Como puedes ver, hay muchas opciones y variantes que podemos emplear.

Como decía, en este filtro ejecutamos una función que lo que hace es recoger las líneas del campo textarea que tenemos en la página de opciones, convertirlo en array y devolver este array para que el filtro haga la magia.

Con esto que he hecho, podemos ver que, efectivamente se autorellena el campo select que queremos.

Cómo autorrellenar un campo select de Advanced Custom Fields

Y no solo eso sino que, cuando se cambie el contenido del campo textarea de la página de opciones, al cargar el campo select, se actualizarán las opciones automaticamente ya que se alimenta del contenido de ese campo:

Cómo autorrellenar un campo select de Advanced Custom Fields

Y, el resultado:

Cómo autorrellenar un campo select de Advanced Custom Fields

Mola, ¿verdad?

Pues a partir de aquí, lo que te apetezca. Que te parecería que en lugar de tomar los campos de un textarea de la página de opciones, lo tomara de todas las opciones de un campo de otro grupo de ACF? ahí te lo dejo porque es interesante y divertido. Si te interesa esto último, me dices y saco un rato para hacer otro tutorial.

Espero que este tutorial te sea de utilidad y que te anime a seguir profundizando en el desarrollo tanto con ACF como con WordPress.

Nos vemos en otra ocasión

2 comentarios en «Cómo autorrellenar un campo select de Advanced Custom Fields con datos de una página de opciones»

  1. Muy buena funcionalidad. Llegué a esto con otro requerimiento, que no logro dar con la solución. Estoy queriendo lograr que un custom field se rellene automáticamente luego de seleccionar una opción de un custom field, por ejemplo, seleccionando el nombre de una empresa y que su dirección se cargue automáticamente luego de almacenarla en algún lado.

    ¿Alguna vez se te presentó una situación así?

    Mil gracias.
    Nahuel.

  2. hOLA oSCAR, ME GUSTARIA PODER aplicar este concepto a la creacion de paginas de aterrizajes con advanced custom fields, podrias ayuranos mas con este tema? ya que se podria dejar como tu mismo dices, los campos de diferente naturaleza cpn autorrellenado. ejemplo, con los contenidos de texto, las imagenes los videos, campos de email y de URLs, seria interesante un tutorial asi. Como por ejemplo este de Metabox.io https://metabox.io/create-landing-pages-in-wordpress/ sera Genial. Muchas gracias por al apertura a compartir tu conocimiento.

Los comentarios están cerrados.