Caché en consultas a la base de datos con PHP

Me gusta ir al grano cuando voy a hablar de una librería en PHP como es el caso.

En muchas ocasiones, cuando veo el número de consultas que hago a la base de datos me echo las manos a la cabeza, y dependiendo del hosting, esto puede ser que se sobrecargue de una manera bestial y la aplicación empiece a ir lenta, o lo que es peor, que tiremos el servidor nosotros mismos. También existe la posibilidad que simplemente queremos acelerar la carga de nuestra web.

¿Qué podemos hacer entonces? Cachear las consultas a la be de datos.

Con esta librería solucionaremos esto. muy sencilla de implementar como vereís. Su nombre phpFastCache

Instalar phpFastCache

Para instarlo, lo haremos de la manera más sencilla, vía composer

composer require phpFastCache/phpFastCache

Usar phpFastCache

Una vez incluida la librería, solo tendremos que usarla. Aquí un ejemplo:

use phpFastCache\CacheManager;

$config = array(
    "storage"   =>  "files",
    "path"      =>  "/cache/db/", //U otro directorio
);
CacheManager::setup($config);

//Intenta obtener productos
$productos = CacheManager::get("productos");

// Si no esta disponible, hacemos la llamada a la base de datos y guardamos
if(is_null($productos)) {
    $products = "SELECT * from productos";
    CacheManager::set('productos', $productos,600); //En este caso enviamos la llave, el contenido y el tiempo en milisegundos que durará la caché
}

Teneis toda la documentación en github.

Como ya veis es muy sencillo de usar. Así que nada, a disfrutarla!

 

¿Cómo deshabilitar plugins de WordPress en móvil?

En algunos proyectos para los que trabajo, necesito deshabilitar algunos plugins en móvil, por ejemplo, los sliders. En PrestaShop es sencillo, porque podemos deshabilitarlo directamente desde el listado de módulos. Pero en WordPress ya cambia la cosa.

Para ello, utilizo un plugin llamado  WP Mobile Detect.

Este plugin, nos ofrece una serie de shortcodes que podemos utilizarlo a nuestro antojo. Los que más utilizo son los siguientes:

[phone]Contenido SOLO para móvil[/phone]
[notphone]Contenido que NO se mostrará en móvil[/notphone]
[device]Contenido solo para escritorio[/device]

Podeís ver la lista completa en las preguntas frecuentes del plugin.

No permitir publicar sin imagen destacada en WordPress

Si necesitamos que todos nuestros post lleven imagen destacada pero a veces se nos olvida, o sencillamente queremos que nuestros editores la incorporen, podemos utilizar este código y  obligaremos a usarla.

Este snippet te obliga a usar imagen destacada en WordPress. Como siempre, lo incorporaremos en el archivo functions.php

add_action('save_post', 'wpds_check_thumbnail');
add_action('admin_notices', 'wpds_thumbnail_error');
function wpds_check_thumbnail($post_id) {
    // change to any custom post type
    if(get_post_type($post_id) != 'post')
        return;
    if ( !has_post_thumbnail( $post_id ) ) {
        // set a transient to show the users an admin message
        set_transient( "has_post_thumbnail", "no" );
        // unhook this function so it doesn't loop infinitely
        remove_action('save_post', 'wpds_check_thumbnail');
        // update the post set it to draft
        wp_update_post(array('ID' => $post_id, 'post_status' => 'draft'));
        add_action('save_post', 'wpds_check_thumbnail');
    } else {
        delete_transient( "has_post_thumbnail" );
    }
}
function wpds_thumbnail_error()
{
    // check if the transient is set, and display the error message
    if ( get_transient( "has_post_thumbnail" ) == "no" ) {
        echo "<div id='message' class='error'><p><strong>You must select Featured Image. Your Post is saved but it can not be published.</strong></p></div>";
        delete_transient( "has_post_thumbnail" );
    }
}

vía: wpsnipp.com

Reducir el número de revisiones en WordPress

A veces, las revisiones de las entradas o páginas nos pueden suponer un problema de espacio. Si estamos continuamente modificando páginas puede ser que nos ocupen muchos megas en nuestra base de datos de WordPress. Si a esto, le sumamos que no solemos hacer uso de esta funcionalidad, podemos prescindir o reducir el número de revisiones en WordPress perfectamente.

El uso de este código es muy sencillo:

define( 'WP_POST_REVISIONS', 4 );

En el ejemplo, definimos que solo se guardaran 4 revisiones. Podemos cambiar este valor por el que más nos interese o dejarlo en false si no queremos que nos guarde revisiones. Esta línea debemos incorporarla en el archivo wp-config.php.

 

Aumentar tiempo de sesión en el admin de WordPress

En el caso que queramos aumentar el tiempo de sesión de WordPress durante mucho tiempo o el tiempo que definamos, solo tenemos que añadir a nuestro functions.php las siguientes líneas:

add_filter( 'auth_cookie_expiration', 'stay_logged_in_for_1_year' );
function stay_logged_in_for_1_year( $expire ) {
return 15778463; // 6 meses
}

El valor que le asignemos debe estar en segundos.

Quitar palabra “Categoría” del archivo de WordPress

Cuando hago una plantilla de WordPress por defecto y entramos en las categorías, nos aparece delante del título de la categoría “Categoría:”.

También pasa en los archivos de tag y páginas de autor.

Esto podemos evitarlo añadiendo a nuestro functions.php estas simples líneas:

 add_filter( 'get_the_archive_title', function ($title) {
 if ( is_category() ) {
 $title = single_cat_title( '', false );
 } elseif ( is_tag() ) {
 $title = single_tag_title( '', false );
 } elseif ( is_author() ) {
 $title = '<span class="vcard">' . get_the_author() . '</span>' ;
 }
 return $title;
 });

Añadir clase a next_posts_link() y previous_posts_link()

Los enlaces de la paginación de WordPress por defecto vienen sin ninguna clase. En mi caso, quiero añadir la clase .btn de Twitter Bootstrap para darle estilo de botón. Con lo que hacemos lo siguiente en nuestro archivo functions.php

add_filter('next_posts_link_attributes', 'posts_link_attributes');
add_filter('previous_posts_link_attributes', 'posts_link_attributes');

function posts_link_attributes() {
 return 'class="btn btn-block btn-primary"';
}

En este caso, uso esas clases, pero podemos usar las que más nos convengan.

5 gestores de contraseñas multiplataformas

Antes de nada, ¿Qué es un gestor de contraseñas?

Un gestor de contraseñas, es una aplicación que guardará todas nuestras claves usadas en internet. Estas contraseñas, se guardan en una base de datos que para solo tendremos acceso nosotros mediante clave.

Esto es útil para poder poner claves muy dificiles de recordar, y complicadas en si, y la aplicación nos la recordará al instante. Con esto ganamos en seguridad, teniendo contraseñas dificiles y diferentes en los sitios donde navegamos. Como regla general, estas aplicaciones nos generan claves aleatorias para evitar que nos hackeen nuestras cuentas.

Sabiendo esto, os cuento mi experiencia con este tipo de aplicaciones resumiendolas en un top 5. En este listado muestro las aplicaciones que son multiplataforma. Por mi experiencia, trabajo en diferentes sistemas operativos y necesito que los gestores de contraseñas sean multiplataforma.

KeePass

keepass-logoKeePass fue el primero que usé, y aún uso. No es multiplataforma como tal, pero se puede usar en Ubuntu gracias a mono. En esta entrada explicó cómo.

Este programa tiene muchas opciones y plugins que aumentarán sus opciones, pero con sus características básicas estaremos estaremos completamente cubiertos.

Uno de los plugin que uso a diario para KeePass es KeeFox. realmente no es un plugin para KeePass, es para FireFox, y lo que hace es conectarse a la base de datos de KeePass para autorellenar los usuarios y claves de las webs que visitamos. Sencillo y eficaz.

KeePassX

keepassx-logoEsta opción puede ser muy recomendada. KeePassX es multiplataforma y es compatible con KeePass (¿Es hora de cambiarme?). Para instalar KeePassX en Ubuntu podemos hacerlo directamente por la terminal tecleando:

sudo apt-get install keepassx

Para Windows y Mac OS podeis descargaros los ficheros desde la web oficial.

KeeWeb

keeweb-logoEsta aplicación es curiosa, ya que está basada en la nube, aunque tiene versión para todas las plataformas. Pienso que el punto fuerte de esta aplicación es eso. Mientras que las dos anteriores, tendriamos que hace uso de Dropbox (por ejemplo) para tener las contraseñas sincronizadas, ésta, al basarse en web no tendría ese problema.

Lastpass

lastpass-logoComo las anteriores, el funcionamiento es similar. Aunque ésta es multiplataforma REAL. ¿Qué quiero decir con esto? Que podemos encontrar Lastpass para todos los dispositivos y sistemas operativos.

KeePassDroid

KeePassDroid-logoEsta app para Android es muy sencilla. Lee nuestra base de datos de contraseñas, que la podemos tener alojada en dropbox, y podremos tener acceso a ella desde nuestro terminal. Sencilla y básica, pero cumple su función al 100%.