Cambia el texto “Read more” con una simple función

Cuando hablaba de las ventajas de un plugin de funciones, una de las principales es que, si añades código que afecta al tema, aunque lo actualices, el código seguirá funcionando pues es una función que realiza una llamada externa, en la que no has modificado ningún fichero original del tema.

Pues bien, una de las modificaciones más típicas es cambiar el texto “Sigue leyendo“, o “Read more” que llevan todos los temas cuando muestran el extracto de una entrada.

Por supuesto, podrías ir al archivo 'index.php' de tu tema y cambiar la línea del loop, pero otra opción es añadir un pequeño código al fichero functions.php de tu tema o a tu plugin de funciones.

Simplemente es este código:

// Cambiar texto de "read more"
function be_excerpt_more( $more ) {
	return 'Dale que hay más ...';
}
add_filter( 'excerpt_more', 'be_excerpt_more' );

La línea importante, donde defines tu propio “Read more”, es en la cadena return, simplemente sustituye el texto entre comillas simples por el tuyo, que en este caso he utilizado ‘Dale que hay más …

Luego, si eres de los que no están nunca contentos, siempre puedes modificar el “Leer más” en cada entrada con este truco.

Crea tu primer plugin WordPress

Venga, que es muy fácil. Vamos a crear nuestro primer plugin WordPress, y una vez hecho este ya solo tienes que lanzarte y empezar a crear tus propias criaturas, poco a poco.

Además, que no necesitas ser programador para hacer tu primer plugin WordPress, solo seguir unas sencillas líneas. Lo único que necesitas es un editor de texto plano, como Notepad de Windows o TextEdit de Mac, aunque yo te recomiendo mejor Notepad++ para Windows y Fraise para Mac.

¡Vamos a ello!

1. La Cabecera del plugin

Un plugin WordPress debe tener una serie de información para que WordPress lo identifique como tal y, sobre todo, funcione. Lo primero de todo es abrir el melón con la etiqueta que lo identifique como código PHP.

Así que abre tu editor de código favorito, de los que comentamos antes, y añade lo siguiente en la primera línea:

<?php

A partir de aquí le añadimos texto que le dirá a WordPress como se llama el plugin, quien lo ha hecho, qué hace y algunas cosas más. Sería algo así:

/*
Plugin Name: Entradas a colores
Plugin URI: http://ayudawordpress.com/
Description: Con este plugin se cambia el color de fondo en la administración de entradas, según si su estado es Publicada, Borrador o Pendiente de revisión. El código que utiliza es <a href="http://ayudawordpress.com/distinto-color-segun-el-estado-de-las-entradas/">este</a>.
Más información sobre como se ha creado este plugin en <a href="http://ayudawordpress.com/crea-tu-primer-plugin-wordpress/">este artículo</a>
Version: 0.1
Author: Fernando Tellado
Author URI: http://tellado.es
License: GPLv2 o posterior
*/

Es vital que esta sección de cabecera comience con /* y termine con */, lo que indica que es texto que no se ejecuta, pero que WordPress usa para mostrar la información de tu plugin una vez instalado.

2. El código

Hasta ahora solo hemos preparado la infraestructura, pero en realidad nuestro plugin no hará nada, así que ya es hora de añadirle el código que – de verdad – lo hará útil.

Para este primer plugin te recomiendo usar alguna de las funciones PHP que he ido publicando, y que tienes en este archivo de la tag functions, te valdrá prácticamente cualquiera de los códigos.

Yo he elegido uno que cambia el color de fondo de las entradas en la página de administración de las mismas, dependiendo de su estado.

Simplemente copia este código y lo añades a continuación de la cabecera:

function posts_status_color() {
?>
  <style>
  .status-draft { background: #FCE3F2 !important; }
  .status-pending { background: #FCFC85 !important; }
  .status-publish { /* por defecto */ }
  .status-future { background: #C6EBF5 !important; }
  .status-private { background: #E7C7B4; }
  </style>
<?php
}
add_action('admin_footer','posts_status_color');

Tras añadir el código nuestro plugin ya estaría completo, simple pero efectivo. Quedaría así:

<?php
/*
Plugin Name: Entradas a colores
Plugin URI: http://ayudawordpress.com/
Description: Con este plugin se cambia el color de fondo en la administración de entradas, según si su estado es Publicada, Borrador o Pendiente de revisión. El código que utiliza es <a href="http://ayudawordpress.com/distinto-color-segun-el-estado-de-las-entradas/">este</a>.
Más información sobre como se ha creado este plugin en <a href="http://ayudawordpress.com/crea-tu-primer-plugin-wordpress/">este artículo</a>
Version: 0.1
Author: Fernando Tellado
Author URI: http://tellado.es
License: GPLv2 o posterior
*/
function posts_status_color() {
?>
  <style>
  .status-draft { background: #FCE3F2 !important; }
  .status-pending { background: #FCFC85 !important; }
  .status-publish { /* por defecto */ }
  .status-future { background: #C6EBF5 !important; }
  .status-private { background: #E7C7B4; }
  </style>
<?php
}
add_action('admin_footer','posts_status_color');

Ya podemos guardarlo, con el nombre que queramos. Eso si, es importante que no dejes espacios en el nombre y que la extensión sea .php. Podría ser algo como … entradas-a-colores.php

3. El plugin

Pues ¡ya tenemos el plugin creado!. Ese archivo PHP es nuestro plugin. Para subirlo a WordPress antes hay que comprimirlo en formato ZIP. Usa tu programa favorito y comprímelo. De nuevo, el nombre es importante que no contenga espacios a ser posible.

Ahora solo queda instalarlo. Para ello vas a la administración de tu WordPress y eliges el menú ‘Plugins -> Añadir nuevo‘ y, en la siguiente pantalla eliges la opción de “Subir“. Eliges el fichero recién comprimido de tu ordenador y haces clic en “Instalar ahora“.

plugin6 plugin5 plugin4

Una vez instalado ya estará disponible en la página de Plugins y lo podrás activar para, en este caso, mostrar las entradas a colores según su estado.

Fácil ¿eh?. ¡Venga, te toca!

Documentación para crecer: WordPress Codex

Mostrar miniaturas de vídeos YouTube en WordPress

A través de la API de desarrolladores de YouTube hay unos códigos que podemos usar para mostrar en nuestro sitio miniaturas de vídeos YouTube, mediante un ‘shortcode’.

Lo primero es añadir el siguiente código al fichero functions.php o nuestro plugin de funciones:

/*
    Shortcode para mostrar miniaturas youtube en wordpress
    Uso:
    [miniatura_youtube id="VIDEO_ID" img="0" align="left"]
    VIDEO_ID= ID del vídeo Youtube
    img=0,1,2 o 3
    align= left,right,center
*/
function mininaturas_youtube($atts) {
     extract(shortcode_atts(array(
          'id' => '',
          'img' => '0',
          'align'=>'left'
     ), $atts));
    $align_class='align'.$align;
    return '<img src="http://img.youtube.com/vi/'.$id.'/'.$img.'.jpg" alt="" class="'.$align_class.'" />';
}
add_shortcode('miniatura_youtube', 'miniaturas_youtube');

Una vez guardados los cambios podemos ya insertar el nuevo ‘shortcode’, que aceptará los siguientes parámetros: El ID del vídeo, el tamaño de imagen (0 para 480*360px, 1 para 120*90) y la alineación de la imagen (left, right, center).

Y sería algo así:

[miniatura_youtube id="3Jt7-nBfULU" img="0" align="center"]

Y verías algo así …

Contenido exclusivo para usuarios registrados

Si quieres fidelizar a tus visitantes, ofrecer un valor añadido para que se registren en tu WordPress, un modo de hacerlo es ofrecer que parte del contenido sea exclusivo, de manera que solo los usuarios registrados lo vean.

Estoy hablando de que, por ejemplo, si redactas un tutorial, ofrezcas la descarga en PDF solo para usuarios registrados, o fotos exclusivas, o incluso un vídeo de “cómo hacerlo”, lo que sea. El usuario normal accederá al contenido normal y el registrado a un plus que favorece el registro.

Como siempre veremos dos maneras de hacerlo …

1. Contenido exclusivo con plugin

Hay muchos plugins que permiten definir partes de contenido solo para usuarios registrados, pero como siempre recomiendo Members para la gestión fina de usuarios, y si vas a tener muchos usuarios registrados ya lo tendrás instalado (y sino ya estás corriendo a hacerlo), aprovecharemos que este plugin tiene una opción por defecto para hacer precisamente de lo que estamos hablando.

Además, como es opción por defecto no tienes que activarla, nada más instalarlo ya te permite restringir contenido y, en la página de ajustes, definir el mensaje de error, que puede contener, a su vez, shortcodes o HTML para personalizar ese mensaje.

Una vez activo puedes, ya desde el editor, definir quien verá la entrada. Y esta es la limitación de Members, que no puedes marcar parte del texto como exclusivo, sino que trabaja sobre toda la entrada. Eso si, puedes definir qué perfiles de usuario verán el contenido y quienes no, lo que no está nada mal.

Si quieres actuar sobre parte del contenido entonces puedes usar las siguientes opciones …


¿Que no te gusta Members?, o prefieres restringir solo parte del contenido, pues hay otro plugin, Hidepost, que ofrece el shortcode “[hidepost]” en el que puedes definir el nivel mínimo de usuario que podrá ver el contenido, todo o en parte.

2. Contenido exclusivo mediante código

Por supuesto, también puedes añadir código a tu fichero functions.php o a tu plugin de funciones. Para ello puedes usar esta extensa guía de como ofrecer contenido exclusivo a usuarios registrados, o con este otro código, que crearía un shortcode llamado exclusivo:

//Shortcode para contenido exclusivo
add_shortcode( 'exclusivo', 'contenido_registrados' );
function contenido_registrados( $atts, $content = null ) {
        if( is_user_logged_in() ) return '<p>' . $content . '</p>';
        else return;
}

Una vez guardados los cambios solo tienes que usar el shortcode siguiente:

[exclusivo]Aquí el contenido exclusivo[/exclusivo]

Ahora ¡a jugar!. Yo me quedo investigando como permitir acceso solo a Angelina Jolie ;)

Barra de admin, solo para los admin

La nueva barra de admin de WordPress se muestra por defecto para todos los usuarios registrados pero si quieres que solo la visualicen los administradores de tu WordPress solo tienes que añadir un pequeño código.

Para ello abre el fichero functions.php de tu tema activo, o modifica tu plugin de funciones, y añade el siguiente trozo de código:

//Barra de admin solo para admins
if (!current_user_can('manage_options')) {
	add_filter('show_admin_bar', '__return_false');
}

Guardas los cambios y ya lo tienes.

Cambiar enlaces de tu RSS a Feedburner

No hace falta que me repita, porque ya he explicado varias veces las ventajas de usar un servicio como Feedburner para gestionar nuestros RSS en vez de los feeds por defecto, así que iré directamente al grano.

Cuando ya tienes un RSS de Feedburner lo siguiente es ofrecerlo a tus visitantes, y para eso tienes que hacer un par de cosas, a saber …

  1. Anunciarlo bien, quizás en tu barra lateral, con un enlace e icono bien clarito
  2. Cambiar los enlaces a los feeds por defecto para que dirijan a tus visitantes al RSS de Feedburner

Para lo primero no hay prácticamente opciones, creas un widget o similar y lo pones a tu gusto, pero para lo segundo ya tenemos varias posibilidades, vamos a verlas todas …

1. Plugin

Lo primero que se os ocurre a muchos es instalar un plugin que haga el cambio por nosotros, lo que no es mala opción, y de paso nos evitamos tener que tocar código, y además funcionará aunque cambiemos de tema en nuestro WordPress, que por si solo ya es un muy buen argumento.

Para esta utilidad hay muchos, y quizás el más utilizado es FD Feedburner, aunque siempre puedes usar el oficial de Google.

2. Modificar el tema

Esta opción, aunque asuste a los más nuevos en esto del desarrollo, en realidad es muy sencilla y apta para todos los públicos. La principal ventaja es que no tienes que instalar un plugin, con el consiguiente ahorro en consumo de recursos, para algo tan simple como una redirección que puedes hacer tu mismo en unos segundos.

El proceso es muuuuy sencillo, pero hay 2 posibilidades …

A: Enlace en la cabecera del tema

  1. Abres el fichero header.php de tu tema activo
  2. Localizas las líneas de código para la suscripción al feed, como esta:
    <link rel="alternate" type="application/rss+xml" title="<?php bloginfo('name'); ?> RSS Feed" href="<?php bloginfo('rss2_url'); ?>" />
  3. Lo sustituyes por algo así:
    <link rel="alternate" type="application/rss+xml" title="<?php bloginfo('name'); ?> RSS Feed" href="http://feeds.feedburner.com/AyudaWordPress" />

    Simplemente cambia la URL del RSS de Feedburner de Ayuda WordPress (http://feeds.feedburner.com/AyudaWordPress) por el tuyo.

B: Función que genera los enlaces en la cabecera

Esta opción, disponible desde WordPress 3.0, la encontrarás en temas tan comunes como el mismo Twenty Eleven. En este caso no encontrarías los enlaces de antes en el fichero header.php, sino que tendrías que buscar en otro archivo, en functions.php del mismo tema este código:

add_theme_support( 'automatic-feed-links' );

Pues bien, si este es el caso lo que tienes que hacer es esto (también sencillo):

  1. Borras la línea anterior del fichero ‘functions.php
  2. Añades la siguiente línea al fichero ‘header.php‘ de tu tema
    <link rel="alternate" type="application/rss+xml" title="<?php bloginfo('name'); ?> RSS Feed" href="http://feeds.feedburner.com/AyudaWordPress" />

De nuevo, sustituye mi RSS de Feedburner por el tuyo y ya está.

3. Función que sustituya los RSS por los de Feedburner

Para mi la opción más elegante, a la par de resultona. Y es que, además de que no consume recursos, con este método tampoco tienes que acordarte si cambias de tema.

Aquí echaremos mano de nuestro archivo functions.php, o si lo prefieres de tu plugin de Funciones, opción con la que no tendrías que acordarte si cambias de tema, y simplemente le añadimos estas líneas:

// Redirigir feeds a Feedburner en el tema
add_action('template_redirect', 'redirige_rss_feedburner');
function redirige_rss_feedburner() {
        if ( is_feed() && !preg_match('/feedburner|feedvalidator/i', $_SERVER['HTTP_USER_AGENT'])){
                header('Location: http://feeds.feedburner.com/AyudaWordPress');
                header('HTTP/1.1 302 Temporary Redirect');
        }
}

De nuevo pones la URL de tu Feedburner, guardas los cambios y a correr.

¿Cual te parece mejor opción y, sobre todo, por qué?

Take Our Poll

Mostrar imágenes destacadas en el feed

Con lo difícil que es actualmente destacar entre la gran cantidad de contenidos que hay en la red, cada vez cuesta más atraer lectores, no digamos fidelizarlos.

Si a esto le unimos que si tu web es de una temática muy concreta lo más seguro es que ni siquiera te visiten vía web sino a través de un lector de RSS (bastante habitual aquí en Ayuda WordPress), no se si te ha pasado por la cabeza pensar en la inutilidad del diseño en la web, de preocuparse de buscar un buen tema, de poner imágenes destacadas y esas cosas. A mi si, muchas veces.

Pero bueno, como aquí estamos para dar soluciones vamos al grano, en este caso para atraer a los suscriptores por RSS – o futuribles – a leer nuestro feed en vez de otros, gracias a la funcionalidad de WordPress de imágenes destacadas

Y es que por mucho que nos empleemos en ilustrar bien nuestro contenido, si nos leen por RSS perdemos diseño, la funcionalidad de muchos plugins y, por supuesto, esa cosa tan chula que supone para embellecer nuestras publicaciones que es las imágenes destacadas.

Si publicas tu feed completo olvida este truco, pero si ofreces solo el extracto del RSS y quieres dar mayor atractivo y que visiten tu web para ver el contenido completo, entonces tiene todo el sentido aprovechar las imágenes destacadas para animarles visualmente a hacerlo.

Y conseguirlo es bien fácil, solo tienes que añadir este código a tu plugin de Funciones:

// Mostrar miniatura de imagen destacada en el feed
add_filter('the_content_feed', 'imagen_destacada_rss');
function imagen_destacada_rss($content) {
        global $post;
        if( has_post_thumbnail($post->ID) )
                $content = '<p>' . get_the_post_thumbnail($post->ID, 'thumbnail') . '</p>' . $content;
        return $content;
}

Guardas los cambios y ya lo tienes, incluso puedes añadir algo de HTML por tu cuenta y mostrar algún enlace, lo que se te ocurra.

En el código anterior se mostrará la miniatura antes del extracto del texto, si prefieres que se añada después debes cambiar esta línea:

$content = $content . '<div>' . get_the_post_thumbnail($post->ID) . '</div>';

Y si prefieres que el texto envuelva a la imagen destacada en miniatura entonces esa misma línea quedaría así:

$content = get_the_post_thumbnail($post->ID) . $content;

Si te fijas simplemente jugamos con la posición del div, o lo quitamos (en la última opción).

Otra personalización que puedes hacer es modificar el tamaño de la imagen mostrada. En el ejemplo he usado el de miniatura (thumbnail) pero puedes cambiarlo a ‘medium‘, ‘large‘ o incluso a tamaño completo (full), eso ya es cuestión de probar cual se ajusta mejor, y también depende de como tengas configurados los tamaños de imagen en los ajustes multimedia de tu WordPress.

Y creo que ya no me dejo nada. Solo debes acordarte de siempre definir una imagen destacada en tus entradas, por supuesto, sino no se mostrará nada, que WordPress es listo pero el plugin de intuir tus intenciones aún no está disponible ;)

Nota: este código solo afecta a los feeds por defecto, si usas Feedburner o similares es bastante probable que no funcione pues utilizan sistemas distintos

Crea un plugin para liberar el fichero functions.php

Si no te quedó claro si es mejor usar un plugin o el fichero functions.php ¿que te parecería crear tu propio plugin para incorporar tus funciones favoritas?.

Es lo que hice hace tiempo y tengo que decir que estoy encantado. Simplemente monté un pequeño plugin a mi medida en el que incorporé las funciones que uso más a menudo y así cuando monto un sitio nuevo solo tengo que instalarlo, personalizar alguna URL absoluta – que la tiene – y activarlo para que todo funcione.

La ventaja, si te lo preguntas, sobre usar el fichero functions.php de tu tema es principalmente que puedes actualizar tu tema sin temor a perder tus personalizaciones, pues tus funciones están en tu plugin, no en el tema.

Hacerlo es muy sencillo …

1. Crear fichero del plugin

Lo primero es hacer el plugin. Para eso creas un archivo PHP nuevo con tu editor de código favorito y le añades la cabecera estándar para que WordPress lo reconozca como plugin, algo así:

<?php
/*
Plugin Name: Funciones
Plugin URI: http://ayudawordpress.com/
Description: Plugin para liberar de funciones el fichero <code>functions.php</code> y activarlo a placer (o no) .
Version: 1.0
Author: Fernando Tellado
Author URI: http://tellado.es
License: GPLv2 o posterior
*/

2. Añadir funciones

A partir de ahí simplemente vas añadiendo tus funciones y cuando estés contento guardas los cambios. Este sería un ejemplo con un par de funciones típicas que ya he publicado anteriormente:

<?php
/*
Plugin Name: Funciones
Plugin URI: http://ayudawordpress.com/
Description: Plugin para liberar de funciones el fichero <code>functions.php</code> y activarlo a placer (o no) .
Version: 1.0
Author: Fernando Tellado
Author URI: http://tellado.es
License: GPLv2 o posterior
*/

// Logo personalizado en login
function my_custom_login_logo() {
    echo '<style type="text/css">
        h1 a { background-image:url('.get_bloginfo('template_directory').'/images/mi-logo.png) !important; }
    </style>';
}

add_action('login_head', 'my_custom_login_logo');

// Añadir campos sociales a los perfiles y elimina (unset) los inútiles
function add_redessociales_contactmethod( $contactmethods ) {
  // Add Twitter
  $contactmethods['twitter'] = 'Twitter';
  // Add Facebook
  $contactmethods['facebook'] = 'Facebook';
  // Remove Yahoo IM
  unset($contactmethods['yim']);
  unset($contactmethods['aim']);
  unset($contactmethods['jabber']);
  return $contactmethods;
}
add_filter('user_contactmethods','add_redessociales_contactmethod',10,1);

3. Instalar y activar el plugin

Luego lo subes a la carpeta ‘/plugins/‘ de tu instalación de WordPress y ya podrás activarlo como cualquier otro plugin, solo que este hace funciones específicas para ti.


Duda Nº1: ¿Tengo que seguir usando el fichero functions.php para algo o ya no?.

Respuesta Nº1: Seguro que si. Lo que tienes que tener en cuenta es lo siguiente:

  • Si la función afecta o está relacionada con el tema (o temas) entonces irá mejor en el fichero functions.php
  • Si la función está relacionada con funcionalidades generales de WordPress entonces irá mejor en tu plugin de funciones
  • Hacerlo así (plugin por un lado y ‘functions.php’ por otro) es un modo mucho más lógico y ordenado de hacer las cosas

Nota Nº1: Por supuesto, una vez actives el plugin ya puedes eliminar (de hecho debes hacerlo) las funciones que incorpore del archivo ‘functions.php’ de tu tema y ya estén en el plugin.

Nota Nº2: Si quieres puedes usar mi plugin Funciones como base, a continuación puedes descargarlo:

zip Plugin Funciones v.1.0 (1.92 kB )

Añadiendo tweets a WordPress con Twitter oEmbed

Twitter ha incluido recientemente soporte de oEmbed a su API. Y esto, que parece ajeno a nosotros en principio, resulta en una buena noticia, pues aunque ya podíamos incrustar tweets en nuestras entradas, ahora, como WordPress ya incluye de forma nativa oEmbed, podemos insertar tweets de manera mucho más sencilla.

Solo hay que añadir una pizca de código para poder hacerlo. Para ello solo hay que incluir esto en el fichero functions.php de nuestro tema activo:

//Tweets en entradas
add_filter('oembed_providers','twitter_oembed');
function twitter_oembed($a) {
	$a['#http(s)?://(www\.)?twitter.com/.+?/status(es)?/.*#i'] = array( 'http://api.twitter.com/1/statuses/oembed.{format}', true);
	return $a;
}

Guardamos y ya no necesitamos más. Ahora solo con añadir la URL de un tweet veremos el mismo incrustado en nuestra entrada, como en este ejemplo, donde ya he usado este código …

WordPress 3.3: Error inesperado del “timeout” durante la petición API http://t.co/GDvf84Gk#wordpress
Dec 21 via twitterfeedFavoriteRetweetReply

Formulario de acceso donde quieras

Si quieres ofrecer un formulario de acceso a tu sitio WordPress, pero no te gusta usar el widget Meta, o tu tema no trae una plantilla de página al efecto, puedes preparar tu propio shortcode que, insertado en entradas o páginas, permitirá acceder a tu sitio de un modo totalmente integrado en tu tema.

Para ello solo tienes que añadir un pequeño código …

Solo son 2 pasos:

  1. Abres el fichero functions.php de tu tema activo y añades lo siguiente:
    //Shortcode para login donde quieras
    function ayudawp_formulario_login_shortcode() {
    	if ( is_user_logged_in() )
    		return '';
    
    	return wp_login_form( array( 'echo' => false ) );
    }
    
    function ayudawp_add_shortcodes() {
    	add_shortcode( 'ayudawp_formulario_login', 'ayudawp_formulario_login_shortcode' );
    }
    
    add_action( 'init', 'ayudawp_add_shortcodes' );
    

    Guardas los cambios.

  2. Añades el nuevo shortcode en cualquier parte de una entrada o página:
    [ayudawp-formulario-login]

Y ya lo tienes. ¡Que lo disfrutes!