WordPress por defecto tiene campos predeterminados (título, imagen destacada, etc ) para el contenido de las entradas y páginas, sin embargo podemos añadir información extra a través de los custom fields o campos personalizados.
1- Generalidades
Para ver la sección de campos personalizados, lo puedes hacer desde la edición o creación de una entrada o página, en la parte superior en las opciones de pantalla, tal como se muestra en la siguiente imagen.

Al habilitar los campos personalizados verás que te aparece una nueva sección en la parte inferior.

Los campos personalizados constan de dos elementos: nombre ( que vendría ha ser el key) y valor
2- Crear campos personalizados
Para crear nuevos campos personalizados simplemente llena el nombre y valor, por ejemplo supongamos que estas creando contenido para cursos, entonces tendrás que colocar información adicional de:
- Fecha de inicio
- Profesor
- Nivel
- Horas
Tu entrada con campos adicionales quedará tal como se muestra en la siguiente imagen:

Estos campos que has agregado en la entrada anterior, estarán disponibles cuando agregues o edites una nueva entrada o página, tal como se muestra en la siguiente imagen:

3- Mostrar los campos personalizados
Por defecto, estos nuevos campos que has agregado no serán visibles en el front-end de tu sitio, por lo tanto, si quieres mostrarlos, tendrás que hacer algunas modificaciones a los archivos de tu theme.
Para obtener el campo personalizado usaremos la función get_post_meta() del core de WordPress.
Por ejemplo si quieres obtener el campo personalizado de Profesor de una determinada entrada, dentro del bucle de las entradas puedes usar el siguiente código PHP:
$cf_profesor = get_post_meta( get_the_ID(), 'Profesor', true );
if ($cf_profesor){
echo "Profesor: ".$cf_profesor;
}
En el código anterior:
- Dentro de la función get_post_meta usamos tres parámetros.
- Ya que todo este código estará en el bucle, la función get_the_ID(), devuelve el ID del post actual
- El nombre del campo personalizado es case sensitive, por lo que tiene que se escrito exactamente igual a como fue definido
- Ya que los campos personalizados pueden almacenar también arrays, el valor true indica que sólo devolveremos un valor
- Luego asignamos el valor devuelto a una variable llamada $cf_profesor
- Hacemos una validación para sólo mostrar el valor de la variable si esta tiene contenido
4- Ejemplo de modificación en theme Twenty Seventeen
Si estas usando el theme Twenty Seventeen y quieres mostrar los campos personalizados en el detalle de las entrada, entonces una primera idea sería ubicar el archivo single.php
El archivo single.php tiene el bucle pero muestra el contenido de una entrada haciendo referencia al archivo : template-parts/post/content.php, entonces las modificaciones tienes que hacerlas en este último archivo.
En el archivo content.php en la línea 71 aproximadamente, dentro de la condición que usa la función is_single(), puedes agregar el siguiente código:
$cf_fechaInicio = get_post_meta( get_the_ID(), 'Fecha-Inicio', true );
$cf_nivel = get_post_meta( get_the_ID(), 'Nivel', true );
$cf_profesor = get_post_meta( get_the_ID(), 'Profesor', true );
$cf_horas = get_post_meta( get_the_ID(), 'Horas', true );
if ($cf_fechaInicio) echo "Fecha Inicio: ".$cf_fechaInicio."<br>";
if ($cf_profesor) echo "Profesor: ".$cf_profesor."<br>";
if ($cf_nivel) echo "Nivel: ".$cf_nivel."<br>";
if ($cf_horas) echo "Horas: ".$cf_horas."<br>";
El contenido de los campos personalizados te aparecerá al final de cada entrada, tal como se muestra a continuación:

Hola John¡¡
Muy bueno el post y el blog en general, que acabo de descubrir. Aunque veo que hay un nivel bastante superior a mis conocimientos acabas de ganar un fiel seguidor.
Un saludo
Hola y si quiero mostrar todos los post en una solo pagina y que me muestre todos los campos personalizados de cada post como seria el código.
Hola, en ese caso tienes que buscar el archivo .php de tu theme que lista las entradas, posiblemente sea: category.php, archive.php o index.php, puedes revisar: https://decodecms.com/jerarquia-de-archivos-de-plantilla-en-wordpress/
Buenas tardes, necesito visualizar estos campos personalizados en el escritorio, cuando visualizo todas las páginas, y poner como columna los campos personalizados y que entren dentro del criterio de búsqueda.
Hola, revisa el siguiente enlace para agregar campos adicionales al listado de entradas: https://support.advancedcustomfields.com/forums/topic/adding-acf-fields-to-post-listing-wp-adminedit-php/ , es usando el plugin ACF, pero es similar con campos personalizados de WordPress.
Muchas gracias me ha servido de mucho, ¿se puede facilitar esto con algún plugin recomendado?
Hola, podrías probar Advanced Custom Fields ( ACF) , revisa este artículo relacionado: https://decodecms.com/campos-personalizados-en-productos-de-woocommerce/
Hola, muchas gracias por compartir tus conocimientos, me ayudas con una consulta, he logrado mostrar en mis productos los campos adicionales, pero cuando ya hago una compra estos datos no llegan en mi pedido, me falta algo por hacer? si puedes ayudarme te agradezco mucho.
UN fuerte abrazo
Hola, revisa el siguiente enlace para agregar información adicional a los correos de órdenes de WooCommerce: https://docs.woocommerce.com/document/add-a-custom-field-in-an-order-to-the-emails/
Hola!
Excelente post! Pero tengo una gran inquietud. Cuando voy a “Opciones de pantalla” (como explicas en el punto N° 1- Generalidades) no encuentro la opción de “Campos personalizados”, por lo tanto no puedo habilitarla y no puedo trabajar con ellos.
Sabes por qué puede pasar esto? Cómo puedo solucionarlo?
Espero puedas ayudarme.
Desde ya muchísimas gracias.
Abrazo!
Hola, ingresa a una entrada específica, si estas usando Gutenberg posiblemente tengas que usar el icono de tres botones verticales (en la parte superior derecha), luego en opciones, en la parte final del popup en la sección de Paneles avanzados, verás que aparece para que habilites campos personalizados.
Hola,.muy práctico tu ejemplo. Ahora, si es posible, me puedes guiar para mostrar un promedio de un campo personalizado compuesto por un número. Específicamente sacar del promedio de ese campo perteneciente a varios CPT.. muchas gracias. Suerte.
Hola, de manera general, tendrías que hacer un bucle para recorrer todas las entradas y realizar el cálculo del promedio.
Sin embargo creo que lo más práctico sería que guardes el promedio de manera global en wp_options, y luego lo actualices cada vez que guardes una entrada.
Hola, muy bien artículo. ¿Si quisiera hacer esto mismo pero en la página de producto. que archivo .php debería modificar? Gracias
Hola! compañero en opciones de pantalla no me sale el “campos personalizados” solo me sale estos Product | categories | Product tags | Link Suggestions | Product image | Product gallery |Descripcion Especial | Product data | Slug | Product short description | Reviews | Rank Math SEO 🙁
Hola, si que debería aparecerte, prueba en otras instalación de WordPress verás que aparece. Tal vez tenga que ver con algún plugin que instalaste. Saludos.