entradilla

Cómo agregar un campo personalizado debajo del título de una entrada

En ocasiones puede resultar útil agregar un campo personalizado adicional justo debajo del título de una entrada o página, por cuestiones de usabilidad y experiencia de usuario.

Por ejemplo, si tenemos entradas de tipo noticias, es interesante agregar un campo adicional a modo de «entradilla» o «subtítulo«. De este modo, podemos definir un texto concreto que luego en el front-end destacaremos con clases estilos de alguna manera para diferenciarlo del cuerpo del contenido.

Lo diferencio del extracto de WordPress, ya que de esta manera podemos usar el extracto para lo que es, es decir, en listados de noticias mostraremos el extracto con su botón leer más correspondiente. Pero a la entradilla la daremos un uso diferente, será un breve resumen destacado del contenido.

Volviendo al back-end, como comentábamos anteriormente, por cuestiones de usabilidad y experiencia de usuario, es más fácil, intuitivo y cómodo encontrarnos con éste campo personalizado debajo del campo título, justo por encima del editor de texto.

entradilla

Esto lo conseguimos añadiendo el html correspondiente en el action edit_form_after_title. Creamos una función en nuestro functions.php con un condicional para mostrar ese campo sólo en el caso de que estemos editando entradas (post). En un primer lugar obtendremos el valor del campo personalizado o custom field si lo tienen, y a continuación pintamos el html:

<?php

function add_custom_subtitle() {
  global $post;

  if ($post->post_type == "post") {
    //si existen se recuperan los valores de los metadatos
    $subtitle_post = get_post_meta( $post->ID, 'subtitle_post', true );

    // Se añade un campo nonce para probarlo más adelante cuando validemos
    wp_nonce_field( 'subtitle_metabox', 'subtitle_metabox_nonce' );?>

    <textarea id="subtitle_post" name="subtitle_post" rows="5" style="width: 100%;" placeholder="Introduce una entradilla aquí"><?php echo sanitize_text_field($subtitle_post);?></textarea>
  <?php }
}
add_action( 'edit_form_after_title', 'add_custom_subtitle');

El siguiente paso es guardar la información del campo personalizado cuando actualicemos nuestra entrada. Para ello crearemos a continuación en nuestro functions.php la siguiente función:

<?php

function my_custom_subtitle_save_data($post_id) {
  // Comprobamos si se ha definido el nonce.
  if ( ! isset( $_POST['subtitle_metabox_nonce'] ) ) {
    return $post_id;
  }
  $nonce = $_POST['subtitle_metabox_nonce'];
     
  // Verificamos que el nonce es válido.
  if ( !wp_verify_nonce( $nonce, 'subtitle_metabox' ) ) {
    return $post_id;
  }
 
  // Si es un autoguardado nuestro formulario no se enviará, ya que aún no queremos hacer nada.
  if ( defined( 'DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
    return $post_id;
  }
 
  // Comprobamos los permisos de usuario.
  if ( $_POST['post_type'] == 'page' ) {
    if ( !current_user_can( 'edit_page', $post_id ) )
      return $post_id;
  } else {
    if ( !current_user_can( 'edit_post', $post_id ) )
      return $post_id;
  }
 
  // Vale, ya es seguro que guardemos los datos.
 
  // Si existen entradas antiguas las recuperamos
  $old_subtitle_post = get_post_meta( $post_id, 'subtitle_post', true );
 
  // Saneamos lo introducido por el usuario.
  $subtitle_post = sanitize_text_field( $_POST['subtitle_post'] );
 
  // Actualizamos el campo meta en la base de datos.
  update_post_meta( $post_id, 'subtitle_post', $subtitle_post, $old_subtitle_post );
}
add_action( 'save_post', 'my_custom_subtitle_save_data' );

Por último en la plantilla donde quieras hacer uso del campo personalizado haz la llamada a través de la función get_post_meta():

<?php

get_post_meta( get_the_ID(), 'subtitle_post', true );

¿Te ha resultado útil esta información? 🍺

Si este post te ha resuelto un problema, invítame a un café o a una cerveza. Con este pequeño gesto me animas a seguir escribiendo.

Comentarios

3 comentarios en Cómo agregar un campo personalizado debajo del título de una entrada

    1. El código funciona correctamente. Si en tu IDE tienes X-debug traza la variable $subtitle_post. O a la antigua usanza, con var_dump.

      Ve trazando el código y mira que valor tiene esa variable y si se está guardando correctamente en base de datos

  1. y si lo que quisiera es utilizar un custom field como título, ta tengo hice una función que me cambia el titulo con modify_post_title( $data ) y $data[‘post_title’] = $title ;

    pero no me toma los custom fieslds

    incliso $title = $array1 . – . $array2 . date_i18n()

Deja un comentario

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

  • El fin del tratamiento es únicamente la moderación de comentarios para evitar spam
  • La legitimación es tu consentimiento al comentar
  • No se comunicará ningún dato a terceros salvo por obligación legal
  • Tienes derecho al acceso, rectificación y eliminación de los comentarios