Esta entrada forma parte del conjunto Optimizar WordPress reduciendo consumo de memoria, peticiones y consultas a MySQL.
Para llevar a cabo esto primero debemos saber que es lo que necesitamos y que es lo que no necesitamos.
Si es posible, en lugar de utilizar muchos Campos personalizados (Post Meta) hay que utilizar solo uno pero con muchos datos.
Nivel: Avanzado.
WordPress tiene la capacidad de guardar arrays (matrices o conjuntos de datos) de datos en un solo campo personalizado:
Para generar los datos (functions.php o en donde tengamos nuestro Meta Box):

// Es importante el uso de true en le ultimo parámetro.
// Este código se podría colocar en el lugar donde necesitamos mostrar los datos.
$primer_dato = 'Contenido del primer dato personalizado dentro de un array.';
$imagen = 'http://www.example.com/wp-content/images/imagen.png';
$meta_value = array(
    'primer_dato' => $primer_dato,
    'imagen' => $imagen
);
update_post_meta($post_id, 'datos_array', $meta_value);

// Esto nos devolverá un solo dato.
echo $meta_values['primer_dato'];

Para obtener los datos:

// Es importante el uso de true en le ultimo parámetro.
// Este codigo se podria colocar en el lugar donde necesitamos mostrar los datos.
$meta_values = get_post_meta($post_id, 'datos_array', true);

// Esto nos devolverá un solo dato.
echo $meta_values['primer_dato'];

Nivel: Avanzado, Experimental.
Otra forma de reducir una petición es colocar el siguiente código en nuestro functions.php:

function my_posts_request_filter( $input = false ) {
	return $input;
}
add_filter( 'posts_request', 'my_posts_request_filter' );

Nota: Es importante realizarlo con precaución y teniendo en cuenta que no se puede utilizar el filtrado de posts por medio de la función query_posts(), de lo contrario no funcionara y solo obtendrán un error SQL, y en su lugar usar la clase WP_Query.
Nivel: Medio.
Algo que también es muy importante realizar, es cuando tenemos peticiones MySQL personalizadas.
Esto funciona guardando el contenido de una petición dentro de una variable, de tal forma que al mostrar le contenido de la misma variable varias veces, no se ejecutaran peticiones innecesarias como se realizarían si llamáramos directamente a la función cada vez que queremos obtener el mismo dato.

// El codigo no importa. Es solo un ejemplo.
$id = 350;
function funcion($id) {
$sql = 'SELECT * FROM wp_posts WHERE ID = $id';

return conectar($sql);
}
echo funcion($id);
// Si se hace de esta forma, cada que obtengamos el dato se realizara una petición nueva a la base de datos.

Optimizado con variables:

// El codigo no importa. Es solo un ejemplo.
$id = 350;
function funcion($id) {
$sql = 'SELECT * FROM wp_posts WHERE ID = $id';

return conectar($sql);
}
$post = funcion($id);

echo $post;
// Si se hace de esta forma, cada que obtengamos el dato se mostrara el contenido de la variable $post que previamente se estableció.

Nivel: Avanzado.
Otra forma distinta y muy util es utilizando los Transients de WordPress.
Los Transients son datos que se guardan en la tabla de WordPress donde se genera una petición para cargar todas las opciones de WordPress, y lo que se puede cachear en ese lugar son por ejemplo los widgets y elementos que solo se muestran en la pagina principal y no lo recomiendo en los posts individuales porque al momento de tener muchos posts: WordPress cada que inicia revisa todos los datos de esta tabla y estaría consumiendo mucha memoria y consultando datos que no se necesitan.
El código necesario para mostrar un post aleatorio mas el sistema de Cache propio de WordPress mediante Transients:

if ( false === ( $post_aleatorio = get_transient( 'post_aleatorio' ) ) ) {
	$query_post_aleatorio = new WP_Query(array('orderby' => 'rand', 'posts_per_page' => 1));
			while ($query_post_aleatorio->have_posts()) : $query_post_aleatorio->the_post();
				$post_id_post_aleatorio = $post->ID;
				$titulo_ = get_the_title();
				$enlace_ = get_permalink();
				$imagen_ = data( 'servidor_imagenes', $post_id_post_aleatorio, true ); // Esta funcion es propia (No utilizarla).

				$post_aleatorio = <<$titulo_$titulo_
EOT;
			endwhile;
		set_transient( 'post_aleatorio', $post_aleatorio );
	}

	echo $post_aleatorio;
	unset($post_aleatorio);

Nota: Cuando se borra un Transient con las siguientes funciones, el Transient se vuelve a generar en la primer petición recibida.
Para borrar los Transients cada que se publica un nuevo post o cada que se actualiza uno existente:

	function delete_publish_post_transients() {
		delete_transient( 'post_aleatorio' );
	}
	add_action(	'publish_post',		'delete_publish_post_transients'	);

Nota: set_transient() acepta tres parámetros, de los cuales el tercero es para especificar una caducidad establecida en segundos, la cual no recomiendo utilizar porque el simple hecho de utilizarla le quita la opción para que cargue automáticamente junto con las demas opciones de WordPress y se crearía una petición extra a la base de datos y esto no es lo que estamos buscando aunque nos podría ser útil en otros casos.
Para borrar el Transient cada cierto tiempo (En el ejemplo cada hora):

add_action('hourly_delete_transients', 'delete_post_aleatorio');

	function tarea_eliminar_post_aleatorio() {
		if ( !wp_next_scheduled( 'hourly_delete_transients' ) ) {
			wp_schedule_event(time(), 'hourly', 'hourly_delete_transients');
		}
	}
	add_action('wp', 'tarea_eliminar_post_aleatorio');

	function delete_post_aleatorio() {
		delete_transient( 'post_aleatorio' );
	}
Tagged with:
 

Para empezar, WordPress es una plataforma desarrollada en PHP que puede ser utilizada como un CMS (Gestor de Contenidos), y principalmente como una plataforma de blogs. Esta entrada esta orientada a la optimización de WordPress debido a que siendo un sistema poderoso y con mucho tiempo de desarrollo, este consume mucha memoria RAM, peticiones SQL a la base de datos, y tiene una latencia algo elevada (tiempo de respuesta).

Primero que nada explicare porque es necesario optimizar WordPress antes de utilizar plugins de Cacheo como W3 Total Cache y WP-Super-Cache.

El motivo es que lo que hacen estos plugins es guardar una pagina generada por WordPress (En este caso una entrada o articulo) en un archivo estático *.html, por lo cual cuando el cliente (usuario) accede a dicho articulo, el plugin de Cache automáticamente le muestra una pagina estática generada anteriormente en la primera petición; Y cuando se trata de un sitio web o blog con muchas visitas y un alto uso de plugins es necesario esto, pero a lo que voy es que primero debemos optimizar WordPress para que al momento de generar una pagina estática con los plugins, este no consuma tantos recursos al realizar pagina estática sin antes existir una y también para que se pueda aplicar en cualquier sitio para no tener que recurrir al uso de estos plugins de manera temprana.

Por lo cual tener muchos artículos significa que si tenemos muchas visitas y cada visita entra en un articulo diferente entonces WordPress consumiría muchos recursos provocando errores y cuelgues. Por esta razón es necesario optimizar WordPress incluso si se utilizan plugins para generar paginas estáticas (Cache), ya que he leído casos en los que al momento de borrar la cache y al generarse de nuevo el sistema colapsa y esto es porque erróneamente se cree que todo se arregla con un plugin de Cache.

Es hora de empezar.
Hay muchas formas de reducir los recursos utilizados por WordPress, y aquí esta una lista corta de lo que podemos hacer:

  • Reducir peticiones a la base de datos MySQL (queries).
  • Reducir el uso de plugins innecesarios y si es posible programar cosas mas sencillas que realicen lo mismo pero con menos código.
  • Alojar imágenes y contenido estático en otro servidor.
  • Controlar los comentarios para evitar el uso de muchos recursos.
  • Ajustar WordPress básicamente con pocas lineas.
  • Añadir plugins obviamente necesarios para la optimización programada.

De momento no están terminadas las secciones, solo es cuestión de esperar :D y espero que a mas de uno le sea útil.

Tagged with:
 

WordPress cuenta con un gran núcleo que nos permite adaptarlo a nuestras necesidades sin necesidad de editarlo y cada día va en camino a convertirse en un verdadero CMS (Gestor de Contenidos). La mayoría de los Themes de WordPress vienen con un pequeño extracto de cada articulo en la pagina principal, pero en ningún lado nos muestra como cambiar el numero de palabras que se muestra, en cambio WordPress si cuenta con esa capacidad y solo es cuestión de explotarla a nuestro antojo.

Para establecer el numero de palabras del extracto o resumen tenemos que buscar el archivo functions.php de nuestro Theme de WordPress y luego lo editamos y en el final del archivo (respetando el cierre de PHP “?>”) añadimos el siguiente código:


function custom_excerpt_length( $length ) {
	return 55; // Este es el numero de palabras que se muestra en el extracto.
}
add_filter( 'excerpt_length', 'custom_excerpt_length' );

Por defecto WordPress establece el numero de palabras en 55 y podemos colocar cualquier numero mientras sea un numero entero.
Ahora si lo que queremos es que nuestro Theme muestre un extracto o resumen en la pagina principal tenemos que buscar en el index.php la función:

the_content();

Y reemplazarla con esta otra:

the_excerpt();

Y después de guardar los cambios nuestro sitio empezara a mostrar los extractos.

Para cualquier duda o pregunta dejen un comentario.

Tagged with:
 

WordPress 3.3 alias “Sonny” a plena luz

WordPress la plataforma de publicación web mas usada en la actualidad ha estado en desarrollo y ahora le toca tomar parte a la version 3.3 “Sonny” que hace unas horas fue lanzada. WordPress 3.3 fue lanzada el mismo dia que la versión candidata 3 y parece ser que esta version mejoro muchos aspectos de suma importancia. Así que a actualizar se ha dicho.

Mas información en WordPress.org.

Tagged with:
 

WordPress 3.3 RC 1 listo para descargar

WordPress 3.3 Release Candidate 1WordPress 3.3 Release Candidate 1 esta disponible apenas hace unas horas después de 4 versiones beta. WordPress, la plataforma mas usada en Internet para la gestión de contenido y para la creación de sitios web ha cumplido con lo que prometió, como por ejemplo: muchos se quejaban por el cargador de medios y hasta este punto parece que esta versión RC ya lo soluciono así como los usuarios lo esperaban. Otro punto importante es que WordPress al utilizar la estructura example.com/%post%/ utilizaba muchas redirecciones de manera que entorpecía un poco el rendimiento y el consumo de recursos y lo que yo verdaderamente estuve esperando se cumplió,: esta vez se enfocaron un poco en el rendimiento y lo han optimizado bastante, hace unos dias realice unas pruebas en localhost y de 450ms se restaban unos 180ms, por lo que la diferencia de velocidad era notable y además de que el panel cambio un poco y ahora tiene un mensaje de bienvenida y el panel también es compatible con mas dispositivos, siendo que se adapta según el cliente.

Tagged with:
 
Pagina 1 de 212
new wordpress themes
© 2011 Imperio Web | Internet, Noticias, Tecnologia, y Mas Internet...