Artículos de la categoría PHP

Comparte en Tuenti tus artículos de WordPress

Botones para compartir en TuentiHace algunos días Tuenti anunció un botón para compartir páginas web en la red social. La pega es que este botón no es tan automático como el de Twitter, y requiere algo más de esfuerzo añadirlo en nuestras páginas web, aunque no es para nada complicado. El botón es básicamente un enlace que contiene una imagen, creado con el siguiente código HTML:

<a href="http://www.tuenti.com/share?url=[URL_DE_NUESTRO_ARTICULO]" target="_blank">
<img src="[IMAGEN_DEL_BOTON]" />
</a>

La URL del enlace apunta a la página de compartir de Tuenti, donde [URL_DE_NUESTRO_ARTICULO] debe ser reemplazado por la URL de nuestro artículo codificada, o bien mediante la función Javascript encodeURIComponent() o bien mediante la función PHP urlencode().

La imagen del botón podemos elegirla nosotros, lo recomendable es usar algunas de las que ofrece Tuenti para no confundir a los usuarios, aunque también podemos crear las nuestras. Por último, los desarrolladores de Tuenti recomiendan que el enlace se abra en una nueva ventana, aunque quizás sería mejor abrir la ventana dentro de una ventana modal en nuestro propio blog, para así evitar tener que abrir una nueva pestaña.

Para añadir el botón de compartir a todos nuestros artículos basta con editar el archivo single.php de nuestro theme de WordPress y añadir en el lugar que queramos mostrar el enlace:

<a href="http://www.tuenti.com/share?url=<?php echo urlencode(get_permalink()); ?>" target="_blank">
 <img src="http://estaticosak1.tuenti.com/layout/web2-Zero/images/corporate/3_share_es_dark.59917.png" />
 </a>

El código simplemente muestra el enlace con el permalink del artículo cofidicado. La URL de la imagen que aparece en el código anterior es la misma que aparece en la página de desarrolladores de Tuenti, así que podéis usar esa o cambiarla por otra. No os recomiendo usar la que hay en el código de ejemplo porque tal vez la ruta a esa imagen cambien en algún tiempo y entonces os dejen de funcionar los botones de compartir.

También podéis añadir el botón a vuestras páginas, no sólo a los artículos, mediante el mismo código.

jCarousel, el nuevo StepCarousel de WP Carousel 0.6

WP Carousel 0.6Estos días he estado probando diversos scripts para crear carruseles y finalmente ya me he decidido por uno. El ganador ha sido jCarousel, un script de Jan Sorgalla que es realmente interesante. Para comenzar, es mucho más fácil de inicializar con pocas opciones de configuración, además de que permite más opciones que StepCarousel, como por ejemplo el tan pedido modo vertical o la posibilidad de elegir la animación que queramos para el carrusel.

Por otro lado, y en lo referente a fechas de lanzamiento, me temo que tardaré más de lo que esperaba en terminar WP Carousel 0.6, de hecho creo que durante unos cuantos días (sino unas semanas) voy a pararme un poco y pensar detenidamente cómo llevar a cabo las novedades que tenía planeadas, sobretodo el tema de la nueva API de themes y la posible nueva API de Extras.

Por último, la imagen que tenéis a la izquierda es una captura de la UI de WP Carousel 0.6 donde se ven los 3 principales cambios que tenía planeados: poder contraer los elementos del carrusel, mostrar una miniatura de la imagen que se mostrará en el carrusel (sólo páginas y artículos) y darle un nuevo aspecto a los checkboxes para hacerlos más entendibles (he optado por darles un aspecto similar a los botones del iPhone porque así podía mostrar un texto al estar activos y otro diferente al no estarlo).

WordPress 3.0.1 ya disponible

Desde anteayer está disponible la versión 3.0.1 de WordPress, que corrige 51 bugs no demasiado críticos. La única novedad más interesante para los desarrollares es que se ha añadido la función unregister_nav_menu(), que como su nombre indica, permite desregistrar un menú.

Podéis actualizar directamente desde el Panel de Administración o descargar la nueva versión.

Comienza el desarrollo de WP Carousel 0.6

No tenía pensado retomar el desarrollo de WP Carousel hasta finales de verano, pero durante estos días que he estado fuera he recibido muchas sugerencias sobre nuevas características, que sumadas a las que tenía en mente al liberar la versión 0.5 hacen que me decante por comenzar el desarrollo de la próxima versión hoy mismo. No me gusta dar fechas de lanzamiento, pero esta versión estará disponible antes de finales de verano, y la siguiente gran revisión tardará mucho en llegar (no tengo pensados grandes cambios después de estos).

En esta versión me centraré en la sección de opciones (veréis muchos cambios a nivel de usuario y otros tantos a nivel de desarrolladores) y en un nuevo motor para los carruseles. A continuación os resumo las principales novedades.

Detectar el último artículo del loop de WordPress

A veces nos interesa saber cuándo se está mostrando el primer o el último artículo del blog de WordPress para, por ejemplo, mostrar una línea de división en todos los artículos menos el último o destacar el primer artículo sobre los demás. Hay varias formas de contar los artículos que ya se han mostrado en el loop de WordPress, en este artículo me voy a centrar en la forma más sencilla que conozco: mediante $wp_query.

$wp_query es un objeto que contiene diversos métodos (funciones) y atributos (variables) acerca de las consultas a la Base de Datos (realmente contiene mucha información). Entre estos atributos hay dos que son los que utilizaremos y que nos facilitan mucho la tarea, se trata de: current_post y post_count. El primero indica cuál es la iteración (repetición) actual del bucle, mientras que el segundo indica el total de artículos que se mostrarán. Es decir, el primero nos dice cuántos artículos se han mostrado ya y el segundo nos indica el total de veces que se ejecutará el bucle.

Con ambos datos tenemos suficiente como para saber cuándo se está mostrando el primer y el último artículo. Lo único que tenemos que tener en cuenta es que current_post comienza en 0, mientras que post_count es el total de artículos que se mostrarán (partiendo de 1). Esto quiere decir que si vamos a mostrar 10 artículos en el bucle, al mostrarse el último artículo el atributo current_post valdrá 9, mientras que el atributo post_count valdrá 10.

A continuación os dejo un bucle de ejemplo para que entendáis mejor lo que quiero decir:

if (have_posts()): while (have_posts()): the_post();

if ($wp_query->current_post == 0)
{
echo 'Este es el primer artículo del bucle';
}

if (($wp_query->current_post + 1) == $wp_query->post_count)
{
echo 'Este es el último artículo del bucle';
}

if ($wp_query->current_post > 0)
{
echo 'Este no es el primer artículo del bucle';
}

if (($wp_query->current_post + 1)  < $wp_query->post_count)
{
echo 'Este no es el último artículo del bucle';
}

if (($wp_query->current_post > 0) && (($wp_query->current_post + 1)  < $wp_query->post_count))
{
echo 'Este no es ni el primer artículo del bucle ni el último';
}

endwhile; endif;

Realmente no tiene mucha complicación y facilita bastante el detectar cuándo se muestra el primer o el último artículo.

Elimina el nuevo filtro de WordPress 3.0

Con la llegada de WordPress 3.0 se ha introducido un nuevo filtro que no aparecía documentado en el codex: se trata de un filtro que reemplaza la palabra “WordPress” por “WordPress“. Esto en principio resulta inofensivo, aunque algo molesto en algunos casos, sin embargo puede provocar algunos problemas con nombres de archivos y URLs, ya que el filtro se aplica a los títulos de los artículos y el contenido tanto de los mismos como de los comentarios.

Este nuevo filtro está definido en el archivo wp-includes/default-filters.php (sobre la línea 90):

// Format WordPress
foreach ( array( 'the_content', 'the_title', 'comment_text' ) as $filter )
	add_filter( $filter, 'capital_P_dangit' );

La función capital_P_dangit() en cuestión está en el archivo  wp-includes/formatting.php (sobre la línea 2828):

/**
 * Forever eliminate "Wordpress" from the planet (or at least the little bit we can influence).
 *
 * Violating our coding standards for a good function name.
 *
 * @since 3.0.0
 */
function capital_P_dangit( $text ) {
       return str_replace( 'Wordpress', 'WordPress', $text );
}

Como podéis ver, la función reemplaza cualquier aparición de “WordPress” por “WordPress“, dando igual que esté en la URL de una imagen o de un enlace, en una cita, en parte de un código (en PHP la variable $Wordpress y $WordPress son variables distintas), lo que puede hacer que algunos ejemplos de código estén mal.

Eliminar el filtro es muy sencillo, basta con añadir al archivo functions.php de nuestro theme (o crear un plugin con el siguiente código):

foreach ( array( 'the_content', 'the_title', 'comment_text' ) as $filter )
	remove_filter( $filter, 'capital_P_dangit' );

Con esto el filtro queda eliminado y volvemos a tener la libertad de escribir WordPress como nos plazca. Yo por mi parte ya he eliminado el filtro en Sumolari.com.

WP Carousel 0.5.3

¿Os acordáis del bug con el guardado AJAX que medio arreglé con un sistema de guardado híbrido? Pues bien, gracias a la colaboración de Joel he encontrado una posible solución definitiva al problema, que no sólo afectaba al guardado AJAX, sino también al Modo de Integración Externa (aunque no se había reportado). La solución es algo tosca, pero parece eficaz: si tras buscar la ruta al archivo wp-blog-header.php, WP Carousel no encuentra la ruta correcta, se prueba a usar la ruta “../../../”, que en teoría debería de ser válida en cualquier caso, si esta ruta es correcta, se procede con el guardado AJAX, si es incorrecta, se procede con el guardado alternativo.

Por el momento parece que este método funciona, ya que aquellos usuarios que usaban el guardado AJAX sin problemas seguirán usándolo como hasta ahora, mientras que aquellos que tenían problemas usarán la ruta “../../../” (ruta que de hecho es la que obtiene en mis pruebas el método usado en la versión 0.5.2). Si ni aún así se encuentra la ruta, el plugin utilizará el guardado no AJAX, que aunque no es ni tan rápido ni tan cómodo como el AJAX, guarda los cambios.

WP Carousel 0.5.3 ya está en WordPress.org, y en unos minutos os aparecerá la actualización en el Panel de Administración de WordPress. ¡Recordad que WP Carousel 0.5 sólo es compatible con WordPress 3.0 (y posteriores)!

WP Carousel 0.5.1 & WP Carousel 0.5.2

Hace tan sólo un día que puse por defecto la versión 0.5 de WP Carousel, y ya han aparecido dos bugs. El primero es bastante tonto: resulta que me confundí al escribir el nombre de la página de Importación y en lugar de Importar ponía Exportar (en todos los idiomas). El segundo es algo más grave, y es que el guardado AJAX requiere poder acceder al archivo wp-blog-header.php del blog, si WP Carousel no puede acceder a él, devuelve un mensaje de error explicando lo sucedido. Pues bien, resulta que metí ese mensaje dentro de la función de traducción, que es definida tras la carga del archivo wp-blog-header.php, provocando que los usuarios no puedan ver el mensaje de error.

Fuera de esto, la versión 0.5.1 incluye la versión en francés, traducida por EURL Wolforg.

A todos aquellos que tengáis problemas con el guardado AJAX os recomiendo que paséis por el foro y pongáis el mensaje de error que obtenéis. Tanto en mi servidor de pruebas como en la página de demos de WP Carousel el guardado AJAX funciona correctamente, así que seguramente se trate de un tema de permisos, pero por si acaso, reportad el fallo y veré si puedo solucionarlo de algún modo sin cambiar permisos. Si veis que cambiando los permisos se soluciona el problema, entonces cambiadlos si podéis y os olvidáis del error.

Actualizo: He desarrollado un nuevo método de guardado híbrido. Cuando WP Carousel detecta un error con el guardado AJAX, muestra un enlace para guardar el contenido sin recurrir a AJAX. Con este sistema, los usuarios que puede usar AJAX podrán guardar el contenido sin cargar una nueva página, y los usuarios que no puedan usarlo podrán seguir disfrutando de la interfaz Drag & Drop y de todas sus novedades, a excepción, claro, del guardado AJAX. Una vez hayan acabado los cambios tendrán que hacer clic en el enlace para guardarlos. Eso sí, pueden hacer varios cambios seguidos y guardar después de haberlos hechos todos, e incluso puede eliminar y añadir contenido del carrusel y guardar una sola vez después de todo el proceso. Esta mejora está en la versión 0.5.2 de WP Carousel, que estará disponible en unos minutos.

Descarga Portal Colorido V 1.x

Con la salida de Portal Colorido 2.0, la rama 1.x se quedó obsoleta. Sin embargo, todavía hay algunas cosas únicas de esta antigua versión, como la integración con Foro Colorido. Lamentablemente, al subir las nuevas versiones de Portal Colorido a WordPress.org, las antiguas quedaron inaccesibles, algo de lo que no me había dado cuenta.

Afortunadamente Víctor me avisó del problema, y ha dado la casualidad de que tenía una copia de la versión 1.0.2.3 en mi servidor de pruebas, así que la he subido a Sumolari.com y la podéis descargar desde aquí.

Ya está disponible toda la documentación de WP Carousel

Hoy he terminado de subtitular y traducir toda la documentación de WP Carousel, que se encuentra dividida en dos partes. Por un lado está la documentación para usuarios, disponible en Youtube, como podréis adivinar, se trata de vídeos explicativos, divididos en dos partes debido a la limitación de 10 minutos de Youtube (Parte IParte II)

Al final me he decantado por usar vídeos para explicar el funcionamiento porque son más claros que un texto de 500 palabras. Además, al verse el proceso queda aún más claro cómo se hacen las cosas. Obviamente estos vídeos están subtitulados para evitar cualquier problema auditivo. También he subido los vídeos a Megaupload para que quien quiera pueda descargarlos y verlos en cualquier momento, estos vídeos además tienen más calidad ya que Youtube me ha reducido considerablemente la calidad de los vídeos.

Por otro lado, la documentación para desarrolladores está completamente por escrito, ya que me baso principalmente en código comentado y esto es mucho más claro por escrito que en vídeo, narrado o en imágenes. Tanto la documentación en vídeo para los usuarios como la documentación escrita para desarrolladores está disponible tanto en español como en inglés.

Por último, he subido a WordPress.org una versión preliminar de WP Carousel 0.5. Aún estoy pendiente de recibir la traducción al francés, así que hasta entonces no estará por defecto la versión 0.5, sin embargo se puede descargar sin ningún problema, y a excepción de la traducción al francés, no hay ninguna diferencia entre esta versión preliminar y la versión final (a no ser que detecte algún bug que se me haya pasado).