Vamos a ver cómo crear una página de opciones en el admin de WordPress facilmente con el plugin ACF (Advanced Custom Fields)

Lo primero que necesitamos es crear la sección en el admin, para posteriormente añadirle los campos que necesitemos.

En el codex de WordPress podemos encontrar la función add_menu_page que nos permite crear una sección en su admin, permitiéndonos un control más avanzado de ella, pero en el caso que nos ocupa, usaremos la API del plugin Advanced Custom Fields (ACF).

Según la documentación oficial del plugin, disponemos de la función acf_add_options_page para ello:

if( function_exists('acf_add_options_page') ) {		
    acf_add_options_page(array(
        'page_title' 	=> 'My Options',
        'menu_title'	=> 'My Options',
        'menu_slug' 	=> 'my-options-page',
        'capability'	=> 'edit_posts',
        'redirect'	=> false
    ));
}

En gist he creado un plugin simple con esta funcionalidad, así no vamos «ensuciando» nuestro functions.php, lo tenéis disponible aquí.

Una vez tenemos disponible nuestra sección de opciones, pasaremos a añadirle campos personalizados con la interfaz de diseño que nos ofrece ACF.

Cuando creamos un grupo de campos, simplemente tenemos que indicar que los ubique en la página de opciones que hemos creado (en este caso, la hemos llamado ‘Festivos’).

Ahora si que tenemos ya nuestra página de opciones 100% disponible para su uso.

¿Y cómo se accede al valor de dichas opciones?

ACF en su afán de hacernos la vida muy fácil, nos permite usar la función get_field para ello.

En este caso en concreto, dicha función deberemos usarla con el segundo parámetro con el valor ‘option’ (siempre ‘option’, independiente de como se llame nuestra sección). En la página de documentación oficial podemos entrar más información.

Si necesitamos obtener el valor del campo creado, por ejmplo, ‘titulo_festivo’:

$variable = get_field('titulo_festivo', 'option');

Un ejemplo de uso, para cuando tenemos un repeater en la página de opciones creada, podría ser:

$dias = array();
if( have_rows('festivos', 'option') ) {
    while( have_rows('festivos', 'option') ) {
        the_row();
        $dias[] = get_sub_field('festivo');
    }
}

Y con estos sencillos pasos, podemos disponer de páginas de opciones tan avanzadas como queramos, sin complicarnos en complejas codificaciones.