Excluir artículos del feed de WordPress

Hace ya tiempo que vimos como excluir categorías del feed RSS pero ¿y si lo que quieres es excluir solo ciertos artículos?, que esas entradas que no aportan nada a tus suscriptores, vayan en la categoría que vayan.

Pues se puede …

De nuevo recurriremos al plugin de funciones, o el archivo functions.php para añadirle este código:

// Excluir posts del feed por ID
function excluir_posts_feed($where, $wp_query = NULL) {
	global $wpdb;
	if ( !$wp_query )
		global $wp_query;
	if ($wp_query->is_feed) {
		// excluye los posts con ID 145 y 657
		$where .= " AND $wpdb->posts.ID NOT IN (144, 657)";
	}
	return $where;
	}
add_filter( 'posts_where','excluir_posts_feed', 1, 2 );

Como ya imaginas tienes que adaptarlo a tus necesidades, eligiendo los ID de las entradas que quieres excluir en vez de los del ejemplo y, más adelante, ir añadiendo los que quieras seguir excluyendo.

Mensajes de error personalizados en WordPress

El otro día vimos como añadir avisos personalizados en WordPress, al estilo 3.3, pero hay veces que llama más la atención el feo mensaje de error, precisamente por lo escandaloso que es.

Si quieres dejar mensajes de aviso urgente, que no se escapen a la vista de nadie, es muy sencillo.

Lo único que tienes que hacer es añadir un código como este a tu plugin de funciones o el archivo functions.php de tu tema activo:

// Mensaje de aviso o error en admin
function showMessage($message, $errormsg = false)
{
	if ($errormsg) {
		echo '<div id="message" class="error">';
	}
	else {
		echo '<div id="message" class="updated fade">';
	}
	echo "<p><strong>$message</strong></p></div>";
} 

function showAdminMessages()
{
    showMessage("No olvides añadir siempre una imagen a tus artículos. Además recuerda siempre poner la tag "Principiante", "Avanzado" o "Experto" según el destinatario de la publicación..", true);
}
add_action('admin_notices', 'showAdminMessages');

Solo tienes que cambiar el mensaje del ejemplo por el que tu necesites y guardar los cambios. A nadie se le escapará tu mensaje, no lo dudes.

Asociar iconos a categorías

The Usual purp (http://www.flickr.com/photos/12187843@N07/2035153457/)

Si quieres identificar en tu tema las categorías a iconos que las distingan puedes hacerlo de varias maneras, ya sea mediante códigos o plugins.

Vamos a ver un par de opciones de cada posibilidad …

1. Asociar iconos a categorías mediante código

Tenemos un par de códigos con los que hacerlo. El primero, añadido a nuestro plugin de funciones o archivo functions.php, sería así:

<?php

function get_cat_icon($las_categorias) {
foreach( $las_categorias as $category) {

if ($category->cat_name == “Categoria 1″) {
echo ‘<a href=”http://www.tusitio.com/category/categoria1″><img src=”http://ruta/a/tus/imagenes/imagen1.png” /></a>’;
} elseif ($category->cat_name == “Categoria 2″) {
echo ‘<a href=”http://www.tusitio.com/category/categoria2″><img src=”http://ruta/a/tus/imagenes/imagen2.png” /></a>’;
}
}
} ?>

Luego debes sustituir el loop para que acoja la nueva función, así:

<?php
$the_categories = get_the_category();
get_cat_icon($las_categorias);
?>

Otra posibilidad es usar este código directamente en el loop:

<?php
foreach((get_the_category()) as $category) {
    echo '<img src="http://www.tusitio.com/imagenes/' . $category->cat_ID . '.jpg" alt="' . $category->cat_name . '" />';
}
?>

Lo que tienes que cambiar es la ruta a tus imágenes y nombrar los iconos correspondientes con los números de ID de tus categorías, de manera que 1.jpg sea el icono para la categoría con ID 1, y así sucesivamente. Sencillo ¿no?.

2. Asociar iconos a categorías con plugin

De nuevo tenemos un par de posibilidades, elige el que mejor se adapte a tus necesidades y gustos.

Con Category and page icons solo tienes que asignar iconos a categorías (también a páginas si quieres) y allá donde se encuentre la función “wp_list_pages” o “wp_list_categories” se añadirá el icono elegido. Lo mejor de este plugin es que no tienes que modificar ni tocar el código de tu tema.

category pages icons2 category pages icons1

Puedes usar los iconos predefinidos o subir los tuyos propios, luego, en una pantalla de ajustes, asignar iconos a categorías y páginas a voluntad.

El otro plugin recomendable es Icons lite, con el que puedes subir iconos y asignarlos a las categorías que quieras. Una vez hecho esto el plugin mostrará automáticamente el icono asociado antes de la entrada en tu tema y también en la barra lateral.

Si prefieres definir tu mismo donde aparecerá puedes usar esta tag de plantilla:

<?php if (function_exists('get_cat_icon_lite')) echo get_cat_icon_lite();?>
caticons-icons2 caticons-icons1

Por opciones que no quede. ¿Cual has usado o te parece más interesante?, yo aún no tengo muy claro cual utilizar, pero me estoy pensando incorporar algo así en el blog.

Mostrar mensajes especiales en entradas antiguas

Supongo que ya sabes que pasado cierto tiempo, normalmente días, los visitantes que llegan a tu web provienen mayoritariamente de buscadores. Y esto significa varias cosas, a saber:

  • No son visitantes fieles, tus lectores te visitan cada día
  • El tiempo de permanencia es bajo
  • No suelen dejar comentarios, y casi mejor que no lo hagan
  • El ratio de clic sobre los anuncios suele ser mayor que el de los visitantes habituales

… entre otras muchas cosas.

Entonces ¿por qué no desarrollar una estrategia de cara a este tipo de visitas?, por ejemplo con la publicidad. Porque ya sabes que a los visitantes habituales no les gusta la publicidad, que para eso ya te honran con su presencia diaria, pero seguro que con los visitantes ocasionales si podemos hacer alguna excepción.

Y un modo podría ser configurar nuestro WordPress para que en las entradas con algunos días de antigüedad se muestre algún texto especial, como por ejemplo anuncios que normalmente no molestarían a tus visitantes diarios.

El primer paso es añadir el siguiente código al fichero functions.php de tu tema activo o a tu plugin de funciones:

function es_entrada_vieja($post_id=null){
   $days = 30;
   global $wp_query;
   if(is_single() || is_page()) {
      if(!$post_id) {
         $post_id = $wp_query->post->ID;
      }
      $current_date = time();
      $offset = $days *60*60*24;
      $post_id = get_post($post_id);
      $post_date = mysql2date('U',$post_id->post_date);
      $cunning_math = $post_date + $offset;
      $test = $current_date - $cunning_math;
      if($test > 0){
         $return = true;
      }else{
         $return = false;
      }
   }else{
      $return = false;
   }
   return $return;
}

En este ejemplo el código hace una query para detectar la fecha de cada entrada, y funcionará en entradas con más de 30 días de antigüedad, y si quieres cambiarlo solo debes modificar la cadena $days de la línea 2.

Guardas y ahora ya puedes poner un código de este estilo en tu tema, en el sitio (normalmente en single.php) donde quieras que se muestre la publicidad – solo en las entradas antiguas:

<?php if(es_entrada_vieja()){ ?>
<p>¡HOLA! Si no quieres perderte todo el contenido maravilloso de este blog <a href="http://feeds.feedburner.com/AyudaWordPress"><strong>suscríbete al feed</strong></a>.</p>
<p>AQUÍ VA UN ANUNCIO, UNA IMAGEN O LO QUE SEA</p>
<?php } ?>

Por supuesto, puedes poner ahí lo que quieras, ya sea un script de publicidad, HTML para animar a que se suscriban a tu blog o lo que se te ocurra.

Cambiar contraseña perdida de WordPress

Si has olvidado la contraseña y, por algún motivo que no alcanzo a comprender, no tienes acceso a tu email para recuperarla, ni puedes acceder a tu base de datos, hay una oportunidad más para poder cambiar la contraseña si te acuerdas del ID de tu usuario (que si es un usuario único y aún usas el primero que activaste en la instalación será el número 1).

Eso si, todo arreglo tiene su precio, y es que debes poder acceder por FTP a tu instalación de WordPress.

Si este es tu caso y no te vale la opción de cambio de contraseña mediante PHPmyAdmin o no te fías de scripts para recuperar contraseñas de WordPress, puedes cambiarla con una sencilla función.

Solo tienes que acceder por FTP y abrir el fichero functions.php de tu tema activo y añadir la siguiente función:

wp_set_password('NuevaClave',1);

Donde “NuevaClave” es la nueva contraseña que elijas y “1″ (ambos sin comillas) el ID de usuario. Guarda los cambios y ya podrás entrar en tu sitio con tu nombre de usuario y la “NuevaClave“.

A mandar ;)

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.