Utilizamos cookies de contenido y análisis. Para más información entra AQUÍ ACEPTAR

Wordpress

WordPress Custom Post Types

WordPress ha conseguido situarse como uno de los máximos referentes en cuanto a gestores de contenido (CMS) en los últimos años y con la introducción de los custom post type permite que los usuarios podamos personalizar y añadir mucho más contenido de forma sencilla.

Qué podemos hacer con Custom Post Types

Con esta nueva funcionalidad podemos añadir gran variedad de contenido gestionable desde el panel con muy pocas líneas de código.

Estos contenidos no son ni más ni menos que los posts típicos de WordPress solo que con otro tipo. Se guardan en las mismas tablas de base de datos manteniéndose la estructura relacional y original del CMS.

Al igual que para los posts tenemos como información su autor, fecha, categoría etc. Por ejemplo si creamos un custom post type de “exposiciones” podríamos tener la información de su nombre, fecha, lugar, hora, tipo, imagen…

Creando Custom Post Types

Si no sabemos o no queremos crear un plugin lo habitual es usar el fichero functions.php del tema y añadir el código ahí.

Veamos un ejemplo: Galería de fotos con categorías

A continuación expondremos un ejemplo de Custom Post Type basado en una galería de fotos funcional para nuestro sitio.

En primer lugar, damos de alta el custom post con las opciones que queremos habilitar así como los mensajes / etiquetas de los menús y opciones:

$gallery_labels = array(

    'name' => _x('Galería', 'post type general name'),
    'singular_name' => _x('Galería', 'post type singular name'),
    'add_new' => _x('Añadir obra', obra),
    'add_new_item' => __("Añadir obra"),
    'edit_item' => __("Editar proyecto"),
    'new_item' => __("Nuevo proyecto"),
    'view_item' => __("Ver proyecto"),
    'search_items' => __("Buscar obra"),
    'not_found' =>  __('No se encontraron proyectos'),
    'not_found_in_trash' => __('No hay proyectos en la papelera'),
    'parent_item_colon' => ''    
);

$gallery_args = array(

    'labels' => $gallery_labels,
    'public' => true,
    'publicly_queryable' => true,
    'show_ui' => true,
    'query_var' => true,
    'rewrite' => true,
    //'rewrite' => array('slug' => 'gallery','with_front' => FALSE),
            'hierarchical' => false,
    'menu_position' => null,
    'capability_type' => 'post',
    'supports' => array('title', 'excerpt', 'editor', 'thumbnail')
    //'menu_icon' => get_bloginfo('template_directory') . '/img/photo-album.png' //16x16 png if you want an icon
);
register_post_type('gallery', $gallery_args);

Así hemos creado un custom post “gallery” al que podremos añadir, editar y borrar “obras”.

Definiendo la categoría (taxonomy) del custom post type

Ahora definiremos las llamadas “taxonomy”, es decir, las categorías que nuestro nuevo custom post dispondrá.

/**
*          CUSTOM POST GALLERY
*          create custom taxonomy
**/
add_action( 'init', 'jss_create_gallery_taxonomies', 0);

function jss_create_gallery_taxonomies(){
    register_taxonomy(
        'phototype', 'gallery',
        array(
            'hierarchical'=> true,
            'label' => 'Proyectos',
            'singular_label' => 'Proyecto',
            'rewrite' => true
        )
    );    
}

En este caso hemos organizado las obras de la galería en proyectos y cuya taxonomy será ” phototype”, asociada al custom post “gallery”.

Pero aún hay más…

Podemos personalizar que queremos mostrar (campos, información, columnas…) a la hora de gestionar este custom post desde el panel:

add_action('manage_posts_custom_column', 'jss_custom_columns');
add_filter('manage_edit-gallery_columns', 'jss_add_new_gallery_columns');

function jss_add_new_gallery_columns( $columns ){
    $columns = array(

        'jss_post_thumb'    =>        'Obra',
        'title'                =>        'Nombre de la obra',
        'phototype'            =>        'Proyecto',
        //'author'            =>        'Autora',
        'date'                =>        'Fecha'

    );
    return $columns;
}

function jss_custom_columns( $column ){
    global $post;

    switch ($column) {
        case 'jss_post_thumb' : echo the_post_thumbnail('admin-list-thumb'); break;
        case 'description' : the_excerpt(); break;
        case 'phototype' : echo get_the_term_list( $post->ID, 'phototype', '', ', ',''); break;
    }
}

Añadir un thumbnail / preview de las obras como una columna más

add_filter('manage_posts_columns', 'jss_add_post_thumbnail_column', 5);
add_filter('manage_pages_columns', 'jss_add_post_thumbnail_column', 5);
add_filter('manage_custom_post_columns', 'jss_add_post_thumbnail_column', 5);

// Add the column
function jss_add_post_thumbnail_column($cols){
    $cols['jss_post_thumb'] = __('Thumbnail');
    return $cols;
}

function jss_display_post_thumbnail_column($col, $id){
  switch($col){
    case 'jss_post_thumb':
      if( function_exists('the_post_thumbnail') )
        echo the_post_thumbnail( 'admin-list-thumb' );
      else
        echo 'Not supported in this theme';
      break;
  }
}

/**
*          CUSTOM POST GALLERY
*          add theme support for thumbnails
**/
if ( function_exists( 'add_theme_support')){
    add_theme_support( 'post-thumbnails' );
}
add_image_size( 'admin-list-thumb', 80, 80, true); //admin thumbnail preview
add_image_size( 'album-grid', 450, 450, true );

Filtro para ordenar por taxonomy (categoría)


function restrict_gallery_by_project() {

   global $typenow;
   $post_type = 'gallery'; // change HERE
   $taxonomy = 'phototype'; // change HERE
   if ($typenow == $post_type) {
       $selected = isset($_GET[$taxonomy]) ? $_GET[$taxonomy] : '';
       $info_taxonomy = get_taxonomy($taxonomy);
       wp_dropdown_categories(array(
            'show_option_all' => __("Mostrar todos los {$info_taxonomy->label}"),
            'taxonomy' => $taxonomy,
            'name' => $taxonomy,
            'orderby' => 'name',
            'selected' => $selected,
            'show_count' => true,
            'hide_empty' => true,
      ));
   };
}

add_action('restrict_manage_posts', 'restrict_gallery_by_project');

function convert_id_to_term_in_query($query) {
     global $pagenow;
     $post_type = 'gallery'; // change HERE
     $taxonomy = 'phototype'; // change HERE
     $q_vars = &$query->query_vars;
     if ($pagenow == 'edit.php' && isset($q_vars['post_type']) && $q_vars['post_type'] == $post_type && isset($q_vars[$taxonomy]) && is_numeric($q_vars[$taxonomy]) && $q_vars[$taxonomy] != 0) {
          $term = get_term_by('id', $q_vars[$taxonomy], $taxonomy);
          $q_vars[$taxonomy] = $term->slug;
     }
}
add_filter('parse_query', 'convert_id_to_term_in_query');

Hasta ahora hemos visto qué son los custom post, qué nos ofrece y como usarlos para crear nuestra galería de fotos.

Francisco Molina
0

No hay comentarios, se el primero!

Deja un comentario

Deja un comentario