2.- Desarrollo de Temas

Documentos relacionados
La potencia sin control no sirve de nada, claves para aprovechar el uso de WordPress.

Guía del Curso Postgrado en Sistemas de Gestión de Contenidos (CMS). EXPERTO en Drupal, Wordpress y Joomla

Segundo seminario de Wordpress Las tripas de Wordpress y sus plugins

WORDPRESS MULTILENGUAJE

CURSO DE Crea tu sitio web con Joomla! CURSO

CREACIÓN DE WEB CON WORDPRESS

IT CONSULTING, tiene a bien hacerle llegar la oferta de Capacitación de DISENO DE SITIOS WEB & BLOGS CON JOOMLA + WORDPRESS + MAGENTO

Curso en línea Avanzado de creación de sitios web con WordPress

Introducción al desarrollo de plantillas de WordPress. jueves 22 de septiembre de 2011

Introducción al desarrollo en WordPress

Herramientas Google Aplicadas a Educación

Adentrándote en Wordpress (Manual de instalación)

TU NEGOCIO EN INTERNET

OPENOFFICE IMPRESS. Creación básica de presentaciones digitales

Vamos a crear un blog

UdeSA CMS Tutorial Administración de microsite Revista Jurídica

Acceder al backend de la web

img.1 Comenzar a crear nuestro player

Manual de Usuario. WordPress

Guía del Curso Técnico Profesional en Creación de Portales Web con Joomla + SEO Profesional

Manual de Herramientas Digitales Para la Gestión del Conocimiento. Realizar una página web con WIX

Guía Saga Suite Galería de Descarga

CONTENIDOS DEL CURSO ONLINE DE DISEÑO Y DESARROLLO WEB CON HTML5, CSS Y DREAMWEAVER CS4:

INDEXHIBIT. Portfolios personalizables. Iván Martínez Toro

En el siguiente documento se explica el procedimiento para realizar las diferentes acciones que posibilita la herramienta Socrata

vatar, que es una imagen que se mostrará cada vez que publiques un post o un comentario.

Constructor de sitios. Manual de Usuario

Mantenimiento de WordPress e Introducción a CSS

La Herramienta Redmine para la Administración de Proyectos

* Este archivo sólo pretende ser un complemento a las clases, no sustituye en su totalidad la formación impartida en el aula.

MÓDULO I - Operaciones Básicas con Servidores Web (Dominio, Subdominio y Hosting).

GUÍA PARA LA INSTALACIÓN Y USO DE WORDPRESS BY MASTERHACKS. Guía de instalación y uso de Wordpress Página 1

Instrucciones para crear un blog de empresa en el Portal Renovables Andalucía

Diseño de sitios web administrables con Joomla 3

Gestor documental Alfresco

Debe definir un menú para poder añadir elementos a ella. Entrar al panel de WordPress.

DREAMWEAVER CS4 Código: 3492

Nota: Para este mini-manual se han debido de instalar el siguiente plugin:

La plantilla propone aprovechar esta estructura en común y sólo modificar el contenido del área del documento que sea diferente.

1. Barra de menús Muestra los comandos de menú para utilizar el software StarBoard 2. Barra de

PHP: Lenguaje de programación

Manual de Usuario UCARIBE VIRTUAL

3. Lógate con la misma contraseña que la de tu correo electrónico

Manual de Formulario. C/ Salado, 11. Local Sevilla

Combinación de correspondencia en Microsoft Office Word 2003

CURSO INTENSIVO DE K2

UNIDAD 1 GENERALIDADES HTML

LENGUAJE PHP Y CAKEPHP FRAMEWORK

Diseño y desarrollo Web con HTML 5, CSS y Dreamweaver CS 4

Recomendaciones Sobre Etiquetas y Páginas

PRÁCTICA 1 - CREACIÓN DE UNA PRESENTACIÓN CON EL ASISTENTE PARA AUTOCONTENIDO

Publicación de contenidos con SlideShare Víctor Barbero Romero

Manual FOXTIR Editor HTML MOBILE MARKETING

MOODLE 1.9 BASE DE DATOS

Joomla! 3.3 Cree y administre sus sitios Web

Guía rápida funcionamiento general

Índice general. Pág. N. 1

Universidad de Sevilla

CATÁLOGO DE METADATOS GEOGRÁFICOS Versión 2.0

Uso de blogs. Creación y administración de blogs. Pedro A. Castillo Valdivieso Depto. Arquitectura y Tecnología de Computadores

Aprenda los lenguajes HTML5, CSS3 y JavaScript para crear su primer sitio web

MANUAL PREZI. Elaboración: Ing. Jocabed Bautista. 1. INGRESAR A LA PAGINA: prezi.com y dar click en Registrarse

Si no has cambiado tus datos de acceso, te sugerimos que lo hagas por seguridad de tu página.

Creación y Modificación de Blog

Web para el aula: Google Sites y Blogger

USAR EL PLUG-IN PARA MS OUTLOOK

GUÍA DIDACTICA DEL CURSO GESTIÓN WEB Y MARKETING ONLINE

CMS DRUPAL. Drupal es un gestor de contenidos multipropósito que puede usarse para aplicaciones como por ejemplo:

Máster en DISEÑO Y DESARROLLO DE PROYECTOS WEB

DISEÑO Y DESARROLLO WEB CON HTML 5, CSS DREAMWEAVER CS4

MÓDULO I - Operaciones Básicas con Servidores Web (Dominio, Subdominio y Hosting).

Tipos de blog. Blog. Un blog, o en español también una bitácora, es un sitio web periódicamente

GOOGLE SITES INICIAL

La Herramienta Redmine para la Administración de Proyectos

HTML 5. Que es HTML5 07/04/2011

Versión: Desarrollado por AloOnline Alojamiento Web


Al finalizar la clase los estudiantes: Definirán lo que es un portafolio electrónico. Describirán los tipo de portafolio.

Escrito por emilio chica Miércoles, 11 de Abril de :34 - Actualizado Viernes, 23 de Noviembre de :16

Manual de gestión de contenidos web en entorno Drupal. Versión sitio maestro para servicios 1.0

Técnico Profesional en Creación y Gestión de Blog + Web 2.0 con Wordpress Profesional (Online) (Promoción Dooplan-Grupazo)

UNIDAD 4. MODIFICAR TABLAS DE DATOS

Gestiona tus referencias bibliográficas con

TRABAJAR OBRAS COMO TALLER MECÁNICO

GUÍA DE FUNCIONAMIENTO BASICO DE LA PLATAFORMA DOCENTE MOODLE

TÉCNICO SUPERIOR EN CREACIÓN DE PORTALES WEB CON JOOMLA SEO PROFESIONAL

Figura 41: Ejemplo de una carta para combinar correspondencia

ACCESS 2010 FÁCIL - ONLINE - EN LÍNEA

COLEGIO PABLO DE TARSO IED CONSTRUCCION DE PROYECTOS DE VIDA PRODUCTIVOS DREAMWEAVER UNO- PRÁCTICAS DOC RAUL MONROY PAMPLONA

Recomendaciones Sobre Etiquetas y Páginas

Aprendemos a crear un blog

Gestión de los contenidos de la Web de ATICA con Mambo

NUEVO TUTORIAL Blog de arquitectura

Configuración de un navegador

La última versión disponible cuando se redactó este manual era la 5 Beta (versión ), y sobre ella versa este manual.

izarnet Gestor de contenidos ixe Manual de uso viernes, 07 de octubre de 2011 izarnet

Introducción. Word Autor: Viviana M. Lloret Prof. de Matemática e Informática Blog: aulamatic.blogspot.com

Tutoriales y Guías de uso con Orientaciones Pedagógicas Entorno Virtual de Aprendizaje Plataforma Blackboard WIKIS

DURACION: 250 horas. PRECIO: 300 * * Materiales didácticos, titulación y gastos de envio incluidos. MODALIDAD: A distancia DESCRIPCION:

PLAN DE ESTUDIOS DE INFORMÁTICA SEGUNDO GRADO DE SECUNDARIA

Transcripción:

2.- Desarrollo de Temas Archivos y plantillas del tema, Uso de plantillas, El Loop, Custom Post Types, Metaboxes, Functions.php, Crear tema desde cero, Child Themes, Starter Themes.

#1 Qué es un tema? Y cómo crearlo?

Qué es un tema? Un tema es un conjunto de archivos que permite cambiar la apariencia de nuestro gestor de contenidos. Un tema WordPress nos permitirá personalizar las fuentes de los textos, el tamaño de la letra, los colores del texto, de los links, el fondo de la página; en definitiva, el aspecto del sitio web. Blog. Tienda online. Sitio web corporativo. Institucionales. Educativos. Comunidad. Wiki. Portal. etc.

Cómo es un tema? style.css index.php

style.css Sin style.css no hay tema. function search_theme_directories(){ if ( $theme_file == style.css ) { $theme_files[$theme_dir] = array( theme_file => $theme_dir. /. $theme_file, theme_root => $theme_root ); $found_stylesheet = true; break; } }

/* Theme Name: Twenty Thirteen Theme URI: http://wordpress.org/themes/twentythirteen Author: the WordPress team Author URI: http://wordpress.org/ Description: The 2013 theme for WordPress takes us back to the blog, featuring a full range of post formats, each displayed beautifully in their own unique way. Design details abound, starting with a vibrant color scheme and matching header images, beautiful typography and icons, and a flexible layout that looks great on any device, big or small. Version: 1.0 License: GNU General Public License v2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html Tags: black, brown, orange, tan, white, yellow, light, onecolumn, two-columns, right-sidebar, flexible-width, customheader, custom-menu, editor-style, featured-images, microformats, post-formats, rtl-language-support, sticky-post, translation-ready Text Domain: twentythirteen This theme, like WordPress, is licensed under the GPL. Use it to make something cool, have fun, and share what you've learned with others. */

style.css

style.css

index.php Plantilla más genérica. Se muestra si no hay otra plantilla más específica para el contenido que estamos mostrando.»» home.php index.php

Modularización WordPress nos permite modularizar el código; esto es, crear ficheros para jerarquizar el diseño (front-end). Además, nos permite modularizar funciones (plugins), de manera que podemos reciclar trozos de código en diferentes proyectos.

Ficheros habituales de un tema WordPress header.php footer.php sidebar.php

header.php index.php sidebar.php footer.php

header.php Declaración del documento. Inclusión de los estilos. Función wp_head();

wp_head() Función IMPRESCINDIBLE. Sinónimo de do_action( wp_head ); No acepta parámetros. Es dependiente del tema. Todos los plugins vuelcan sobre ella sus estilos y scripts. add_action('wp_head','hook_css'); function hook_css() { $output="<style>.wp_head_example { background-color : #f1f1f1;} </style>"; echo $output; }

footer.php Pié de página. Inclusión de Javascript. Función wp_footer();

wp_footer() Función IMPRESCINDIBLE. Sinónimo de do_action( wp_footer ); No acepta parámetros. Es dependiente del tema. Todos los plugins vuelcan sobre ella sus scripts. add_action('wp_footer','hook_javascript'); function hook_javascript() { $output="<script> //Mi función javascript. </script>"; echo $output; }

sidebar.php Barra lateral. Widgets.

Plantillas para contenidos home.php page.php single.php archive.php

page.php y single.php

Más plantillas 404.php category.php tag.php author.php

Todas las plantillas index 404 archive author category tag taxonomy date home front_page page paged search single text, plain, text_plain (all mime types) attachment comments

Plantillas personalizadas contacto.php about.php location.php whatever.php

Plantillas personalizadas Página especializada. Para una entrada, autor, página concretos. 1. page-{slug}.php 2. page-{id}.php 3. category-{id}.php 4. tag-{id}.php 5. author-{id}.php

#2 El Loop

header.php index.php sidebar.php footer.php

El bucle (Loop) Determina qué contenido debe mostrar WordPress. Un sólo post o página. Un grupo de posts o páginas. Consulta parámetros (URL) <?php if(have_posts()) : while(have_posts()) : the_post();?> <h1><?php the_title()?></h1> <div class='post-content'><?php the_content()?></div> <?php endwhile; else:?> Vaya, no hay entradas. <?php endif;?>

Objeto $wp_query El Loop es utilizado para extraer y mostrar contenido de artículos (o posts), páginas y tipos de entrada personalizados (Custom Post Types). Los datos que obtenemos al consultar (consulta original, query_posts o WP_Query), estos se guardan en $wp_query (un objeto).

Objeto $wp_query Ejemplo - Ver posts o artículos: <pre> <?php print_r($wp_query->posts);?> </pre> Ejemplo - Loop básico: <?php if ( have_posts() ) : while ( have_posts() ) : the_post();?>

Objeto $wp_query Funciones del objeto $wp_query: <?php function the_post() { global $wp_query;?> } $wp_query->the_post();

Objeto $wp_query Objeto automático. WordPress basa el funcionamiento de $wp_query en la dirección web actual y configuraciones del wp-admin. WordPress necesita la URL para filtrar parámetros o páginas concretas. Por ejemplo, la URL http://ejemplo.com/etiqueta/pony le dice a WordPress que configure el objeto $wp_query con los artículos etiquetados con pony, exclusivamente. Mientras que http://ejemplo.com/ obtiene todos los artículos.

Clase WP_Query Clase que modifica (o crea) el objeto $wp_query Loop por defecto: <?php if(have_posts()) : while(have_posts()) : the_post();?> <h1><?php the_title()?></h1> <div class='post-content'><?php the_content()?></div> <?php endwhile; else:?> Vaya, no hay entradas. <?php endif;?>

Clase WP_Query Loop de WordPress con WP_Query <?php $args = array('cat' => 4); $category_posts = new WP_Query($args); if($category_posts->have_posts()) : while($category_posts->have_posts()) : $category_posts->the_post();?> <h1><?php the_title()?></h1> <div class='post-content'><?php the_content()?></div> <?php endwhile; else:?> Vaya, no hay entradas. <?php endif;?>

Clase WP_Query Loop normal vs Loop WP_Query: 1.Construir la consulta: Con WP_Query hay que indicar qué contenido queremos extraer de la base de datos. 2.Inicializar WP_Query y consultar. 3.Crear el loop. 4.Trabaja como siempre.

Clase WP_Query 1 - Construir la consulta: Con WP_Query hay que indicar qué contenido queremos extraer de la base de datos. 1. Controla los valores por defecto: post_per_page post_type post_status Más información.

Clase WP_Query 2 - Iniciar WP_Query y consultar. <?php $args = array('cat' => 4); $category_posts = new WP_Query($args); if($category_posts->have_posts()) : while($category_posts->have_posts()) : $category_posts->the_post();?> <h1><?php the_title()?></h1> <div class='post-content'><?php the_content()?></div> <?php endwhile; else:?> Vaya, no hay entradas. <?php endif;?>

Clase WP_Query 3 - Crear el Loop original. <?php if(have_posts()) : while(have_posts()) : the_post();?> <h1><?php the_title()?></h1> <div class='post-content'><?php the_content()?></div> <?php endwhile; else:?> Vaya, no hay entradas. <?php endif;?>

Clase WP_Query 3 - Crear el Loop. <?php $args = array('cat' => 4); $category_posts = new WP_Query($args); if($category_posts->have_posts()) : while($category_posts->have_posts()) : $category_posts->the_post();?> <h1><?php the_title()?></h1> <div class='post-content'><?php the_content()?></div> <?php endwhile; else:?> Vaya, no hay entradas. <?php endif;?>

Clase WP_Query 4. Trabaja como siempre. 1. Añade tus etiquetas html, estructura o diseño. Consejos: No hagas consultas muy pesadas, sobretodo en alojamientos compartidos. Más consultas a la base de datos = más consumo del servidor. Siempre que puedas, utiliza la consulta por defecto de WordPress y el motor de plantillas.

Clase WP_Query 5 - Resetea parámetros (evita problemas) /* Restore original Post Data * NB: Because we are using new WP_Query we aren't stomping on the * original $wp_query and it does not need to be reset with * wp_reset_query(). We just need to set the post data back up with * wp_reset_postdata(). */ wp_reset_postdata();

#3 Añadiendo menús personalizados

Añadiendo menús Podemos registrar tantos menús como queramos // Añado un menú sólo function register_my_menu() { register_nav_menu('header-menu', ( Primary Navigation' )); } // Añado varios menús function register_my_menus() { register_nav_menus( array( 'header-menu' => ( Primary Navigation ), 'extra-menu' => ( Top Bar Navigation ) ) ); } add_action( 'init', 'register_my_menus' ); Apariencia»Menús {

Añadiendo menús Para mostrarlo en el front-end: <?php wp_nav_menu(array( 'theme_location' => 'header-menu'));?> <?php wp_nav_menu(array( 'theme_location' => extra-menu', 'container_class' => my_extra_menu_class' ));?> Más información

#4 functions.php

functions.php Es un fichero de nuestro tema. Es una de las formas de cambiar las características que WordPress ofrece por defecto. El functions.php funciona como un plugin: Añade mejoras y funcionalidades a un sitio WordPress. Puedes utilizarlo para llamar funciones, tanto PHP como del WordPress.

functions.php Diferencias con un plugin Un plugin: Requiere una cabecera específica, única. Se guarda en wp-content/plugins (Normalmente en subdirectorio. Se ejecuta sólo cuando está activado, a través del panel de plugins Aplica sus funciones a todos los temas. Debe tener un propósito; por ejemplo: convertir aorticulos en piginas, ofrecer mejoras de posicionamiento o ayudar con los backups.

functions.php Diferencias con un plugin El fichero functions.php: No requiere una cabecera única/propia. Se guarda en el directorio de cada tema; wp-content/ themes/theme Sólo se ejecuta cuando el tema al que aplica está activado. Aplica sus funciones/cambios sólo al tema. Si se cambia el tema, la funcionalidad se pierde. Puede tener varios bloques de código utilizados para diferentes propósitos.

CUIDADO!: Si un plugin de WordPress llama a la misma función o filtro que tu functions.php, los resultados pueden ser #@#! -- Incluso pantallazo blanco de la muerte.

#5 Custom Post Types

Custom Post Types Por defecto: Entradas Páginas Adjuntos Revisión Menús de navegación.

Custom Post Types Utilidades: Catálogos de productos. El custom post type es el producto. Portfolios. Editorial.

Custom Post Types 1 - Mostrar etiquetas del nuevo Post Type. // La función no será utilizada antes del 'init'. add_action( 'init', 'my_custom_init' ); /* Creamos labels personalizados para nuestro Post Type */ function my_custom_init() { $labels = array( name => _x( 'Libros', 'post type general name' ), 'singular_name' => _x( 'Libro', 'post type singular name' ), 'add_new' => _x( 'Añadir nuevo', 'book' ), 'add_new_item' => ( 'Añadir nuevo Libro' ), 'edit_item' => ( 'Editar Libro' ), 'new_item' => ( 'Nuevo Libro' ), 'view_item' => ( 'Ver Libro' ), 'search_items' => ( 'Buscar Libros' ), 'not_found' => ( 'No se han encontrado Libros' ), 'not_found_in_trash' => ( 'No se han encontrado Libros en la papelera' ), 'parent_item_colon' => '' );

Custom Post Types 1 - Definir propiedades del post type nuevo. // Creamos un array para $args $args = array( 'labels' => $labels, 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'query_var' => true, 'rewrite' => true, 'capability_type' => post', 'hierarchical' => false, 'menu_position' => null, 'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' ) ); //Registramos el Post Type register_post_type( 'libro', $args ); /* Registramos y a funcionar */ }

Custom Post Types Funciones para controlar el Custom Post Type: post_type_exists() Revisa si existe un custom post type. is_post_type_hierarchical( $post_type ) Cuándo el tipo de post es jerárquico. Si retorna falso es que no lo es. get_post_type( $post ) Recupera el tipo de entrada del artículo en cuestión o un post específico. get_post_type_object( $post_type ) Recupera un objeto del tipo de entrada por nombre. get_post_types( $post ) Obtiene una lista de todos los tipos de entrada. register_post_type() Registra un nuevo tipo de entrada. No utilizar antes del init. get_post_type_capabilities() Crea un objeto con todos los permisos de los tipos de entrada personalizados. Más información

Custom Post Types Taxonomías // Lo enganchamos en la acción init y llamamos a la función create_book_taxonomies() cuando arranque add_action( 'init', 'create_book_taxonomies', 0 ); // Creamos dos taxonomías, género y autor para el custom post type "libro" function create_book_taxonomies() { // Añadimos nueva taxonomía y la hacemos jerárquica (como las categorías por defecto) $labels = array( 'name' => _x( 'Géneros', 'taxonomy general name' ), 'singular_name' => _x( 'Género', 'taxonomy singular name' ), 'search_items' => ( 'Buscar por Género' ), 'all_items' => ( 'Todos los Géneros' ), 'parent_item' => ( 'Género padre' ), 'parent_item_colon' => ( 'Género padre:' ), 'edit_item' => ( 'Editar Género' ), 'update_item' => ( 'Actualizar Género' ), 'add_new_item' => ( 'Añadir nuevo Género' ), 'new_item_name' => ( 'Nombre del nuevo Género' ), );

Custom Post Types Taxonomías register_taxonomy( 'genero', array( 'libro' ), array( 'hierarchical' => true, 'labels' => $labels, /* ADVERTENCIA: Aquí es donde se utiliza la variable $labels */ 'show_ui' => true, 'query_var' => true, 'rewrite' => array( 'slug' => 'genero' ), ));

Custom Post Types Taxonomías // Añado otra taxonomía, esta vez no es jerárquica, como las etiquetas. $labels = array( 'name' => _x( 'Escritores', 'taxonomy general name' ), 'singular_name' => _x( 'Escritor', 'taxonomy singular name' ), 'search_items' => ( 'Buscar Escritores' ), 'popular_items' => ( 'Escritores populares' ), 'all_items' => ( 'Todos los escritores' ), 'parent_item' => null, 'parent_item_colon' => null, 'edit_item' => ( 'Editar Escritor' ), 'update_item' => ( 'Actualizar Escritor' ), 'add_new_item' => ( 'Añadir nuevo Escritor' ), 'new_item_name' => ( 'Nombre del nuevo Escritor' ), 'separate_items_with_commas' => ( 'Separar Escritores por comas' ), 'add_or_remove_items' => ( 'Añadir o eliminar Escritores' ), 'choose_from_most_used' => ( 'Escoger entre los Escritores más utilizados' ) );

Custom Post Types Taxonomías register_taxonomy( 'escritor', 'libro', array( 'hierarchical' => false, 'labels' => $labels, /* ADVERTENCIA: Aquí es donde se utiliza la variable $labels */ 'show_ui' => true, 'query_var' => true, 'rewrite' => array( 'slug' => 'escritor' ), )); } // Fin de la función create_book_taxonomies().

Custom Post Types Taxonomías >

Custom Post Types Funciones para controlar el Custom Post Type: get_taxonomies() Obtienes una lista de las taxonomías registradas. get_object_taxonomies($object_type) Retorna todas las taxonomías que pertenecen al $object_type especificado. get_taxonomy() Recupera la taxonomia especificada. taxonomy_exists() Comprueba que la taxonomía existe. Falso si no existe. is_taxonomy_hierarchical() Nos dice si una taxonomía es jerárquica. Falso en caso negativo. register_taxonomy Crea o modifica un objeto de taxonomía. No usar antes del init. Taxonomías Más información

#6 Metaboxes

Metaboxes Qué es?: Nos permite añadir campos personalizados en la página de edición de los posts. Guardar más información sobre un tipo de entrada (o todos) Cómo se crean?: Con plugin. Con código.

Metaboxes <?php add_meta_box( $id, $title, $callback, $page, $context, $priority, $callback_args );?>

Metaboxes $id el el ID html del metabox. Es útil, por ejemplo, si vas a utilizar un CSS custom para darle estilos a este metabox o incluso vas a hacer algo con Javascript; sino, no tiene mucha importancia. $title es el título que será mostrado en la parte superior del metabox, como veremos próximamente. $callback es la función que dará uso a nuestro metabox, lo veremos en el siguiente punto. $page es donde queremos que se muestre nuestro metabox; podemos decidir que se muestre en los post, las páginas o un custom post type (nuestro caso). $context es dónde queremos que se muestre nuestro metabox. normal significará que se muestre bajo el editor de la entrada o página, side coloca el metabox a la barra lateral de la página de edición y advanced lo coloca en la misma columna que el editor. $priority le dice a WordPress dónde cargar el metabox en el contenido. high, default o low coloca la caja del metabox arriba, en su posición natural o abajo del todo respectivamente. Aunque, desde que todos los metaboxes de WordPress funcionan con el Drag and drop, $priority no tiene demasiado sentido. $callback_args es de otra batalla.

Metaboxes <?php add_meta_box( my-meta-box-id, Datos adicionales del libro, dariobf_metabox, libro, normal, high );?>

Metaboxes function dariobf_metabox( $post ){?> <p>aquí pondremos todo el contenido de nuestro metabox</p> <?php }

Metaboxes Añadiendo: Input function dariobf_metabox( $post ) {?> <p> <label for="my_meta_box_text">isbn</label> <input type="text" name="my_meta_box_text" id="my_meta_box_text" value="<?php echo $text;?/>" /> </p> <?php }

Metaboxes Añadiendo: Input function dariobf_metabox( $post ) { $values = get_post_custom( $post->id ); $text = isset( $values['my_meta_box_text'] )? esc_attr( $values['my_meta_box_text'][0] ) : ''; // We'll use this nonce field later on when saving. wp_nonce_field( 'my_meta_box_nonce', 'meta_box_nonce' );?> <p> <label for="my_meta_box_text">isbn</label> <input type="text" name="my_meta_box_text" id="my_meta_box_text" value="<?php echo $text;?/>" /> </p> <?php }

Metaboxes Añadiendo: Select

Metaboxes Qué hemos hecho?: He añadido dos select, como hemos mencionado arriba. He añadido, también, dos variables más ($select y $select2) donde recogo los datos de ambos select. Tal y como hicimos con el input del ISBN.

Metaboxes Guardando los datos: Jamás te fíes del usuario. Antes de guardar los datos vamos a comprobar que no hay nada malicioso en ellos. Función esc_attr(). Codifica las comillas simples y dobles así como los símbolos mayor qué y menor qué en HTML. Más información. Guardamos con update_meta(): El ID del post La llave (key) del meta El valor.

Metaboxes add_action( 'save_post', dariobf_metabox_save ); function dariobf_metabox_save( $post_id ) { // Controla si estamos haciendo un auto-guardado if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; // Si nuestro nonce no está, o no podemos verificarlo, fuera. if(!isset( $_POST['meta_box_nonce'] )! wp_verify_nonce( $_POST['meta_box_nonce'], 'my_meta_box_nonce' ) ) return; // Si el usury actual no puede editar este post, fuera. if(!current_user_can( 'edit_post' ) ) return; // Ahora podemos guardar los datos $allowed = array( 'a' => array( 'href' => array() ) );

Metaboxes // Nos aseguramos de que la información está definida antes de guardar. if( isset( $_POST['my_meta_box_text'] ) ) update_post_meta( $post_id, my_meta_box_text', wp_kses( $_POST['my_meta_box_text'], $allowed ) ); if( isset( $_POST['my_meta_box_select'] ) ) update_post_meta( $post_id, 'my_meta_box_select', esc_attr( $_POST['my_meta_box_select'] ) ); if( isset( $_POST['my_meta_box_select_2'] ) ) update_post_meta( $post_id, 'my_meta_box_select_2', esc_attr( $_POST['my_meta_box_select_2'] ) ); } // Fin función dariobf_metabox_save

Metaboxes Cómo muestro los datos en el Front-End? get_post_meta o get_post_custom // Obtenemos el ISBN del libro con ID 76 <?php $isbn = get_post_meta( 76, 'my_meta_box_text' );?>

#7 Post Formats

Post Formats Introducido en la versión 3.1 Un Post Format (Formato de publicación) es una información meta que se puede utilizar en un tema para personalizar la forma de presentación de la misma. En resumen, con un tema que soporte los Post Formats, el usuario final puede decidir la apariencia que tendrá cada publicación.

Post Formats Aside - Generalmente se muestra sin título. Parecido a una publicación en el muro de Facebook. Galería - Galería de imágenes. Enlace - Un enlace a otro sitio web. Imagen - Una única imagen. La primera etiqueta img en el artículo se considerará la imagen. Cita - Una cita. Probablemente contendrá un blockquote con el contenido citado. Además, la cita será el contenido, con la fuente o autor como título. Estado - Actualización de estado, similar a una actualización de Twitter. Vídeo - Un video o playlist de vídeos. Audio - Un fichero de audio o lista de reproducción. Puede utilizarse para Podcasting. Chat - Transcripción de chat.

Post Formats Cómo añado este soporte a mi tema? add_theme_support( 'post-formats', array( 'aside', 'gallery' ) );

Post Formats Y a un tipo de entrada concreto? // Añado post-formats al post_type page' - Páginas add_post_type_support( 'page', 'post-formats' ); // Añado post-formats al post_type my_custom_post_type' add_post_type_support( 'my_custom_post_type', 'post-formats' );

Post Formats Para utilizarlos en el front-end: if ( has_post_format( 'video' )) { echo 'this is the video format'; }

#8 Imagen destacada

Imagen destacada También Post Thumbnail add_theme_support( 'post-thumbnails' ); has_post_thumbnail() - Pregunta the_post_thumbnail() - Muestra (Loop) get_the_post_thumbnail() - Muestra

#9 Child Themes Starter Themes

Child Themes Un "tema hijo" en WordPress es un tema que hereda la funcionalidad de otro tema, llamado "tema padre. Los temas hijos permiten modificar o añadir las funcionalidades del tema padre. Un tema hijo es la forma más segura y fácil de modificar un tema existente, tanto si se quiere hacer pequeños cambios como otros más amplios. En lugar de modificar los archivos del tema directamente, crear un tema hijo y hacerlo prevalecer sobre el tema padre.

Child Themes Por qué utilizarlos? Si modificas un tema existente y se actualiza, se perderán los cambios. Con un tema hijo, puedes subir el tema padre (que puede ser importante por cuestiones de seguridad o funcionalidad) y seguir manteniendo los cambios. Puede acelerar el tiempo de desarrollo. Partimos de un tema desarrollado. Es una buena forma de empezar si se está empezando con el desarrollo de temas WordPress.

Child Themes Crea una carpeta para tu tema hijo en wp-content/themes. Recomendable nombredeltemapadre-child. Crea un style.css (único fichero obligatorio para crear un tema hijo) /* Theme Name: Twenty Fourteen Child Theme URI: http://example.com/twenty-fourteen-child/ Description: Twenty Fourteen Child Theme Author: John Doe Author URI: http://example.com Template: twentyfourteen Version: 1.0.0 Tags: light, dark, two-columns, right-sidebar, responsivelayout, accessibility-ready Text Domain: twenty-fourteen-child */ @import url("../twentyfourteen/style.css"); /* =Aquí empieza la personalización de tu tema -------------------------------------------------------------- */

Child Themes Consejo: no utilizar @import para integrar la hoja de estilos del padre. Utilizar wp_enqueue_style en el functions.php add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' ); function theme_enqueue_styles() { wp_enqueue_style( 'parent-style', get_template_directory_uri(). '/style.css' ); }

Starter Themes underscores.me Es un tema sin estilos con el que empezar a trabajar. No utilizar como Parent Theme.

Starter Themes La cantidad justa de plantillas HTML5, bien comentadas y modernas. Una plantilla 404 útil. Una implementación de header personalizado (opcional) inc/customheader.php Etiquetas personalizadas de plantilla en inc/template-tags.php que mantienen tus plantillas limpias y previenen la duplicación de código. Algunos trucos en inc/extras.php que pueden mejorar tu experiencia desarrollando temas. Un script en js/navigation.js que hace tu menú responsive en pantallas pequeñas. Preparado para tu creatividad CSS. Dos ejemplos de plantillas CSS en layouts/: Una con barra lateral a la derecha y otra con barra lateral a la izquierda. Starter CSS en style.css que te ayudará a empezar tu diseño rápidamente. La licencia GPL en license.txt.