Añadir target=”_blank” a todos los enlaces

Por supuesto, hay plugins para convertir todos los enlaces de manera que se abran en nueva ventana o pestaña pero ¿para qué usar plugins cuando puedes hacerlo con una simple función?.

Si eres de los que te gusta que los enlaces sean ‘target="_blank"‘ y no quieres andar modificando cada enlace puedes añadir esta función a tu plugin de funciones o fichero functions.php de tu tema activo:

// Abrir todos los enlaces en ventana nueva
function autoblank($text) {
	$return = str_replace('<a', '<a target="_blank"', $text);
	return $return;
}
add_filter('the_content', 'autoblank');

Guardas los cambios y ya tienes lo que buscabas, todos los enlaces del contenido de las entradas se abrirán en una nueva ventana (o pestaña) del navegador.

Redirección para accesos fallidos en WordPress

Normalmente, si un usuario falla al tratar de acceder en WordPress le devuelve a la misma pantalla con un mensaje de error, que ya aprendimos a modificar para evitar dar pistas a hackers, pero ¿y si quieres enviar al usuario torpe a una página de error distinta?.

Se me ocurre, por ejemplo, enviarle a una página de contacto para que reclame la clave, o incluso a una página en la que ofrecerle servicios personalizados para usuarios registrados. Bueno, lo que sea que se te ocurra.

Si quieres redirigir a los usuarios que acceden a tu WordPress a una página concreta puedes usar la función de login de WordPress, que puedes añadir donde te guste, por ejemplo en un widget de texto, pero con un modificador que la envíe a una URL a tu elección, algo así:

wp_login_form(array( 'redirect' => site_url() ));  // en este caso le mandas a la portada de tu web de nuevo

Ahora bien, como he dicho, esto es para los accesos exitosos, cuando el usuario introduce bien sus datos. Pero si lo que quieres es hacer justo lo que comentaba antes, hacer redirección cuando se equivocan, y lo ideal es que esto pase en la pantalla de acceso habitual de WordPress, entonces lo que tienes que hacer es añadir el siguiente código a tu plugin de funciones o archivo functions.php del tema activo:

add_action( 'wp_login_failed', 'my_front_end_login_fail' );  // hook para el accesso fallido

function my_front_end_login_fail( $username ) {
     $referrer = $_SERVER['HTTP_REFERER'];  // ¿de donde viene?
     // si hay una referencia válida, y no es la pantalla de acceso por defecto
     if ( !empty($referrer) && !strstr($referrer,'wp-login') && !strstr($referrer,'wp-admin') ) {
          wp_redirect( $referrer . '?login=failed' );  // le añadimos algo de información (login-failed) a la URL del tema en uso
          exit;
     }
}

Ya solo te queda guardar los cambios y probar que funciona.

Desactivar la comprobación de actualizaciones de plugins

Si tienes una configuración cerrada de WordPress, con una serie de plugins que has modificado o que no quieres que se modifiquen porque, simplemente, funcionan, seguro que no quieres que nadie actualice esos plugins.

Es más, lo ideal sería incluso evitar la comprobación de actualización de los plugins.

Pues nada, solo tienes que añadir este código a tu plugin de funciones o fichero functions.php de tu tema activo:

// Desactivar comprobación de actualización de plugins
remove_action( 'load-update-core.php', 'wp_update_plugins' );
add_filter( 'pre_site_transient_update_plugins', create_function( '$a', "return null;" ) );

Guardas los cambios y ya está, tus plugins seguirán ahí mientras los necesites, sin pedirte actualizaciones. Eso si, ten en cuenta que antes de actualizar WordPress a una versión nueva deberás comprobar si hay versiones nuevas o, al menos, si las versiones actuales de los plugins son compatibles, en caso contrario deberías quitar el código y actualizar los plugins que quieras actualizar.

Por otra parte, si solo quieres no actualizar algún plugin concreto, pues este truco afecta a todos, puedes decidir que algún plugin no se actualice.

Código encontrado en wp snippets

Cargar solo lo mínimo de WordPress

Con el crecimiento de WordPress cada vez hay más desarrolladores que lo usan como base para sus propios proyectos que, en última instancia, no siempre se basan en un WordPress completo sino que lo utilizan para disponer de utilidades concretas, como registro de usuarios, acceso, taxonomías, etc. Algo parecido a lo que ofrece Backpress, la base que utilizan bbPress o GlotPress.

Si es tu caso, si quieres disponer de las grandes ventajas de WordPress, pero usarlo con un nivel de carga mínima, solo con lo básico para aprovechar sus múltiples virtudes de manera controlada, de las que disfrutará tu framework o lo que sea, hay una constante, contemplada en el fichero wp-settings.php, que puedes utilizar.

Esta constante se llama SHORTINIT, o “inicio corto”, más o menos, y en el archivo ‘wp-settings.php‘ viene definida así:

// Stop most of WordPress from being loaded if we just want the basics.
if ( SHORTINIT )
	return false;

Para utilizar esta funcionalidad, y cargar lo mínimo de WordPress, solo tienes que añadir la siguiente línea a tu fichero wp-config.php:

 define( 'SHORTINIT', TRUE );

Se cargará lo mínimo de WordPress, de manera que si quieres ir añadiendo funcionalidades ya tendrá que ser a posteriori de la carga inicial, mediante funciones o plugins. Todo muy controlado.

Fantástico truco descubierto en wp engineer.

Cómo limpiar la tabla wp_options

Una de las cosas que más me chirrían de WordPress es la manía de muchos plugins de meter líneas de información en la base de datos, en concreto en la tabla ‘wp_options‘, que a poco que instales y desinstales plugins, se va llenando de porquería, muy al estilo de lo que pasa con el registro de Windows.

Por supuesto, es una mala costumbre, no de WordPress, sino de algunos desarrolladores que, pudiendo crear sus propias tablas, prefieren introducir la información del plugin en la tabla ‘wp_options‘. Y esto, además, no sería un problema si introdujeran una línea de código para limpiar la base de datos de su información al desinstalar el plugin, algo que si hacen algunos programadores.

Pero bueno, si tu base de datos crece y crece en tamaño, y no es por nuevas tablas ni por el crecimiento normal de las tablas wp_posts o wp_comments, es muy probable que sea precisamente la tabla wp_options que ha ido creciendo por plugins con esta fea costumbre.

¿Limpiarlo?, pues bueno, puedes hacerlo manualmente, si conoces las entradas de una instalación estándar de WordPress, pero es una absoluta barbaridad y te puede llevar muchas horas que seguramente prefieras emplear para otras cosas.

Lo mejor es valerte de alguna de estas soluciones:

1. WP-Options manager

Este plugin ofrece un navegador que te permite identificar las entradas en la tabla ‘wp_options‘ de tu base de datos e ir borrándolas selectivamente. Lo que le diferencia de hacer lo mismo desde PHPmyAdmin es que nos ofrece ocultar las entradas por defecto de WordPress, haciendo esta tarea mucho más segura.

Otra funcionalidad interesante es buscar opciones obsoletas, para empezar el borrado por ahí.

Muy recomendable pero hay que usarlo con precaución, como siempre que haces algo directamente con la base de datos, como es el caso.

2. Clean options

Una de las mayores virtudes de este plugin es que detecta opciones obsoletas, e identifica las muy pesadas y habituales entradas de RSS antiguas, que suelen llenar toda tabla ‘wp_options‘.

También es de agradecer que antes del borrado definitivo nos ofrezca una pantalla en la que nos avisa y recuerda todo lo que se va a borrar, para dar el último suspiro antes de hacer el borrado.

3. Eliminar los _transient

Las entradas del tipo ‘_transient‘ son una especie de referencias a cache y los accesos RSS que antes comentaba. Si es tu cáncer particular puedes automatizar el borrado de estas molestas y pesadas entradas en tu tabla wp_options de WordPress añadiendo este código al fichero functions.php o plugin de funciones:

add_action( 'wp_scheduled_delete', 'delete_expired_db_transients' );

function delete_expired_db_transients() {

    global $wpdb, $_wp_using_ext_object_cache;

    if( $_wp_using_ext_object_cache )
        return;

    $time = isset ( $_SERVER['REQUEST_TIME'] ) ? (int)$_SERVER['REQUEST_TIME'] : time() ;
    $expired = $wpdb->get_col( "SELECT option_name FROM {$wpdb->options} WHERE option_name LIKE '_transient_timeout%' AND option_value < {$time};" );

    foreach( $expired as $transient ) {

        $key = str_replace('_transient_timeout_', '', $transient);
        delete_transient($key);
    }
}

Pues bien, esto es lo que hay. Y te recuerdo que siempre, siempre, haz backup de tu base de datos antes de liarla parda con estas cosas, para que no te tengas que arrepentir.

Y si con estos plugins no te llega, siempre puedes dejar la tabla ‘wp_options‘ al estado inicial de la instalación de WordPress con estos sencillos pero radicales pasos:

  1. Ve a ‘Herramientas -> Exportar’ y exporta todo el contenido
  2. Ve a PHPmyAdmin y borra todas las entradas de la tabla ‘wp_options
  3. Ve a ‘miweb.com/wp-admin/install.php’ y actualiza la base de datos
  4. Ve a ‘Herramientas -> Importar’ e importa el contenido antes exportado

Para todo lo demás, usa cuantos menos plugins mejor, y si tienen alguna función de limpieza tras la desinstalación mucho mejor.

Mostrar RSS feed en una entrada de WordPress

De verdad que esto no lo he usado nunca, de hecho ni se me ocurre para qué pueda servir, pero seguro que tu le encuentras utilidad.

Me refiero a que, mediante un shortcode puedas mostrar en cualquier parte de una entrada enlaces a publicaciones de un feed RSS.

Si te animas el truco está en añadir este código al fichero functions.php de tu tema (como siempre) o a tu plugin de funciones:

//Es imprescindible que exista ese fichero para poder llamar a la función wp_rss().
include_once(ABSPATH.WPINC.'/rss.php');

function ver_RSS($atts) {
    extract(shortcode_atts(array(
	"feed" => 'http://',
      "num" => '1',
    ), $atts));

    return wp_rss($feed, $num);
}

add_shortcode('rss', 'ver_RSS');

Luego solo tienes que usar el nuevo shortcode de este modo:

[rss feed="http://feeds.feedburner.com/AyudaWordPress" num="3"]

La variable “num” la decides tu con el número de enlaces que se visualizarán.

¡Ah!, y si se te ocurre una situación (razonable) para usar este truco me lo cuentas, que no lo pillo, hoy debo estar espeso.

Añade cualquier cosa al final de las entradas

A estas alturas ya sabrás lo engorroso que es, cuando cambias de tema en WordPress, ir recuperando todos esos códigos que has insertado en los distintos ficheros del tema anterior para que también estén en el nuevo.

Por supuesto, un modo de evitar este molesto proceso es el uso de plugins para la mayoría de las cosas pero no siempre es una opción válida.

Una de estas situaciones, muy típicas, es esos códigos que añadimos al final de nuestras entradas, ya sean scripts de Adsense, códigos donde se cuenta quien ha escrito la entrada, textos para animar a suscribirse al feed RSS, para seguirnos en Twitter o cualquier cosa que se te ocurra.

Normalmente, para esto, editamos el fichero single.php del tema y añadimos ahí lo que sea, pero para tenerlo más ordenado lo haremos de manera más elegante.

Es en estos casos cuando lo mejor es usar nuestro plugin de funciones, o editar el fichero functions.php del tema, que luego podremos usar en el nuevo.

El código a añadir sería algo así:

// Código/texto al final de las entradas en single
function texto_al_final($content) {
	if (is_single()) {
		$content .= '<p><div id="caja-suscribir-post">Si no te quieres perder nada suscríbete a <a title="Suscríbete a Ayuda WordPress" href="http://feeds.feedburner.com/ayudawordpress">Ayuda WordPress</a></div></p>';
	}
	return $content;
}

add_filter ('the_content', 'texto_al_final', 0);

Luego, por supuesto, lo “tuneas” a tu gusto.

Evita que WordPress comprima los JPG

Una característica no muy conocida de WordPress es que comprime los archivos de imagen JPG, para reducir la carga de tu web, pero para ciertos usuarios, como fotógrafos por ejemplo, no es la mejor opción, menos si quieren mostrar sus obras en toda su belleza.

Afortunadamente es muy sencillo cambiar ese comportamiento por defecto de WordPress.

Puedes hacerlo con una sola línea de código. Solo tienes que editar el fichero functions.php de tu tema, o añadirla a tu plugin de funciones, esta:

add_filter('jpeg_quality', function($arg){return 100;});

Ya que estamos, si, por el contrario, lo que quieres es añadir mayor compresión entonces podrías modificar la línea de este modo:

add_filter('jpeg_quality', function($arg){return 40;});

Solo tienes que cambiar el número al que se adapte mejor a tus necesidades.

Volviendo al tema de evitar la compresión, si lo prefieres también hay un plugin que puedes usar. Con PhotoJAR:base puedes, además de hacer un montón de cosas con tus miniaturas, también quitar la compresión de JPG por defecto de WordPress. En cualquier caso es un plugin muy recomendable, para mucho usos, que te animo a probar y conocer.

Cambiar el saludo de WordPress sin modificar la traducción

Personalizar WordPress es muy sencillo, mediante funciones, plugins y trucos puedes ofrecer una experiencia de WordPress para tus clientes, incluso para ti mismo, totalmente a tu gusto.

Con la traducción, además, puedes personalizar los mensajes de la administración, o del tema si está traducido.

Pero si solo quieres cambiar el mensaje de saludo de WordPress, el “Hola, Usuario” (el famoso “Howdy”), puedes hacerlo sin tener que modificar la traducción.

Solo tienes que añadir el siguiente código a tu plugin de funciones o al fichero functions.php de tu tema activo:

//Saludo personalizado en admin
function saludo_personal( $wp_admin_bar ) {
    $my_account=$wp_admin_bar->get_node('my-account');
    $newtitle = str_replace( 'Hola,', 'Que tengas buen día,', $my_account->title );
    $wp_admin_bar->add_node( array(
        'id' => 'my-account',
        'title' => $newtitle,
    ) );
}
add_filter( 'admin_bar_menu', 'saludo_personal',25 );

Nota: En este código sustituimos el mensaje de la traducción, si usas otra distinta a la oficial deberás cambiar el primer parámetro de str_replace de “Hola” al que veas en tu escritorio de WordPress. El segundo parámetro es tu mensaje personalizado.

Numeración autoincremental en los títulos de las entradas

Vale que este truco es muy especialito, quizás un poco exclusivo para usos igual muy concretos, pero seguro que se te ocurre en qué situaciones puede ser útil, a mi se me ocurren unas cuantas.

Por ejemplo, en publicaciones académicas donde cada entrada deba seguir una numeración para tener identificado el número de publicaciones, o en un blog de proyecto, y muchas cosas más.

El caso es que si quieres que en tus títulos aparezca un número, que se incremente solo en cada nuevo artículo puedes hacerlo, solo te llevará un par de pasos:

1. Crea la función

Lo primero es crear la función y guardarla en el archivo functions.php o tu plugin de funciones, que sería así:

//Numeración autoincremental en los títulos
function updateNumbers() {
    global $wpdb;
    $querystr = "SELECT $wpdb->posts.* FROM $wpdb->posts WHERE $wpdb->posts.post_status = 'publish' AND $wpdb->posts.post_type = 'post' ";
    $pageposts = $wpdb->get_results($querystr, OBJECT);
    $counts = 0 ;
    if ($pageposts):
    foreach ($pageposts as $post):
    setup_postdata($post);
    $counts++;
    add_post_meta($post->ID, 'incr_number', $counts, true);
    update_post_meta($post->ID, 'incr_number', $counts);
    endforeach;
    endif;
}

add_action ( 'publish_post', 'updateNumbers' );
add_action ( 'deleted_post', 'updateNumbers' );
add_action ( 'edit_post', 'updateNumbers' );

Guardas los cambios y vamos al segundo paso …

2. Modifica el loop

Ahora lo que toca es modificar el loop de tu index.php, single.php, archive.php y el resto donde haya loop en que aparezcan títulos (por ejemplo taxonomy.php u otros) para que, al recuperar el título de la entrada añada el número generado.

De este modo, donde encontremos este código … 

<?php the_title(); ?>

Lo sustituiremos por este otro:

<?php echo get_post_meta($post->ID,'incr_number',true); ?>

Guardas y ya está :)