Tipos de entrada personalizados para WordPress

En WordPress tenemos varios elementos principales, desde los cuales poder crear contenidos. Los tipos básicos que incluye por defecto son:

  • Las páginas: su objetivo es crear los diferentes apartados de la web que serán estáticos. Por ejemplo, quiénes somos, contactar, servicios…
  • Las entradas: orientado a la redacción de contenidos dinámicos, como noticias, artículos de un blog…
  • Media: en WordPress, al subir una imagen o archivo, se guarda dentro de la misma estructura de datos que una página o entrada, con su título, descripción…

 

Ahora es cuando nos planteamos poder tener más tipos de entrada, para lo que nosotros necesitemos. ¿Y para qué podríamos necesitar más tipos? Ahora es cuando la imaginación entra en juego. Aquí unos ejemplos:

  • Proyectos: en un portfolio, cada entrada podría ser un proyecto.
  • Productos: para una tienda online.

 

Creando nuestro propio tipo de entrada personalizado

Podemos crear tantos tipos de entrada personalizados como queramos. Basta con seguir con estos tres pasos:

1. Definición dentro del archivo functions.php

Podemos escribir el siguiente código, dentro del archivo functions.php de nuestro template. El lugar dentro del código no es importante, solo que esté dentro de las etiquetas php.

// Dentro de esta función, podemos crear tantos Custom Post Types como necesitemos
function create_post_type() {
    register_post_type( 'portfolio', // Definimos el nombre del tipo de entrada personalizado.
  array(
    'labels' => array(
      'name' => __( 'Portfolio' ), // Este es el nombre que veremos en el menú principal de WP
      'singular_name' => __( 'Portfolio' ) // Si queremos, podemos asignar un nombre singuar
      ),
    'public' => true, // Si es visible para todo el mundo, o solo para usuarios registrados
    'has_archive' => true, // Activamos esta opción si queremos tener un índice de publicaciones
    'rewrite' => 'true', // Esta opción permite crear sus propios enlaces permanentes
    'supports' => array( 'title', 'thumbnail', 'editor' ), // Qué elementos del editor de entradas estarán disponibles
    )
  );

   // Si queremos que el nuevo Custom Post Type tenga categorías, añadiríamos la siguiente función:
   register_taxonomy(  
  'portfolio_filter', 'portfolio',  // El mismo nombre que hemos definido antes
  array(  
      'labels' => array( // Los nombres de las etiquetas que veremos en el editor
        'name' => __( 'Categorías de portfolio', 'miplantilla' ),
        'singular_name' => __( 'Categoría de portfolio', 'miplantilla' ),
        'search_items' => __( 'Buscar categorías de portfolio', 'miplantilla' ),
        'popular_items' => __( 'Categorías de portfolio populares', 'miplantilla' ),
        'all_items' => __( 'Todas las categorías de portfolio', 'miplantilla' ),
        'edit_item' => __( 'Editar categoría de portfolio', 'miplantilla' ),
        'update_item' => __( 'Actualizar categoría de portfolio', 'miplantilla' ),
        'add_new_item' => __( 'Añadir nueva', 'miplantilla' ),
        'new_item_name' => __( 'Nombre', 'miplantilla' ),
        'separate_items_with_commas' => __( 'Separar con comas', 'miplantilla' ),
        'add_or_remove_items' => __( 'Añadir o eliminar categorías', 'miplantilla' ),
        'choose_from_most_used' => __( 'Elegir entre las más utilizadas', 'miplantilla' ),  
        'parent' => __( 'Categoría superior', 'miplantilla' )       
        ),
      'query_var' => true,  
      'rewrite' => true  
  )  
    );
}
add_action( 'init', 'create_post_type' ); // Hacemos la llamada a la función

Publicar entradas personalizadas:

Una vez creado, en el menú principal de WordPress debería aparecer un nuevo apartado como este:
portfolio-button

Desde este apartado, podremos entrar en el editor, y crear, en este caso, diferentes proyectos. Debemos tratarlos igual que si fueran entradas o páginas: seleccionando un título, una descripción en el editor principal, y una imagen destacada.

Las categorías también las trataremos igual, que las categorías principales de entradas.

Mostrando nuestras entradas personalizadas en nuestra plantilla

Cuando ya hemos definido el tipo de entrada personalizado, y hemos creado diferentes contenidos, es la hora de mostrarlo por pantalla. Podemos hacerlo de varias formas:

Usando plantillas estándar:
Por ejemplo, si ya tenemos definido un archivo para mostrar todas las entradas de una categoría (category.php o archive.php), y un archivo para mostrar el contenido de las entradas (single.php), podemos reutilizarlos para nuestro nuevo tipo. De esta forma:

  • category-portfolio.php
  • single-portfolio.php

Simplemente añadiendo el sufijo con el nombre de nuestro tipo de entrada personalizado, ya le decimos a WordPress con qué plantilla queremos previsualizar sus contenidos.

Mediante código:
Si lo que queremos es integrar las nuevas entradas dentro de otros apartados que ya tenemos, por ejemplo en la home o en un widget, podemos hacerlo mediante código. Por ejemplo:

<?php query_posts('post_type=portfolio&posts_per_page=5' ); // Seleccionamos el post type "portfolio" y cogemos los 5 últimos ?>
<?php if ( have_posts() ) : // Si existen resultados ?>
  <?php while (have_posts()) : the_post(); // Mientra haya resultados, repite lo siguiente: ?>
                <?php // En este ejemplo tendríamos el  ?>
    <div class="image-caption featured">
      <a href="<?php the_permalink(); ?>">
        <?php the_post_thumbnail( 'medium' ); // La imagen destacada ?>
        <div class="caption">
          <h2 class="description"><?php the_title(); // El título ?></h2>
        </div>
      </a>
                        <?php the_excerpt(); // Un breve resumen de la entrada ?>
    </div>
  <?php endwhile; ?>
<?php endif; ?>

Como podéis ver, para obtener las entradas correspondientes, solo necesitamos la función query_posts, indicando los parámetros que necesitamos.

Ver más sobre los tipos de entrada personalizados | Ver más sobre los query_posts

 

Tipos de entrada personalizados para WordPress

1 comentario


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>