Agregar un campo específico en el área Custom Fields de WordPress

Visitas: 5  
Tiempo total: 0 días con 3:14:9 hrs  

En esta publicación comparto el código sobre como agregar un campo con valores específicos al área de Custom Fields que ofrece WordPress.

Objetivo

El código debe crear un formulario que almacenara valores para la página o post que se está creando. Esta área contendrá un titulo, nombre de campo y posibles valores. Estos posibles valores pueden ser listas, áreas de texto, áreas de comentario, imágenes o cualquier tipo de información.

custom field

Código

En este ejemplo se muestra un formulario con un único campo que lista las unidades académicas disponibles en una entidad de la base de datos.

add_action( 'add_meta_boxes', 'cd_meta_box_add' );

function cd_meta_box_add()
{
add_meta_box( 'listado_id', 'Selección de unidad de investigación', 'listado_id', 'page', 'normal', 'high' );
}

El código anterior se dispara antes de que WordPress cree el área de Custom Fields, llamando al método listado_id que imprimirá los ítems del formulario HTML que forma parte de la publicación que se está creando.

function listado_id( $post )
{
$values = get_post_custom( $post->ID );
$selected = $values['listado_id'][0] ;
wp_nonce_field( 'my_meta_box_nonce', 'meta_box_nonce' );
?>
<p>
<label for="listado_id_select">Seleccionar:</label>
<select name="listado_id" id="listado_id">
<option value="0" <?php if($selected=="0") echo 'selected';?> >Ninguna</option>
<option value="1" >Lorem</option>
<option value="2" >Ipsum</option>
<option value="3" >Olem</option>
</select>
</p>
<?php 
}

El método anterior, agrega el ítem del formulario HTML, la primera línea significa que se obtienen los Custom Fields almacenados para la publicación actual, la variable $selected es el Custom Field que almacenara el ítem que estamos creando, esto permite seleccionarlo o escribirlo por defecto una vez el usuario final este editando la publicación. Recordamos que al llamar a este método a través de add_meta_box, indicamos que funcionara únicamente para páginas y no posts.

Si por ejemplo necesitamos consultar una tabla de la base de datos de WordPress, utilizamos el siguiente código, imprimiendo el resultado como una lista HTML:

echo '<select name="listado_id" id="listado_id">';
global $wpdb;
$query = "SELECT id, nombre FROM universidad ";
$results = $wpdb->get_results($query);
foreach($results as $result){
$add="";
if($selected==$result->id) $add='selected';
echo '<option value="'.$result->id.'" '.$add.' >'.$result->nombre.'</option>';
}
echo '</select>';

Almacenando la información

El método que hemos creado se llama listado_id, y el nombre del ítem del formulario se llama de la misma manera: listado_id, una vez tenemos esto en cuenta, agregamos el disparador cd_meta_box_save, que se llama cuando el usuario está publicando o editando el formulario de la pagina.

add_action( 'save_post', 'cd_meta_box_save' );

function cd_meta_box_save( $post_id )
{
if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
if( !isset( $_POST['meta_box_nonce'] ) || !wp_verify_nonce( $_POST['meta_box_nonce'], 'my_meta_box_nonce' ) ) return;
if( !current_user_can( 'edit_post' ) ) return;
update_post_meta( $post_id, 'listado_id', $_POST['listado_id'] );
}

En el método listado_id recordamos que agregamos la línea:

wp_nonce_field( 'my_meta_box_nonce', 'meta_box_nonce' );

Que lo único que hace es agregar un valor escondido al formulario con nombre meta_box_nonce que nos permite saber si la información que se está actualizando contiene nuestro ítem. Si esto es cierto, observamos la última línea:

update_post_meta( $post_id, 'listado_id', $_POST['listado_id'] );

Que como habíamos mencionado, guarda el item con nombre listado_id como Custom Field utilizando el ID de la publicación actual.


Para recibir boletines de información, por favor escribe tu correo electrónico:

Por favor ingrese un correo electrónico valido.
Registrado correctamente!