Archivo de septiembre, 2012
WordPress 3.x para desarrolladores: Temas y plantillas, conceptos básicos.
0Los temás en WordPress se alojan en la carpeta /wp-content/themes. En cada tema encontraremos los diferentes archivos que lo componen (archivos css, plantillas, archivo functions.php, imágenes y archivos javascript).
TEMAS HIJOS
En WordPress puedes crear temas que sean derivados o hijos de otros. Por ejemplo, si en /wp-content/themes un tema llamado twentyeleven, solo habría que crear otro con el mismo nombre pero añadiendo al final -child. Por tanto tendríamos /wp-content/themes/twentyeleven y /wp-content/themes/twentyeleven-child.
Como mínimo un tema hijo debe contener el archivo style.css, el resto de archivos son opcionales (plantillas, archivo functions.php, css, javascript, etc)
HOJAS DE ESTILO DE LOS TEMAS
Cada tema deberá tener un archivo css llamado style.css donde se añadirá información sobre el tema que se está utilizando. Ejemplo:
/* Theme Name: Twenty Ten Theme URI: http://wordpress.org/ Description: The 2010 default theme for WordPress. Author: wordpressdotorg Author URI: http://wordpress.org/ Version: 1.0 Tags: black, blue, white, two-columns, fixed-width, custom-header, custom-background, threaded-comments, sticky-post, translation-ready, microformats, rtl-language-support, editor-style, custom-menu (optional) License: License URI: General comments (optional). */
DIRECTRICES DE LAS HOJAS DE ESTILO
- Cumplir con las normas CSS durante la creación de tus CSS.
- Usar CSS válido siempre que sea posible. Como excepción, el uso de prefijos específicos de los proveedores para tomar ventaja de las características de CSS3.
- Minimizar hacks CSS. La excepción obvia es navegadores con soporte específico, por lo general las versiones de IE. Si es posible, hacks CSS separados en secciones separadas o archivos separados.
- Todos los elementos HTML posibles deben ser estilizados por el tema, tanto el contenido de los post/páginas y en el contenido de los comentarios.
- Tablas, títulos, imágenes, listas, bloques de citas, etcétera.
- Añadir estilos para impresión es muy recomendable.
- Puede incluir una hoja de estilos de impresión con media=»print» o añadir en un bloque de medios impresos en su hoja de estilo principal.
ARCHIVO DE FUNCIONES
Un tema puede opcionalmente usar un archivo de funciones, el cual residirá en el subdirectorio del tema y se nombrará como functions.php. Este archivo básicamente actua como un plugin, y si está presente en el tema que tu estás usando, será automáticamente cargado durante el inicio de WordPress. Algunos usos sugeridos para este archivo:
- Habilitar las funciones de temas, tales como barras laterales, menús de navegación, miniaturas post, formatos de post, los encabezados personalizados, fondos personalizados, entre otros.
- Definir las funciones utilizadas en varios archivos de plantilla del tema.
- Crear un menú de opciones, dando a los propietarios del sitio opciones de colores, estilos y otros aspectos de su tema.
ARCHIVOS DE PLANTILLAS
Las plantillas son archivos de código PHP utilizadas para generar las páginas solicitadas por los visitantes. Echemos un vistazo a las distintas plantillas que se pueden definir como parte de un tema.
LISTA DE ARCHIVOS DE PLANTILLAS
Esta lista muestra los principales archivos de plantilla de WordPress para cada tema, aunque no tienen porqué crearse todos si no es necesario.
- style.css: La hoja de estilos principal. Debe ser incluido en el tema y contener la información del encabezado.
- rtl.css: La hoja de estilo RTL. Se incluirá de forma automática si la dirección del texto de la página web es de derecha a izquierda. El archivo puede ser generado usando el plugin RTLer.
- index.php: La plantilla principal. Si el tema proporciona sus propias plantillas, index.php debe estar presente.
- comments.php: La plantilla de comentarios.
- front-page.php: La plantilla de la página principal. Usala solo si usas una página estática como página principal.
- home.php: La plantilla de página de inicio, la cual es la página principal por defecto. Si utiliza una página estática esta es la plantilla para la página con los últimos mensajes.
- single.php: La plantilla de post único. Se utiliza cuando se consulta un solo post.
- single-<post-type>.php: Esta plantilla es utilizada para mostrar una plantilla concreta para cada tipo de entrada o post.
- page.php: Usada cuando se consulta una página individual.
- category.php: Usada cuando una categoría es consultada.
- tag.php: Usada cuando se pide una lista de entradas relacionadas con una etiqueta o tag.
- taxonomy.php: Usada cuando se pide una lista de entradas relacionadas con un término o term de una taxonomía
- author.php: Usada cuando se pide una lista de entradas escritas por un autor.
- date.php: Usada cuando se pide un listado de entradas por fecha.
- archive.php: La plantilla de archivo. Se utiliza cuando una categoría, autor o fecha es consultada. Tenga en cuenta que esta plantilla va a ser reemplazada por category.php, author.php y date.php por sus respectivos tipos de consulta.
- search.php: Usada cuando se realiza un búsqueda.
- attachment.php: Se visualiza cuando se muestra un archivo adjunto.
- image.php: Se utiliza cuando se visualiza un archivo adjunto de imagen único. Si no está presente, attachment.php se utilizará.
- 404.php: Se utiliza cuando WordPress no puede encontrar una entrada o página para la consulta realizada.
PLANTILLAS BÁSICAS
Lo archivos mínimos que debe contener un tema de WordPress son:
- style.css
- index.php
- comments.php
- comments-popup.php
- footer.php
- header.php
- sidebar.php
WordPress 3.x para desarrolladores: Convenciones
0Aunque es un tema cuanto menos, aburrido, es muy necesario a la hora de trabajar en grupo, o si vas a publicar tu plugin o plantilla en WordPress. Las convenciones son normas aplicadas al código para que todos los desarrolladores puedan interpretar el código sin muchos problemas. También por estética: queda más elegante un código con la misma tabulación (por ejemplo) en cada linea que, que cada programador ponga la tabulación que se le antoje. Sin más preámbulos vamos al tema:
COMILLAS SIMPLES Y DOBLES
[codesyntax lang=»php»]
<?php echo '<a href="/static/link" title="Yeah yeah!">Link name</a>'; echo "<a href='$link' title='$linktitle'>$linkname</a>"
[/codesyntax]
Si no tienes nada que evaluar en la cadena, pon comillas simples, sino comillas dobles.
SANGRÍA
Usa tabulaciones y no espacios.
[codesyntax lang=»php»]
<?php $foo = 'somevalue'; $foo2 = 'somevalue2'; $foo34 = 'somevalue3'; $foo5 = 'somevalue4';
[/codesyntax]
Los arrays asociativos deberían empezar en una linea nueva.
[codesyntax lang=»php»]
<?php $my_array = array( 'foo' => 'somevalue', 'foo2' => 'somevalue2', 'foo3' => 'somevalue3', 'foo34' => 'somevalue3', );
[/codesyntax]
LLAVES
En bloques multilinea se deben poner las llaves tal como sigue:
[codesyntax lang=»php»]
<?php if ( condition ) { action1(); action2(); } elseif ( condition2 && condition3 ) { action3(); action4(); } else { defaultaction(); }
[/codesyntax]
Si solo hay una linea en cada bloque se pueden omitir por brevedad.
[codesyntax lang=»php»]
<?php if ( condition ) action1(); elseif ( condition2 ) action2(); else action3();
[/codesyntax]
Si hay un bloque con más de una linea se deberán escribir con llaves:
[codesyntax lang=»php»]
<?php if ( condition ) { action1(); } elseif ( condition2 ) { action2a(); action2b(); }
[/codesyntax]
Los bucles deben contenerse siempre entre llaves:
[codesyntax lang=»php»]
<?php foreach ( $items as $item ) { process_item( $item ); }
[/codesyntax]
NO UTILIZAR LA ETIQUETA DE INICIO CORTA DE PHP
La forma correcta sería:
<?php ... ?>
NO CERRAR EL SCRIPT DE PHP CON SU ETIQUETA
Es decir en vez de usar:
<?php ... ?>
Usaremos solo la inicial
<?php ...
USO DEL ESPACIO
Pon espacios siempre después de las comas y en ambos lados de los operadores lógicos, de comparación, de cadenas y de asignación.
x == 23 foo && bar ! foo array( 1, 2, 3 ) $baz . '-5' $term .= 'X'
Pon espacios a ambos lados de los paréntesis de apertura y cierre.
foreach ( $foo as $bar ) { ...
Cuando definas una función, hazlo así:
function my_function( $param1 = 'foo', $param2 = 'bar' ) { ...
Al realizar comparaciones lógicas:
if ( ! $foo ) { ...
Cuando hagas una conversión de tipos:
foreach ( (array) $foo as $bar ) { ... $foo = (boolean) $bar;
Cuando se hace referencia a un elemento de un array, solo se incluyen espacios en blanco cuando es una variable:
$x = $foo['bar'];$x = $foo[ $bar ];
FORMATEO DE SENTENCIAS SQL
Las partes de la sentencia que sean palabras de SQL deben ir en mayusculas, como SELECT o WHERE.
Es recomendable usar el método $wpdb->prepare() para formatear la sentencia SQL. Este método añadirá las comillas a los valores que lo necesiten.
$var = "dangerous'"; // Los datos en crudo podrían o no necesitar ser formateados $id = some_foo_number(); // El dato que nosotros esperamos es un número, pero no estamos seguros $wpdb->query( $wpdb->prepare( "UPDATE $wpdb->posts SET post_title = %s WHERE ID = %d", $var, $id ) );
%s se utiliza cuando el valor es una cadena (string) y %d cuando es un número. En el método prepare() se añaden las variables que se formatearán y añadirán a la consulta en orden.
CONVENCIONES DE NOMENCLATURAS
Usa letras minúsculas en variables y nombres de funciones. Separa las palabras con guiones bajos (_).
function some_name( $some_variable ) { [...] }
Los nombres de clases deben utilizar palabras capitalizadas separadas con guiones bajos. Las siglas deben estar en mayúsculas:
class Walker_Category extends Walker { [...] } class WP_HTTP { [...] }
Los archivos deben ser nombrados descriptivamente con letras minúsculas y las palabras deben separarse con guiones.
my-plugin-name.php
Los nombres de archivos de clase se basarán en el nombre de la clase precedido de class- y los guiones bajos de la clase serán sustituidos por guiones, por ejemplo WP_Error pasa a ser:
class-wp-error.php
VALORES DE PARÁMETROS DE FUNCIONES AUTOEXPLICATIVOS
Se prefieren valores de cadena que solo true y false cuando se llama a las funciones.
// Correcto function eat( $what, $speed = 'slowly' ) { ... } eat( 'mushrooms' ); eat( 'mushrooms', 'slowly' ); eat( 'dogfood', 'fast' );
OPERADOR TERNARIO
El operador ternario está bien, pero siempre que lo uses prueba que la sentencia sea verdad, no falsa. De la otra forma es confuso. En el caso de empty() se permite el uso de ! empty(), ya que es más legible.
// (si la sentencia es verdad) ? (hacer esto) : (sino, hacer esto); $musictype = ( 'jazz' == $music ) ? 'cool' : 'blah'; // (si el campo no está vacío ) ? (hacer esto) : (sino, hacer esto);
CONDICIONES YODA
if( true == $the_force ){ $victorious = you_will( $be ); }
Siempre que hagas comparaciones lógicas pon la variable en el lado derecho, la constante o el literal en el izquierdo.
Esto se utiliza para en el caso de que en vez de == pongas = (admítelo, más de una vez te habrá pasado), de esta manera saltará un error ya que no puedes asignar a una constante el valor de la variable.
Es un poco extraño, pero útil.
CÓDIGO LIMPIO
En general, la legibilidad es más importante que la limpieza o la brevedad.
isset( $var ) || $var = some_function();if ( ! isset( $var ) ) $var = some_function();
WordPress 3.x para desarrolladores: Introducción
0Después de varias semanas buscando información sobre WordPress para un proyecto que tenía pendiente (ya acabado), he observado que hay cierta escasez de información sobre el desarrollo de WordPress, ya que la mayoría de tutoriales o manuales que rondan por internet están limitados a la creación básica de plugins o a lo más básico de la creación de plantillas.
Por ello voy a realizar un tutorial que, basandome en el tema Twenty Eleven de WordPress permita conocer el funcionamiento de los temas y las plantillas. Para desarrollar la parte de los plugins se creará uno de ejemplo.
Muchos ejemplos de código serán de la documentación principal de WordPress y es la que deberías consultar más habitualmente si vas a desarrollar para WordPress: http://codex.wordpress.org/Main_Page
Durante las próximas semanas publicaré un tema por semana hasta que se complete el tutorial.