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;" /> &euro;';
}

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.

field
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.

Autor
Escrito por Jose Aguilar - Director ejecutivo y tecnológico en JA Modules. Experto programador PrestaShop y Experto programador WordPress.
Te ha servido? Valora esta entrada!
(8 votos, promedio: 5 de 5)
Comparte en las redes sociales
¿Buscas trabajo de programador?

14 respuestas a “Añadir campos extras a las entradas de WordPress”

  1. Juan Carlos dice:

    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

  2. Carlos Bernal dice:

    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!

  3. Jorge dice:

    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

  4. ysidro almonte morales dice:

    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 .= »;
    }

  5. Juanjo furtado dice:

    muy buenas Jose Aguilar, estoy intentando aplicar tu código en una entrada personalizada pero no se me guarda al publicar, puedes ayudarme?

  6. vico dice:

    hola muy tengo una duda yo no lo quiero para un precio si no para agregar la url se puede?

  7. Luis dice:

    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

  8. BETO dice:

    HOLA.. disculpa como hago para agregar la caja de suscripciones de feedburner de bajo de todas las entradas..?

  9. jair dice:

    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!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.