Añadir campos extras a las entradas de WordPress
Una característica interesante que trae las últimas versiones de WordPress es la posibilidad de añadir campos extras o campos personalizados a las entradas de WordPress (custom fields).
En este artículo vamos a ver como añadir un nuevo campo que aparecerá en la administración de las entradas y visible en la Web de cara al usuario donde lo situemos en la plantilla.
En el ejemplo que vamos a ilustrar vamos a añadir un campo extra para añadir un precio a los objetos o productos que serán entradas. En el archivo functions.php de la plantilla que estamos utlizando añadiremos las siguientes declaraciones:
add_action('admin_menu', 'custom_fields_price');
function custom_fields_price() {
add_meta_box('price','Precio del Objeto','fn_price','post','normal','high');
}
function fn_price() {
global $wpdb, $post;
$value = get_post_meta($post->ID, price, true);
echo '<label for="image_es">Precio</label>
<input type="text" name="price" id="price" value="'.htmlspecialchars($value).'" style="width: 100px;" /> €';
}
Obteniendo como resultado en la administración de las entradas un nuevo campo extra visualizándose de la siguiente forma por debajo de la descripción.

Para conseguir que los datos que se introduzcan en este campo se guarden en la base de datos para el post en cuestión deberemos añadir también en el archivo functions.php la siguiente declaración:
add_action('publish_post', 'save_price');
function save_price() {
global $wpdb, $post;
if (!$post_id) $post_id = $_POST['post_ID'];
if (!$post_id) return $post;
$price= $_POST['price'];
update_post_meta($post_id, 'price', $price);
}
De esta manera, cuando se pulse en el botón de publicar o actualizar se procederá también a guardar los datos que se hayan introducido en este campo.
Ahora solo faltará ver donde queremos mostrar el precio, posiblemente lo queramos mostrar en los listados de las entradas o en la entrada propia. Para añadirlo en la entrada deberemos editar el archivo single.php y añadir allí donde queramos visualizar el precio el siguiente código:
<?php $metas = get_post_meta($post->ID, 'price'); if (isset($metas[0])) echo '<h1>Precio: '.$metas[0].'</h1>'; ?>
Siguiendo este mismo procedimiento podemos añadir tantos campos como queramos.
Muchas gracias por el aporte!
Me ha sido muy útil.
Solamente comentar que en mi caso, al usar el theme hestia, he tenido que colocar la última parte del código en el archivo content-single.php
Hola José, como se podría agregar un campo para subir archivos al post como un pdf, xls, etc. Y que este se imprima en el post como un link de descarga.
Saludos!
Hola buenos días,
Para este tipo de ayudas que se salen de lo que hay en el blog debe enviarnos un ticket al centro de soporte y allí le indicaremos como podemos proceder:
https://www.jose-aguilar.com/soporte/
Saludos
Como se puede añadir vario de estos? que debo de cambiar para que no se me enreden unos con otros?
Muchas Gracias, es el mejor código que he encontrado en todo google tras buscar y buscar
Hola,
El el ejemplo estamos añadiendo un único campo, el precio. Deberás seguir los mismos pasos para cada campo que quieras agregar.
Saludos
Hola, yo quiero incluirlo en una lista de articulos, que he creado en mi index.php, y la manera en como lo estoy haciendo es travez de un shorcode..
if(have_posts()){
$content = »;
while ( have_posts() ){
the_post();
$content .= the_title(
», $metas = get_post_meta($post->ID, ‘price’).»,true);
}
$content .= »;
}
muy buenas Jose Aguilar, estoy intentando aplicar tu código en una entrada personalizada pero no se me guarda al publicar, puedes ayudarme?
hola, debe ser un error simple. quizás debes fijarte bien en los nombres de las variables y funciones. Deben cuadrar. saludos
hola muy tengo una duda yo no lo quiero para un precio si no para agregar la url se puede?
Se puede utilizar tambíen para una url si
Amigo al hacer este proceso al parece hice algo mal me sale esto:
Fatal error: Cannot redeclare custom_fields_price() (previously declared in /home/hugo84/public_html/inmomanta.com/wp-content/themes/realsite/functions.php:726) in /home/hugo84/public_html/inmomanta.com/wp-content/themes/realsite/functions.php on line 731
Ayudame con una solucion lo mas antes posible
Hola, segun el error parece que ya tienes declarada la función por algun lado. No puedes tenerla 2 veces declarada. Tienes que buscar la otra y editarla.
HOLA.. disculpa como hago para agregar la caja de suscripciones de feedburner de bajo de todas las entradas..?
Disculpa, tengo problemas ya que al hacer como dices, no muestra el resultado esperado.
En la ventana de post si muestra la casilla para ingresar texto, pero cuando pongo el codigo en el single post no muestra ya nada en la página, espero me puedas ayudar.
Saludos!