Mostrar extractos de páginas inferiores

Seguro que te ha pasado más de una vez, que creas una estructura jerárquica de páginas en la que la página superior o madre en realidad no es más que un texto, que en realidad no lleva a ninguna parte. Por ejemplo, haces una página llamada “Servicios” de la que cuelgan como subpáginas “Diseño” y “Formación“, pero en “Servicios” no hay nada, es una sola estructura de navegación.

Lo que queda fatal es, en estos casos, que alguien haga clic en la página superior y le lleve a una publicación vacía, sin contenido, teniendo que volver a navegar por el menú para acceder a “algo”.

Un modo de evitar este fallo de usabilidad es que el menú no enlace a nada como ya expliqué, pero si queremos darle una vuelta de tuerca y ofrece algo ¿qué mejor que un listado de las subpáginas, con un extracto que muestre su contenido?.

Para conseguirlo debes editar el loop del archivo ‘page.php‘ de tu tema con este código:

<? $pageChildren = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE post_parent = ".$post->ID." AND post_type = 'page' ORDER BY menu_order", 'OBJECT'); ?>
<? if ( $pageChildren ) : foreach ( $pageChildren as $pageChild ) : setup_postdata( $pageChild ); ?>
<!-- loop stuff here -->
<? endforeach; endif; ?>

Pero si tienes páginas que si tengan contenido entonces tendrías que añadirle un condicional más para que no muestre títulos y extractos de subpáginas en ese caso, de este modo:

<? if (is_page('3')) { } else { // if its page 3 then show nothing ?>
<? $pageChildren = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE post_parent = ".$post->ID." AND post_type = 'page' ORDER BY menu_order", 'OBJECT'); ?>
<? if ( $pageChildren ) : foreach ( $pageChildren as $pageChild ) : setup_postdata( $pageChild ); ?>
<!-- loop stuff here -->
<? endforeach; endif; } ?>

Ahora bien, la opción más segura será siempre crear una plantilla de página personalizada cuyo loop tenga el primer código y elijas esa plantilla para tus páginas “madre”.

Estupendo truco de The WordPress Guru

Proteger el fichero wp-config.php desde .htaccess

Uno de los archivos más importantes de una instalación de WorPress, si no el más importante, es el archivo de configuración wp-config.php.

Y, en consecuencia, uno de los objetivos de cualquier indeseable que quiera hackear tu WordPress.

Pues bien, buena noticia, proteger este archivo de accesos no deseados es muy sencillo. Solo debes añadir unas líneas de código al fichero .htaccess de tu instalación de WordPress, estas:

<Files wp-config.php>
order allow,deny
deny from all
</Files>

Guardas los cambios y ya está. Por supuesto, si no tienes un archivo .htaccess debes crearlo accediendo con tu aplicación cliente FTP.

Importa a WordPress cualquier web

Supongo que ya sabrás que WordPress dispone de importadores para muchos sistemas de gestión de contenidos, incluso desde un canal RSS, pero hay veces que lo que queremos importar es una web que no tiene ningún tipo de base de datos o sistema exportable.

También tenemos problemas cuando la vieja web usa un CMS incompatible con casi todo, o versiones antiguas que no reconocen los importadores.

En esas ocasiones, dejando aparte la tediosa tarea de crear páginas a mano y esas cosas indeseables por lo lentas, tenemos una salvación.

Y esta salvación viene en forma de plugin, URL cloner, una pequeña maravilla que permite importar a WordPress contenido de cualquier URL ¿alguien da más?.

URL cloner usa la API de ClearRead y permite el tipo de entrada, estado de publicación, categoría, autor, incluso fecha de publicación original de la URL que vayas a clonar.

¿Pegas?, pues si, tiene una, y es que de momento solo permite clonar una URL cada vez, con lo que el proceso puede parecer un pelín tedioso si tuvieses muchas páginas en la vieja web, pero hacer el trabajo lo hace y bien en la mayoría de las ocasiones. Yo lo he probado con una web hecha en HTML, con 20 páginas, y ha hecho bien la tarea, más rápido con diferencia que si hubiese tenido que crear páginas o entradas por mi cuenta copiapegando contenido.

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.

Evitar que Skype se “cuele” en tu WordPress

Vale que Skype es una aplicación de videoconferencia maravillosa, yo mismo la uso a diario para comunicar con familia, amigos y colaboradores, en todo tipo de entornos, y hace años.

Pero tiene una fea costumbre, y es añadir una especie de plugin a los navegadores que convierte todo teléfono que se encuentre en un elemento activo, y de paso le agrega una banderita, un icono de un teléfono, y le cambia de color, todo muy mono.

Pero ¿y si yo no quiero que me cambie mi WordPress?

Me dirás que vaya chorrada, “¡coño Fernando, entra en tu configuración de Skype y quita la marca que añade ese tipo de cosas al navegador!“. Y si, eso vale para mi pero ¿y para todos los que visitan la página? ¿por qué tiene mi web que verse con esos colorines si yo elegí un tema minimalista, o incluso monté una clase CSS específica para mostrar el teléfono?. Pues eso.

Bueno, vamos al grano. La idea es tunear tu WordPress para que, da igual si tus visitantes tienen activo esa funcionalidad, vean los números de teléfono, de tu página de contacto por ejemplo, como tu las pariste, sin banderitas ni hostias.

Ea, pues si es tu caso corre a instalar y activar el plugin llamado Prevent Skype OverWriting. No hay nada que configurar, lo activas y ya funciona como debe.

¿Ah, que no quieres instalar más plugins?, pues tampoco pasa nada, está igual de chupado mediante una sola línea de código. Solo tienes que añadir esto al fichero header.php de tu tema activo:

<meta name="SKYPE_TOOLBAR" content="SKYPE_TOOLBAR_PARSER_COMPATIBLE" />

Dicho sea de paso este código sirve para cualquier HTML, la cosa es añadirlo siempre antes de la tag < /head >.

Con cualquiera de estos métodos pasas de esto …

a esto otro … 

A partir de ahí, el que te quiera llamar que te llame por teléfono y si de verdad quieres añadir un enlace que active Skype en WordPress lo haces tu manualmente, controlado y como tu decidas.

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.

BuddyPress 1.5.5, actualización importante de seguridad

Acaba de salir a la luz la versión 1.5.5 de BuddyPress, una actualización de seguridad que soluciona 14 fallos, incluida una vulnerabilidad potencial de seguridad que afecta a todas las versiones anteriores de la serie 1.5.x, así que a correr a actualizar.

Evitar actualizaciones de algunos plugins WordPress

Vale que las actualizaciones (fáciles que no automáticas) de WordPress son una gozada, y que ya es rara la situación en que debamos recurrir a usar un cliente FTP para actualizar nuestro WordPress, un plugin o un tema, pero no siempre hay que actualizarlo todo ¿o si?.

A mi se me ocurren muchas situaciones en que no es conveniente actualizar según qué plugins, por ejemplo:

  • Has modificado el plugin
  • La actualización requiere otra versión de WordPress, PHP, etc
  • La actualización conlleva cambios de funcionamiento que no necesitas
  • La versión actual va perfecta (no siempre hay que actualizar)
  • Has traducido mensajes del plugin manualmente
  • Prefieres actualizar tu por FTP y evitar desastres en directo
  •  … otras

Sea por el motivo que sea no siempre es conveniente lanzarse a actualizar a todo lo nuevo que salga, y menos sin hacer pruebas antes.

Si quieres controlar qué algunos plugins no se puedan actualizar automáticamente a golpe de clic puedes instalar Block specific plugin update, un ídem, que permite definir una lista de plugins que estarán en lista negra, que no se podrán actualizar por el método habitual.

En la página de ajustes marcas la casilla de los que pones en cuarentena y luego tienes que salir y volver a entrar en WordPress para que los cambios tengan efecto para todos los usuarios, tu incluido.

Phising a desarrolladores de plugins WordPress

Me avisa José Conti que todos los desarrolladores de plugins que publican en el repositorio oficial de WordPress han recibido un email avisando de phising, que traduzco a continuación …

Hola,

Recibes este email porque estás en la lista de autores o colaboradores de un plugin WordPress alojado en wordpress.org/extend/plugins/.

Recientemente se ha enviado emails de “phishing” a varios autores de plugins, diseñados para robar sus datos de acceso. Si recibes o has recibido algún email que aluda provenir del repositorio de plugins, asegúrate de comprobarlo varias veces. Los emails relativos al repositorio siempre se mandan desde una dirección de email de wordpress.org. Si tienes dudas, por favor, responde al email pidiendo confirmación.

No es difícil identificar un email “phishing”:

  • Todos los clientes de email modernos detectan la mayoría de ellos.
  • Mal inglés, gramática inglesa pobre.
  • Texto genérico
  • Enlace(s) que te tratan de llevar al sitio engañoso

Otra manera estupenda es leer el email como texto. Muchos clientes de email tienen una opción para eliminar todo el HTML y mostrar los mensajes como texto.

Si has recibido un email similar a ese y has hecho clic en algún enlace, podría ser un buen momento para visitar wordpress.org y cambiar tu contraseña. Si no es así, como autor de plugins es una buena idea cambiar tu contraseña regularmente.

Otro tipo de emails a vigilar son los que tengan un aspecto extraño, peticiones genéricas de ayuda, normalmente enviadas a través del formulario de contacto de tu web, y que contengan frases como …

“Desarrollador de WordPress, ¿Como te va? Encantado de contactar contigo”.

Estos serían intentos de obtener direcciones de email (si respondes) para el intento de phishing.

Mantente seguro,

El equipo de WordPress.

Así que ya sabes, no te fíes de cualquier email, menos de los que lleven enlaces. Yo siempre reviso el código fuente de los emails que me son sospechosos.