Contenido

7 consejos para soportar un efecto Digg

24 Jun

+ 15

Llamamos efecto Digg, a lo que se avecina cuando tu página llega a la portada de Digg. La oleada de visitas en el mismo momento hacen colapsar a la mayoría de sitios web. Actualmente, se trata de uno de los efectos más devastadores que hay ya que la gran afluencia de tráfico del sitio se redirige a tu server como un rio desbocado.

Evitar problemas frente a un efecto de esta envergadura es relativamente sencillo si partimos de unas bases obligatorias:

  1. Hosting potente
  2. Optimización de Apache (ver más)
  3. Optimización de Mysql (ver más)
  4. Optimización del PHP (ver más)
  5. Desactivar los plugins
  6. Use wp-cache (o cualquier otro plugin de cacheo)
  7. Almacena tus imagenes en servidores externos.

Tambien es importante rezar y esperar a que todo esto aguante :D

Fuente en inglés

40 consejos y trucos para Wordpress

23 Jun

+ 6

Esto tiene ya unos días, pero leo un artículo de Carlos Leopoldo en el que nos muestra 40 consejos y trucos de Wordpress. Una traducción del artículo de Hongkiat en el que nos muestra una buena lista de tutoriales con trucos y consejos para mejorar nuestro Wordpress:
Continua —>

Comprendiendo el fichero comments.php

9 Jun

+ 2

Cuando decidimos ponernos a crear un theme para nuestro Wordpress, tenemos que prestar especial atención al fichero comments.php, ya que es el encargado de que un blog deje de ser una página estática en la que se va colgando la información.

Este fichero, se encarga de gestionar todo lo relacionado con el sistema de comentarios de Wordpress, nos permite mostrar los comentarios relacionados a una entrada, pingbacks/trackbacks y además, nos muestra (si está activado) el formulario de envio de comentarios.

Por ese motivo, es imprescindible conocer este fichero si queremos conseguir que nuestro diseño sea además funcional.

¿Como llamarlo?

La función que nos despliegla el formulario dentro de nuestro template es comments_template(). Y se encarga de cargar el fichero comments.php de nuestro theme, si existe.

function comments_template( $file = '/comments.php' ) {
	global $wp_query, $withcomments, $post, $wpdb, $id, $comment, $user_login, $user_ID, $user_identity;

	if ( ! (is_single() || is_page() || $withcomments) )
		return;

	$req = get_option('require_name_email');
	$commenter = wp_get_current_commenter();
	extract($commenter, EXTR_SKIP);

	/** @todo Use API instead of SELECTs. */
	if ( $user_ID) {
		$comments = $wpdb->get_results($wpdb->prepare("SELECT * FROM $wpdb->comments WHERE comment_post_ID = %d AND (comment_approved = '1' OR ( user_id = %d AND comment_approved = '0' ) )  ORDER BY comment_date", $post->ID, $user_ID));
	} else if ( empty($comment_author) ) {
		$comments = $wpdb->get_results($wpdb->prepare("SELECT * FROM $wpdb->comments WHERE comment_post_ID = %d AND comment_approved = '1' ORDER BY comment_date", $post->ID));
	} else {
		$comments = $wpdb->get_results($wpdb->prepare("SELECT * FROM $wpdb->comments WHERE comment_post_ID = %d AND ( comment_approved = '1' OR ( comment_author = %s AND comment_author_email = %s AND comment_approved = '0' ) ) ORDER BY comment_date", $post->ID, $comment_author, $comment_author_email));
	}

	// keep $comments for legacy's sake (remember $table*? ;) )
	$comments = $wp_query->comments = apply_filters( 'comments_array', $comments, $post->ID );
	$wp_query->comment_count = count($wp_query->comments);
	update_comment_cache($comments);

	define('COMMENTS_TEMPLATE', true);
	$include = apply_filters(’comments_template’, TEMPLATEPATH . $file );
	if ( file_exists( $include ) )
		require( $include );
	else
		require( ABSPATH . ‘wp-content/themes/default/comments.php’);
}

Si nos fijamos en la definición de la función, esta compruba que el fichero comments.php exista en nuestro template, y en caso de existir lo incluye para mostrar su contenido, en caso de no existir, utilizará el del template default de Wordpress para no perder la funcionalidad.

Una vez cargado, nos encontramos una estructura similar a esta:

<?php if(!emptyempty($_SERVER['SCRIPT_FILENAME']) && ‘comments.php’ == basename($_SERVER['SCRIPT_FILENAME'])) : ?>
<?php endif; ?>
<?php if(!emptyempty($post->post_password)) : ?>
<?php if($_COOKIE['wp-postpass_' . COOKIEHASH] != $post->post_password) : ?>
<?php endif; ?>
<?php endif; ?>
<?php if($comments) : ?>
<?php foreach($comments as $comment) : ?>
<?php if ($comment->comment_approved == ‘0′) : ?>
<?php endif; ?>
<?php endforeach; ?>
<?php else : ?>
<?php endif; ?>
<?php if(comments_open()) : ?>
<?php if(get_option(’comment_registration’) && !$user_ID) : ?>
<?php else : ?>
<?php if($user_ID) : ?>
<?php else : ?>
<?php endif; ?>
<?php endif; ?>
<?php else : ?>
<?php endif; ?>

No voy a entrar más en detalle, por que los chicos de AyudaWordpress lo han hecho ya y es imposible mejorar la traducción que han hecho sobre este gran artículo de NETTUTS.

Añade un grado más de seguridad a tu Wordpress 2.5

24 Abr

+ 15

Si eres de los usuarios que han actualizado a Wordpress 2.5, es muy probable que no tengas activada la opción SECRET_KEY del fichero wp-config.php.

Esta opción, que la vimos entre las posibilidades de wp-config.php, se encarga de añadir una semilla con la que las cookies usadas para identificarnos como usuario logueado sean más complejas y por consecuente más seguras. Su implementación es realmente sencilla, así que no está de más hacerlo y asegurarnos un poco más.

define('SECRET_KEY', 'R+VQaKAJo@&dfrNXc]p4Ekm!!T.bH{#j2{ivW 5Ey32,#$_>]-<nNfe-0@\'QvbbC');
  1. Abrimos el fichero wp-config.php con nuestro editor favorito
  2. Definimos nuestra SECRET_KEY (o usamos una generada aleatoriamente con la herramienta de Wordpress)*
  3. Incluimos en el fichero la línea generada
  4. Guardamos el fichero

* Al igual que las contraseñas, lo ideal sería que la key estuviera compuesta por carácteres especiales y lo más compleja posible, personalmente recomiendo el generador automático, ya que usa carácteres muy variados y el resultado es ya de por sí complicado de entender.

Soluciones a los problemas de subir ficheros en Wordpress 2.5

23 Abr

+ 23

La nueva versión de Wordpress 2.5, está trayendo mucho de que hablar, y no es para menos, ya que el cambio además de estético es bastante más complejo por el interior.

Uno de los problemas que más está mosqueando a los usuarios es la subida de ficheros, mediante el Media Library. Y el equipo de Wordpress ya se ha puesto manos a la obra para dar soluciones y atajar el problema.

Solucionar los problemas con Media Library

Para asegurarnos que todo funciona vamos a seguir unos pasos, en los que veremos algunas de las posibles causas y como solucionarlas.

Antes de empezar debemos dejar atados unos puntos que considero impresindibles:

  • Actualizar todos, y cada uno, de los plugins
  • Actualizar el Theme (El author debería haber hecho una revisión para Wordpress 2.5)
  • Permisos 777 en carpetas wp-content/uploads/

1. Asegurarnos de haber subido Wordpress correctamente. Hay casos en los que al sobreescribir el cliente de FTP no reemplaza algunos ficheros, lo que crea una inconsistencia entre diferentes versiones convergiendo a la vez. Es uno de las principales causas de este error.

2. Como excepción a la primera, tenemos un problema con algunas versiones “raras” de PHP. Generalmente aparecen errores indicando que no encuentra la función ctype_digit(). Está solucionado en la última versión (2.5.1), o puedes descargar el fichero link-template.php

3. Limpia la caché de tu navegador, resetea tu navegador, a veces la caché del navegador persiste y hay que ser un poco testarudo para eliminarla. Borrar los ficheros wp-content/uploads/js_cache/ tambien puede ayudar.

4. Actualizate a la última versión de Flash (Adobe Flash!)

5. Internet Explorer tiene sus propios problemas, si es tu caso tendrás que reemplazar los ficheros que contiene este ZIP, por los originales de Wordpress 2.5.

6. Otro problema encontrado, es que los botones encargados de mostrar el Media Library no aparecen, esto ocurre por que algún plugin antiguo que use jQuery está interfiriendo, desactivalos todos y revisa que así si que salen.

7. El plugin Bad Behavior, causa un error que impide que el Media Library funcione. Actualiza a la versión nueva.

8. mod_security, puede ser el causante del problema. Quizas sea demasiado restrictivo, deberíamos desactivarlo para comprobar que el error está producido por él. En caso afirmativo, bastaría con añadir los siguiente al .htaccess de la carpeta wp-admin/

<IfModule mod_security.c>
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>

Esto desactiva por completo mod_security para el directorio wp-admin/, se puede ser más específico, bastaría con revisar la especificación del modulo.

9. Puede que te funcione, pero el alineamiento de las imagenes no funcione. Este problema suele estar vinculado al theme, y suele ser por que no están definidas las nuevas clases destinadas a alinear las imagenes. Bastaría con añadirlas dentro de nuestro theme, concretamente en elfichero style.css.

.aligncenter { display:block; margin-left:auto; margin-right:auto; }
.alignleft { display:block; margin-right:auto; }
.alignright { display:block; margin-left:auto; }

Finalmente, si quieres deshacerte del sistema mediante flash que permite subir multimagenes en el Media Library, puedes hacerlo usando este plugin o añadir esta función a Wordpress.

<?php
add_filter('flash_uploader', 'noflashuploader');
function noflashuploader(){ return false; }
?>

Mejorando la usabilidad del panel de escritura de Wordpress 2.5

14 Abr

+ 6

Alex de BuyaCorp nos comenta hoy que Judy Becker ha realizado unos cambios en la estructura del panel de escritura de Wordpress con el fin de conseguir un aspecto más usable en el cual tengamos que hacer menos scroll a la hora de escribir nuestras entradas.

Nuevo Panel compactadoNueva Panel Extendido

Viendo resultado podemos ver, que la mejora recuerda mucho al aspecto que anteriormente nos ofrecía Wordpress. Algo de agradecer los que hemos vivido con versiones anteriores.

¿Como lo cambio?

Alex publica una modificación, tan simple como reemplazar los ficheros originales de Wordpress por estos otros.

wp-admin\
            - css\
               global.css
            - wp-admin.css
            - edit-pages.php
            - edit-page-form.php
            - edit-form-advanced.php

[Descargar]

Nota: Imagenes via Carrero.es

ShortCode generator para Wordpress

13 Abr

+ 2

Hace unas semanas vimos la relevancia que los ShortCodes le pueden aportar a Wordpress 2.5, gracias a ellos podremos personalizar nuestro Wordpress todo lo que queramos. Con el geneador de ShorCode, podremos generar nuestros ShortCodes más facilmente todavía.

Personalizar el Media Library de Wordpress 2.5

1 Abr

+ 0

Emarts ha publicado un artículo en el que nos muestra lo fácil que es personalizar el nuevo panel de media library de Wordpress 2.5. Nos muestra como aumentar la cálidad de nuestras miniaturas y como personalizar el class de las etiquetas.

ShortCode API, otra novedad de Wordpress 2.5

31 Mar

+ 3

De entre todas las novedades de Wordpress, ShortCode es una de las que menos bombo se le ha dado. Y la verdad es que merece la pena perder un rato en explicar de que va esta nueva funcionalidad.

BBCode

Los usuarios de foros, conocerán el formato BBCode, aquel compuesto de tags envueltos por [], similar al formato HTML. Este formato está muy extendido en internet y es fácil de memorizar. Veamos un ejemplo:

[b]Este text en negrita[/b] ==> <strong>Este text en negrita</strong>

Partiendo de esta base podemos pasar a definir que es ShortCode.

ShortCode

ShortCode API, es un conjunto de funciones que permite definir nuestros propios tags BBCode para insertarlos dentro de nuestros posts. La gracia de este sistema es que podemos ejecutar código PHP dentro del contenido de nuestros posts. Lo que además de ser muy interesante, evidentemente es muy peligroso.

add_shortcode($tag, $function); 

// [footag foo="bar"]
function footag_func($atts) {
	return @”foo = {$atts['foo']}”;
}
// [caption class="headline"]My Caption[/caption]
function caption_shortcode( $atts, $content = null ) {
   extract( shortcode_atts( array(
      ‘class’ => ‘caption’,
      ), $atts ) );

   return ‘<span class=”‘ . attribtue_escape($caption) . ‘”>’ . $content . ‘</span>’;
}

add_shortcode(’caption’, ‘caption_shortcode’);
add_shortcode(’footag’, ‘footag_func’);

Si nos fijamos en el código anterior, vemos que el tag BBCode se define mediante la función add_shortcode(), encargada de relacionar el tag con la función correspondiente.

remove_shortcode($tag);

Función que nos permite eliminar el funcionamiento de un shortcode, para ello indicaremos el tag que queremos eliminar de los disponibles.

remove_shortcode("caption"); // Eliminamos [caption][/caption]

remove_all_shortcodes();

Si deseamos eliminar todos los shortcodes disponibles en nuestro Wordpress, simplemente tenemos que usar esta función y se encargará de desactivarlos todos.

remove_all_shortcodes(); // Todos los shortcodes eliminados

shortcode_atts($pairs, $atts);

Función que nos devuelve un array de pares con los atributos por defecto para nuestros shortcodes.

$a = shortcode_atts( array(
   'title' => 'My Title'
   'foo' => 123,
   ), $atts );

do_shortcode($content);

Función que nos devuelve el resultado de la ejecución del texto con el shortcode reemplazado por la función.

do_shortcode('[caption class="headline"]My Caption[/caption]‘); // <span class=”headline”>My Caption</span>

¿Donde poner este código?

Wordpress no indica donde ubicar el código correspondiente a los shortcodes, pero el fichero en el que están definidas las funciones que hacen posible el funcionamiento, está ubicado en wp-includes/shortcodes.php. En él no hace referencia a ningún fichero externo, ubicado en una ruta algo más personal como wp-content/.

Como casi todo el código de Wordpress puede ser insertado en cualquier sitio y de cualquier forma:

Pero quizas la forma más óptima hubiera sido añadir un par de líneas y sacar del core de Wordpress una funcionalidad que permite tal nivel de personalización.

<?php
if ( file_exists(ABSPATH . 'wp-content/my-shortcodes.php') )
	require_once (ABSPATH . 'wp-content/my-shortcodes.php');

 ¿Algo así al inicio del fichero shorcodes.php? De esta forma disponemos de un fichero externo que nos permite tener definidos nuestros shortcodes por encima de todas las futuras actualizaciones…. paciencia :D

aNieto2k ahora personalizada para iPhone e iTouch

25 Mar

+ 21

Hace tiempo que quería hacer una versión personalizada para los usuarios que visitan el blog desde el iPhone e iTouch, aprovechando el descubrimiento de Massive News “Mobile Edition” he pensado en hacer uso de él y condicionar la visualización del blog dependiendo del dispositivo desde el que se ve.

anieto2k_iphone.jpg

Usando el fichero my-hacks.php he añadido una condición que me indica si el usuario está accediendo desde un iPhone/iPod Touch y en caso afirmativo le digo que para ese usuario me cargue el theme Massive News “Mobile Edition”.

<?php
function is_iphone($user_agent) {
        return (bool)eregi('(iPhone|iPod)', $user_agent);
        }

function theme_for_iphone($tpl) {
        if (!is_iphone($_SERVER['HTTP_USER_AGENT'])) return $tpl;
        else return “mobile”;
}

add_filter(’template’, ‘theme_for_iphone’);
?>

 Como podemos ver, es un código bastante claro que me ayuda a distinguir entre iPhone/iPod y el resto.

Para que todo funcione correctamente, he introducido el theme en el directorio wp-content/themes/ y he activado el plugin wp-pagenavi, que se complementa perfectamente para mejorar gráficamente la paginación del theme.

Por el momento no he podido hacer que funcione con 1BlogCacher o WP-Cache, pero solo es cuestión de tiempo :D