Artículos sobre trucos

Jerarquía de WordPress

Jerarquía de WordPress

WordPress utiliza una jerarquía a la hora de cargar los archivos de un theme, de modo que se puede cargar un archivo por defecto, uno diferente para categorías o inluso uno distinto para cierta categoría, pero esto no acaba aquí, ya que también se puede aplicar a tags, páginas, artículos, fechas y demás.

Por ello es necesario conocer la jerarquía que utiliza WordPress, que están recopiladas en un PDF creado por Angie Bowen, que he encontrado vía AyudaWordPress y que podéis ver a la izquierda.

No hay comentarios

Conocer la versión que se usa del CMS de un sitio web es algo muy útil para los hackers, ya que sabiendo este dato pueden revisar los cambios que hay entre dicha versión y las siguientes, con lo que pueden saber las vulnerabilidades que presenta la página en pocos minutos.

Por defecto WordPress muestra este número en varios sitios, y en AyudaWordPress han publicado un pequeño código que lo oculta de cualquier lugar donde aparezca. El código es bastante simple, y aplica un filtro a la función que muestra el número de la versión, no devolviendo nada en lugar de devolver el contenido filtrado.

Añadiendo este código al archivo functions.php de nuestro theme, ocultaremos el número de la versión y haremos nuestro blog más seguro. Desde luego, la solución es increíblemente senzilla e inteligente :) .

//Elimina referencias a la version de WordPress
function quitar_version_wp() {
return '';
}
add_filter('the_generator', 'quitar_version_wp');
No hay comentarios

Haz que WordPress cargue los frameworks desde servidores externos

WordPress utiliza varios frameworks Javascript para hacer diversos efectos y mejorar a interfaz, además de que algunos themes se aprovechan de esto para añadir mejoras al diseño utilizando funciones que ofrecen estos frameworks. Recurrir a estos métodos ocasiona un aumento del tiempo de carga de la página y del ancho de banda consumido por el servidor al enviar los archivos solicitados al usuario, sin embargo, podemos hacer que WordPress cargue estos archivos desde servidores externos que nos reducen el ancho de banda gastado y que, en algunos casos, son más rápidos que nuestro servidor. Además, usar este método también nos permite cargar automáticamente la versión más actualizada de los diversos frameworks, evitando tener que volver a subir las nuevas versiones a nuestro servidor.

En este artículo me centraré en jQuery, jQuery UI y Prototype, los frameworks que utiliza actualmente Sumolari.com, pero antes de hacer que WordPress cargue los archivos desde servidores externos (usaremos los de Google), veremos primero el método general.

wp_deregister_script, wp_register_script y wp_enqueue_script

WordPress tiene varias funciones para gestionar el código Javascript que se carga en cada página. Esta funciones permiten, a grandes rasgos, añadir un script con un nombre identificatorio (del cual se definen la URL del archivo, las dependencias, la versión o incluso si se puede cargar en el pie de página o no), eliminarlo o cargarlo.

Para el primero de todos los usos, recurriremos a la función wp_register_script. Esta función tiene 5 parámetros: $handle, $src, $deps, $ver e $in_footer.

wp_register_script( $handle, $src, $deps, $ver, $in_footer );

La primera de todas debe contener el nombre identificatorio del script. Yo recomiendo usar nombres coherentes, así evitamos posibles problemas al usar muchos scripts y no distinguir unos de otros por su nombre.

El segundo parámetro de la función indica la URL del archivo a cargar. Tanto el primer parámetro como éste son obligatorios, los otros tres son opcionales y son, por orden de aparición, la matriz que indica las dependencias (estas dependencias se deben indicar usando el nombre identificatorio del script correspondiente), la versión del archivo a cargar (se utiliza para evitar problemas con la caché y demás, pero en muchos casos basta con dejarlo en blanco) y si el script se puede cargar al final de la página o no.

La función wp_deregister_script es la que elimina un script previamente registrado. Esto nos permitirá eliminar los script registrados por WordPress y añadir los nuestros modificados. El uso sería el siguiente:

wp_deregister_script( $handle );

La función wp_enqueue_script es la que le indica a WordPress que debe cargar cierto script. Admite los mismos parámetros que wp_register_script, sólo que en la primera, a diferencia de la segunda, el nombre identificatorio le indica a la función qué script debe cargar (ya que esta función no registra ningún script) y sólo usará los demás parámetros en caso de no existir el script solicitado.

El uso es el siguiente:

wp_enqueue_script( $handle ); // Mínimo
wp_enqueue_script( $handle, $src, $deps, $ver, $in_footer ); // Parámetros opcionales

Tenéis más información sobre estas funciones en el Codex de WordPress.

Dicho lo cual ya podemos pasar a aplicar lo visto hasta ahora.

Cargando jQuery, jQuery UI y Prototype desde los servidores de Google

Una pequeña aclaración antes de comenzar: podemos cargar cualquier script de WordPress (lista completa) desde cualquier servidor, de hecho veréis como no es nada complicado hacerlo.

Los scripts están alojados en los servidores de Google, que ofrecen una buena velocidad y se actualizan con cada nueva versión. También almacenan versiones antiguas de los frameworks, con lo que podemos optar por cargar una versión actualizada, la última o una más antigua.

El proceso para cargar los scripts es el siguiente:

  1. Eliminamos (des-registramos) el script correspondiente a los frameworks jQuery, jQuery UI y Prototype de WordPress
  2. Registramos de nuevo los tres scripts anteriores, cambiando la URL de los archivos
  3. Cargamos los scripts recién registrados

Esto en código quedaría así:

// jQuery
		wp_deregister_script('jquery'); // Des-registramos jQuery
		wp_register_script('jquery', ("http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"), false, ''); // Registramos de nuevo jQuery, con la URL de la última versión del framework alojada en el servidor de Google
		wp_enqueue_script('jquery'); // Cargamos jQuery

		// jQuery-UI
		wp_deregister_script('jquery-ui-core'); // Des-registramos jQuery-UI
		wp_register_script('jquery-ui-core', ("http://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js"), false, ''); // Registramos de nuevo jQuery-UI, con la URL de la última versión del framework alojada en el servidor de Google
		wp_enqueue_script('jquery-ui-core'); // Cargamos jQuery-UI

		// Prototype
		wp_deregister_script('prototype'); // Des-registramos Prototye
		wp_register_script('prototype', ("http://ajax.googleapis.com/ajax/libs/prototype/1/prototype.js"), false, ''); // Registramos de nuevo Prototype, con la URL de la última versión del framework alojada en el servidor de Google
		wp_enqueue_script('prototype'); // Cargamos Prototype

Como veis, no tiene mucho misterio y es muy fácil ampliarlo a otros scripts. Como siempre, cualquier duda o sugerencia la podéis hacer en los comentarios.

Nota: La versión que carga por defecto WordPress de jQuery incluye una llamada a la función  jQuery.noConflict, por lo que en el primer script que utilice jQuery deberemos hacer una llamada a esta función para asegurar que todos los scripts funcionen correctamente.

Un comentario

Ocultando artículos y categorías del loop de WordPress

Nota: Para entender este tutorial son necesarios unos conocimientos básicos de PHP (sobretodo de matrices) y de WordPress (para saber las IDs del contenido y el lugar donde poner el código).

Hay veces en las que queremos ocultar ciertos artículos o categorías del loop de WordPress (el bucle principal que se encarga de mostrar el contenido de la página). En estos casos podemos recurrir a diversos métodos, como comprobar dentro del propio bucle si el artículo está en cierta categoría o tiene una ID determinada. Sin embargo, estos métodos no se pueden aplicar a plugins porque estos no pueden modificar código del bucle, así que debemos buscar un método diferente.

Mostrando $wp_query

Mostrando $wp_query

Durante el desarrollo de la versión 0.4 de WP Carousel me topé con este problema, y decidido a superarlo, tomé la vía probablemente más radical: modificar la variable $wp_query. Esta variable almacena toda la información referente a las consultas a la Base de Datos, incluyendo el contenido consultado, los filtros aplicados, el orden. De hecho, si imprimimos esta variable, obtendremos un resultado enorme, que podéis ver en parte en la imagen de la izquierda.

Alterando el contenido de esta variable se pueden hacer multitud de cosas, sin embargo nos centraremos en ocultar contenido del bucle.

Si nos fijamos en la variable, veremos que es una matriz. Los índices que nos interesan son los siguientes: category__not_in, tag__not_in y post__not_in. Son unos índices con unos nombres realmente descriptivos, ¿verdad? El primero nos permite eliminar categorías del bucle, el segundo nos permite eliminar etiquetas y el último nos permite eliminar artículos individuales.

El contenido de estos índices debe ser una matriz, la cual almacenará en todos los casos las IDs del contenido a ocultar. Veamos de forma práctica cómo ocultaríamos las categorías 3, 19 y 62 del bucle:


$wp_query->query_vars['category__not_in'] = array(3, 19, 62);

$wp_query->query($wp_query->query_vars);

La primera línea está clara, pero, ¿y la segunda? Se trata de una llamada a la función query(), que vuelve a realizar la consulta y elimina el contenido previamente guardado. Antes he comentado que esta variable almacena resultados de las consultas, así que es necesario limpiar la variable de resultados antiguos y rellenarla de nuevos, de otro modo no siempre funcionaría el código.

Este código no funciona en cualquier lugar de WordPress. Si pensamos con un poco de lógica, llegaremos a la conclusión de que debemos poner el código antes del bucle (porque si lo ponemos después, ya se habrá mostrado el contenido y no habrá nada que filtrar). Pero, ¿en qué lugar añadirlo? Bien, realmente se puede añadir en cualquier lugar antes del bucle. En el archivo functions.php del theme, en un plugin por separado (como ocurre con WP Carousel) o incluso justo antes del bucle. Eso sí, dependiendo de en qué lugar ponemos el código, la segunda línea (que actualiza los resultados) será necesaria u opcional. Por comodidad, podéis dejarla siempre, aumentará el número de consultas a la Base de Datos, pero cómo se hará uso de esta función en determinadas ocasiones, no es demasiado preocupante.

Pasemos a otro ejemplo: ocultemos los artículos con la etiqueta con ID 54.


$wp_query->query_vars['tag__not_in'] = array(54);

$wp_query->query($wp_query->query_vars);

Otro ejemplo bastante claro. Por último sólo nos quedaría ocultar artículos. Estoy seguro de que ya adivináis cómo se ocultarían los artículos con IDs 1, 7 y 42:


$wp_query->query_vars['post__not_in'] = array(1, 7, 42);

$wp_query->query($wp_query->query_vars);

Realmente no tiene mucha complicación, pero antes de acabar el tutorial debeís tener en cuenta un par de cosas:

  1. La variable $wp_query almacena contenido importante, y es recomendable hacer una copia de la variable para poder restaurarla más adelante, algo como:
    $wp_query_old = $wp_query;

    Así en caso de detectar un error en las modificaciones realizadas a la matriz, el script puede recuperar el contenido original.

  2. Modificar la consulta en ciertas páginas puede dañar el resultado, sobretodo cuando se visualiza una página individual o un artículo en solitario. Es recomendable modificar la matriz sólo cuando estamos en el index del blog (donde nos interesa ocultar o mostrar artículos).
  3. Este método sólo es adecuado para plugins. Si quisiéramos modificar nuestro theme, tenemos a nuestra disposición métodos aún más fáciles y menos intrusivos que éste.
  4. ¡No ocultemos contenido sin avisar antes al usuario! Todos estos cambios son invisibles para el usuario medio, y más de uno se llevaría una desagradable sorpresa al ver desaparecer sus artículos misteriosamente del índice de su blog.

Dicho esto, ahora es cosa vuestra experimentar. Tenéis más información sobre los índices que podéis modificar en esta página (aunque habla de una función diferente, muchos de los parámetros son equivalentes a los índices de la matriz).

Si tenéis problemas o dudas, preguntad en los comentarios.

2 Comentarios

Una de las cosas que más me gustan de Mac OS X es, sin duda, Vista Rápida. Consiste básicamente en una aplicación que te permite previsualizar prácticamente cualquier tipo de archivo de forma instantánea, ya sean imágenes, documentos de texto, páginas web o incluso código. Este último se visualiza sólo en negro, lo cual no es muy cómodo a la hora de identificar la función de cada parte del código.

Sin embargo, vía Applesfera descubro un plugin para Vista Rápida que habilita el coloreado del código, lo cual afecta tanto a Vista Rápida como a las miniaturas de los archivos. La instalación no podría ser más sencilla: se descarga y se descomprime este archivo y a continuación se copia el archivo QLColorCode.qlgenerator a la carpeta Librería/QuickLook.

No hay comentarios

Mac OS X incorpora TextEdit, un procesador de textos al estilo de WordPad (el que viene por defecto en Windows), que aunque en principio parece ser más básico y tener menos funciones, realmente oculta muchas de sus posibilidades.

En el videotutorial que teneís a continuación (creado por K-tuin) se explica cómo añadir imágenes, vídeos o archivos PDF a nuestros documentos de texto.

No hay comentarios

Ayer publicaron en Smashing Magazine una lista de 45 técnicas realmente útiles de CSS / Javascript, como hacer que las listas (<ul>, <ol>) parezcan tablas, mostrar un reloj con un indicador circular con jQuery o incluso mostrar una línea del tiempo usando sólo CSS y listas.

No hay comentarios

Programa un apagado o reinicio en Mac OS X

El Mac está programado para apagarse en 10 minutos

El Mac está programado para apagarse en 10 minutos

Programar el apagado del equipo es algo realmente útil que nunca sabes cuándo vas a utilizar, pero que seguro que te vendrá genial en más de una ocasión. Por ejemplo, cuando quieres dejar el equipo haciendo una copia de seguridad que durará un par de horas y tienes que irte a una reunión a la que no puedes faltar o en aquellos casos en los que quieres dejar el equipo conectado un par de horas durante la noche pero no quieres preocuparte por apagarlo al despertarte.

Hace algún tiempo expliqué cómo programar un apagado en Windows, y hoy explicaré cómo programar un apagado en Mac OS X (el cual creo que se programa de forma muy similar en Linux).

Programar el apagado en Mac OS X es algo bastante simple, para lo cual recurriremos a la terminal y a la función shutdown. Esta función acepta bastantes parámetros pero nos centraremos tan sólo en el modo y en el tiempo, y de forma algo superficial (realmetne hay muchas opciones a la hora de programar el apagado, pero en la mayoría de los casos no las usaremos).

La sintaxis de la función es la siguiente: shutdown [-] [-h [-u] | -r | -s | -k] [-o [-n]] time [warning-message ...] (ojo, tenemos que ejecutar la función en modo superusuario, así que añadiremos sudo antes de la función). De todos estos parámetros, nos centraremos en el tiempo y en el modo de apagado y reinicio, simplificando la sintaxis que usaremos a esto: shutdown [-h | -r] time.

El apagado se ha cancelado

El apagado se ha cancelado

El primer parámetro indica el modo (por llamarlo de alguna forma). Disponemos de muchos modos, pero nos centraremos en el apagado (-h) y en el reinicio (-r). Los demás los dejaremos para otro día.

El segundo parámetro es el tiempo, que podemos indicarlo de dos formas diferentes: o bien indicando el tiempo que pasará, o bien indicando la fecha en la que ocurrirá. La principal diferencia es que el primero lo usaremos en aquellos casos en los que nos interesa que trascurra cierto tiempo hasta el apagado mientras que el segundo lo usaremos en aquellos casos en los que nos interesa que a cierta hora (y fecha) el equipo se apague. El tiempo en el primer caso se indica con un signo + delante y se indica en minutos. En el segundo caso se especifica usando la siguiente sintaxis: yymmddhhmm. Año, mes, día, hora y minuto. Si queremos apagar el equipo de inmediato, podemos usar la palabra now (ahora) a modo de tiempo.

Dejemos de lado la teoría y pasemos a la práctica, imaginemos que queremos apagar el equipo dentro de 3 horas y media, pues bien, usaremos el siguiente código:

sudo shutdown -h +210

Ahora, por ejemplo, supongamos que queremos reiniciar el equipo el día 31 a las 23:59, bien, la función quedaría así:

sudo shutdown -r 0912312359

También podemos cancelar un apagado programado cerrando el proceso shutdown, como antes, tenemos que hacerlo en modo de superusuario, quedando así el código:

sudo killall shutdown

Como podéis ver, no tiene mucha dificultad y da mucho juego, teniendo en cuenta que hasta podemos determinar la fecha del apagado, lo cual le da más juego.

No hay comentarios

Cuando se escribe en un blog personal, administrador por un único usuario (como este mismo blog, por ejemplo) mostrar la información sobre el autor no es imprescindible, teniendo en cuenta que podemos mostrarla en la página de información sobre el propio blog. Sin embargo cuando se escribe en un blog gestionado por diversos autores, es conveniente mostrar algo de información sobre el autor de cada artículo, de modo que los lectores puedan saber quién ha escrito cada contenido.

Pues bien, hace unos días publicaron en Xyberneticos un excelente tutorial explicando las principales funciones de WordPress orientadas a mostrar información sobre los autores. Información como la biografía del autor, el avatar, el o incluso el recuento de artículos publicados.

Sin duda, un artículo imprescindible para aquellos proyectos que tienen diversos autores y usan WordPress como CMS.

Un comentario

Mostrar los errores de WordPress

DebugPor defecto WordPress oculta los errores de PHP, y esto puede venirnos bien para evitar que posibles atacantes puedan ver dónde están localizados los errores, lo cual hace más difícil atacar el servidor. Sin embargo hay veces en las que conviene ver esos errores, por ejemplo a la hora de revisarlos para poder arreglarlos. En esos casos es muy útil que se muestren los errores y para ello hay que deshabilitar ese comportamiento de WordPress, o mejor dicho, activar el modo debug de WordPress.

Abrimos el archivo wp-config.php y añadimos la siguiente línea:

define('WP_DEBUG', true);

Sin aún así no se muestran los errores, añadid esta otra línea a continuación de la anterior:

ini_set("display_errors", 1);

Si tenéis algún problema y queréis pedir ayuda, no olvidéis que en el archivo wp-config.php se encuentra la contraseña y el usuario de vuestra Base de Datos, así que tened cuidado con qué código vais a compartir.

No hay comentarios