Añadir “nofollow” a entradas de una categoría concreta

nofollow

Con los últimos cambios en el SEO hay que estar vigilantes con los enlaces que regalamos (bueno, en realidad esto siempre ha sido así), no digamos si no están relacionados con nuestro contenido.

Una técnica para que Google no los tenga en cuenta, aunque los pongamos, es añadir la relación de enlace conocida como rel="nofollow".

Hemos visto ya algunos modos de usar el “nofollow” pero el truco de hoy atiende a una necesidad específica, y bastante interesante, cómo es añadir automáticamente esta relación de enlace a las entradas de una categoría concreta, digamos por ejemplo, una categoría que usemos para compartir enlaces interesantes, pero no necesariamente relacionados con nuestro contenido.

Si es el caso, solo tendrías que añadir el siguiente código a tu plugin de funciones:

//nofollow automático por categorías
function nofollow_cat_posts($text) {
global $post;
        if( in_category(8) ) { // AQUÍ PONES EL ID DE TU CATEGORÍA
                $text = stripslashes(wp_rel_nofollow($text));
        }
        return $text;
}
add_filter('the_content', 'nofollow_cat_posts');

En este bonito truco de Sagive publicado en Wprecipes lo único que tienes que personalizar es el número ID de la categoría, para que se ajuste a la que tu elijas.

Entradas relacionadas con miniatura sin plugins

guru del código

Las entradas relacionadas son un modo estupendo de atraer a tus lectores hacia otras publicaciones de temática similar, aumentando la fidelidad y permanencia en tu web de los visitantes, así que es un elemento fundamental y casi obligatorio en cualquier sitio.

Si le sumamos una atractiva miniatura de imagen que le de mayor visibilidad a las entradas relacionadas mejor que mejor ¿no?

Pues bien, cómo ya hemos visto en otras ocasiones cómo mostrar entradas relacionadas con código, o uno de los mejores plugins para mostrar entradas relacionadas con miniatura, hoy rizamos el rizo y unimos ambas posibilidades.

posts-relacionados-con-miniatura

Para mostrar entradas relacionadas con miniatura sin plugins hay 3 pasos fundamentales, a saber … 

1. Añadir soporte de miniaturas al tema

Esto ya lo hemos visto varias veces pero lo repasamos por si no lo has añadido ya. Para ello añade al fichero functions.php de tu tema la siguiente línea, con la que le añadimos soporte de miniaturas de entrada:

add_theme_support( 'post-thumbnails' );

Y además, siempre es conveniente definir los tamaños de miniatura adaptados lo mejor posible al diseño:

add_theme_support( 'post-thumbnails' );
set_post_thumbnail_size( 100, 50, true );

A partir de ahí solo tienes que acordarte de que en cada entrada definas una “Imagen destacada” desde la “meta box” del editor así denominada.
imagen destacada

2. Añadir el código al loop

En el loop del archivo single.php debemos añadir el código que mostrará las entradas relacionadas. El sitio ideal sería antes de la llamada a los comentarios, que identificarás por el siguiente código:

<?php comments_template(); ?>

El código sería algo así:

<div class="relacionadas">
<h3>Entradas relacionadas</h3>
<?php
        $orig_post = $post;
        global $post;
        $tags = wp_get_post_tags($post->ID);
        
        if ($tags) {
        $tag_ids = array();
        foreach($tags as $individual_tag) $tag_ids[] = $individual_tag->term_id;
        $args=array(
        'tag__in' => $tag_ids,
        'post__not_in' => array($post->ID),
        'posts_per_page'=>4, // Número de entradas relacionadas a mostrar.
        'caller_get_posts'=>1
        );
        
        $my_query = new wp_query( $args );

        while( $my_query->have_posts() ) {
        $my_query->the_post();
        ?>
        
        <div class="miniaturarelacionada">
                <a rel="external" href="<? the_permalink()?>"><?php the_post_thumbnail(array(150,100)); ?><br />
                <?php the_title(); ?>
                </a>
        </div>
        
        <? }
        }
        $post = $orig_post;
        wp_reset_query();
        ?>
</div>

Básicamente, lo que hace el código anterior es identificar las tags en que está etiquetada la entrada actual para, a continuación, mostrar otras entradas etiquetadas con las mismas tags, excluyendo la entrada actual, que identifica por su ID único. en la línea 14 definimos el número de entradas a mostrar (en el ejemplo 4), que puedes cambiar a tu gusto.

3. Añadir estilos mediante CSS

Ahora bien, lo anterior no quedaría bonito ni atrayente si no creamos unas clases CSS adecuadas, que atraigan atención y coloquen las entradas relacionadas de manera ordenada.

Por tanto, y usando las mismas denominaciones de clases CSS de ejemplo usadas en el código previo, habría que crearlas en la hoja de estilos de tu tema activo, habitualmente el archivo style.css.

Lógicamente, es solo un ejemplo, y debes adaptarlo a los estilos generales de tu tema o tus gustos personales …

.relacionadas {width: 640px; margin: 0 0 20px 0; float: left; font-size: 12px;}
.relacionadas h3 {font-size: 20px; margin: 0 0 5px 0; }
.miniaturarelacionada {margin: 0 1px 0 1px; float: left; }
.miniaturarelacionada img {margin: 0 0 3px 0; padding: 0;}
.miniaturarelacionada a {color :#333; text-decoration: none; display:block; padding: 4px; width: 150px;}
.miniaturarelacionada a:hover {background-color: #ddd; color: #000;}

Lo que hace este CSS de ejemplo es mostrar las miniaturas con un ancho de 150 pixels, lo que significa que para un ancho del bloque principal de 640 pixels mostraría 4 entradas, márgenes incluidos. Por descontado que debes ajustar esto a tus necesidades, reduciendo el valor .miniaturarelacionada a 125 pixels si quieres 5 miniaturas, por poner un ejemplo. No digamos si el ancho del bloque de la entrada de tu tema WordPress es menor de 640 pixels.

También, y para terminar, es importante que definas el ancho de las miniaturas en los ajustes multimedia de WordPress al mismo tamaño especificado en el CSS que, además, debe coincidir con el tamaño definido en el código php en the_post_thumbnail(array(150,100).

Por lo demás funciona de maravilla, siempre y cuando etiquetes tus entradas claro, sino verás un feo espacio en blanco.

Redirige errores 404 a tu página principal

404

El SEO es un fastidio, no sé si estarás de acuerdo conmigo, pues resulta que no siempre es suficiente con escribir mucho y escribir buenos artículos originales, hay imponderables que pueden perjudicar tu web de cara a los buscadores, y los errores de página no encontrada, o 404, son uno de esos imponderables.

Vale que los temas WordPress suelen ofrecer una página 404 para que no sea un error puro y duro, y de paso ofrecer un buscador o lo que sea, pero a veces es más conveniente que todo error 404 se dirija a la portada de tu web, donde si hay contenido.

Si es el caso, y quieres hacer esta redirección, solo hay que añadir estas líneas al archivo .htaccess:

< IfModule mod_alias.c >
RedirectMatch 301 ^/search/$ http://miweb.es/
RedirectMatch 301 ^/tag/$ http://miweb.es/
RedirectMatch 301 ^/category/$ http://miweb.es/
< /IfModule >

Lo que hace es redirigir los 404 en búsquedas, tags o categorías a la página principal. Solo tienes que cambiar la URL de ejemplo por la tuya y guardar los cambios.

Crea aplicaciones web WordPress ¡sin tocar una línea de código!

Wp-App-Studio

De verdad, WordPress me sigue sorprendiendo día a día, pero sobre todo la comunidad de usuarios, que crean desarrollos que hacen que este CMS sea lo más grande que ha parido madre … y no exagero.

Un ejemplo glorioso de lo que digo (si, glorioso) es WP App Studio, un plugin – si, un plugin – que convierte tu WordPress en una completa suite de creación de aplicaciones web para WordPress, y lo que es más alucinante, ¡sin tocar ni una sola línea de código!, algo por lo que habitualmente habría que pagar miles de dólares (o euros).

El funcionamiento básico sería este:

  1. Instalas y activas el plugin WP App Studio
  2. Diseñas y creas tu aplicación web con WP App Studio
  3. Instalas y activas tu aplicación web como cualquier otro plugin

¡Ahí es nada!

Sus características son completísimas, no le falta prácticamente de nada para crear de manera sencilla aplicaciones web:

Creación de entidades

  • Recopilación de datos de objetos, personas, lugares o conceptos
  • Soporte completo de la API de tipos de entradas personalizadas de WordPress y más
  • Diseño de cada entidad usando desplegables y pestañas
  • Editor de diseño de entidades pudiendo ordenar, añadir o borrar atributos arrastrando y soltando
  • Control de versiones y desarrollo multiusuario.

diseño de entidades ajustes avanzados de entidades crear atributo de entidad lista de entidades crear entidades visor de entidades
Creación de taxonomías

  • Agrupación, etiquetado y categorización de datos con taxonomías personalizadas
  • Taxonomías adjuntas a una o varias entidades, incluidas las entidades por defecto (entradas o páginas)
  • Interfaz de arrastrar y soltar para filtrar datos en las taxonomías de entidades
  • Soporte de taxonomías jerárquicas y no jerárquicas.
  • Características avanzadas de personalización.

Ajustes avanzados taxonomías Crear taxonomías Visor de taxonomías
Creación de relaciones

  • Creación de conexiones entre entidades con relaciones entre ellas
  • Creación de relaciones una-a-muchas (1-M), muchas-a-muchas (M-M), o auto relaciones.
  • Cada relación puede tener uno o varios atributos.
  • Elección de donde mostrar la columna de relaciones en la pantalla de lista de entidades.
  • Elección de donde mostrar la caja de relaciones en el editor de entidades.
  • Creación de relaciones entre entidades y usuarios.

Crear relaciones Atributos de relaciones
Creación de atributos

  • Interfaz sencilla e intuitiva para crear atributos de entidades
  • 37 tipos diferentes de atributos
  • Posibilidad de establecer un atributo como requerido
  • Posibilidad de establecer un valor por defecto
  • Posibilidad de definir instrucciones para los usuarios.
  • Decidir si un atributo podrá aceptar valores múltiples, o sea, si será clonable.
  • Decidir si un atributo se usará como columna con filtros en el editor de listas de entidades.
  • Creación de reglas de validación y mensajes de error personalizados.

Creación de pantallas de ayuda

  • Se puede ofrecer información adicional, cómo las instrucciones a los usuarios al usar la pantalla de ayuda.
  • Organización de la información de ayuda en una o varias pestañas.
  • Configurar una sección de barra lateral en las pantallas de ayuda.
  • Adjuntar pantallas de ayuda a pantallas de edición, listas, entidades o taxonomías.
  • Editor WYSIWYG para la creación de información de ayuda

Crear pestaña de ayuda Crear pantalla de ayuda
Permisos de aplicaciones

  • Posibilidad de definir perfiles personalizados a través de permisos.
  • Posibilidad de desactivar capacidades por defecto en los perfiles predeterminados.
  • Posibilidad de asignar capacidades de entidad a perfiles predeterminados o personalizados
  • Posibilidad de asignar capacidades de taxonomía a perfiles predeterminados o personalizados.

Crear perfil
Migración de meta datos

  • Exportar y/o importar los meta datos de tu aplicación desde WP App Studio.
  • Actualizaciones automáticas al migrar entre versiones.
  • Control de versiones
  • Seguimiento de fechas de modificación
  • Encriptación de los meta datos

Importación/Exportación de datos de la aplicación

  • Importador visual de todos los datos de entidades y taxonomías.
  • Exportación de todos los datos de entidades y taxonomías
  • Reinicio (borrado) de todos los datos de entidades, taxonomías y relaciones.
  • Exportación e importación en formato de archivo separado por comas (CSV)

Creación de shortcodes

  • Creación de shortcodes sin tocar ni una sola línea de código
  • Diseño de shortcodes con las funciones habituales mediante un editor visual
  • Filtrado de datos de shortcode por ID, autor, fecha, etc.
  • Posibilidad de añadir el shorcode a una página o entrada o widget de texto.
  • Posibilidad de adjuntar CSS personalizado al diseño de los shortcodes.
  • Ordenado de los datos del shortcode por criterio, ascendentes o descendentes.
  • Filtrado de datos de shortcode por su estado de publicación.
  • Posibilidad de limitar el número de registro de entidades a mostrar.
  • Página de navegación para mostrar el número de registros.

Crear shortcode

Crear shortcode


Totalmente traducible

  • Cada aplicación se ofrece con un archivo POT para facilitar las traducciones.
  • Simplemente creas los archivos PO y MO como lo harías normalmente.
  • Todas las cadenas de WordPress se incluyen para su traducción.
  • Todas las entidades son traducibles
  • Todas las taxonomías son traducibles
  • Todas las extensiones de la aplicación son traducibles. Algunas traducciones ya estarán incluidas.

Creación de widgets

  • Posibilidad de crear y configurar widgets de escritorio
  • Posibilidad de crear y configurar widgets de barra lateral
  • Diseño personalizado de los widgets con un editor visual.
  • Posibilidad de añadir CSS personalizado a los datos del widget
  • Mostrar los datos del widget en orden ascendente o descendente
  • Limitación de datos del widget mediante queries personalizadas.

Crear widget Widgets de escritorio
Ajustes de la aplicación

  • Posibilidad de configurar información relacionada con la aplicación, como licencia, nombre del autor, url, etc.
  • Varios temas de interfaz Jquery para el diseño de aspecto de la aplicación.
  • Activar/desactivar menús de navegación por defecto
  • Activa/desactivar widgets de escritorio por defecto
  • Posibilidad de definir direcciones de email y nombres de sistema
  • Forzar el número de columnas en el escritorio
  • Editor visual para establecer pié de página derecho e izquierdo de la aplicación
  • Posibilidad de personalizar totalmente la barra de admin, o quitarla en el escritorio o de la web
  • Editor visual para crear widgets para enviar mensajes de administración a los usuarios
  • Posibilidad de definir un logo para la pantalla de acceso
  • Posibilidad de añadir pies de página personalizados en la zona de admin

Ajustes de la app

Ajustes de la app


Creación y guardado de filtros

  • Interfaz de arrastrar y soltar para elegir, ordenar y clasificar atributos de entidad (columnas) a mostrar
  • Interfaz intuitiva para añadir y guardar filtros complejos
  • Filtrado de los datos mediante funciones y filtros personalizados
  • Filtrado de registro de entidades mediante columnas de relaciones
  • Características avanzadas de personalización.

Creación de formularios

  • Generación rápida de bonitos y compatibles formularios sin salir de WP App Studio
  • Adaptados a las últimas técnicas de diseño web
  • Validación en el lado del cliente
  • Validación en el lado del servidor
  • Procesado sin cambiar de página (uso de AJAX)
  • Fácil personalización usando CSS
  • Prevención de bots (sin necesidad de CAPTCHAs)

Creación de “apuntadores

  • Posibilidad de crear asistentes de web y aplicación sin salir de WP App Studio
  • Destacar o atraer atención a ciertas secciones de tu aplicación.
  • Interfaz sencilla.

A ver ¿tienes alguna excusa para no crear ya tu primer plugin?. Yo creo que no. Además, WP App Studio no es difícil de aprender, hay que echarle un rato cómo a cualquier nueva aplicación pero te compensa con creces el – pequeño – esfuerzo.

Así que aprovecha el fin de semana para crear tu primera aplicación WordPress.

oEmbed en widgets de texto de WordPress

video wordpress

El sistema oEmbed, con soporte nativo en WordPress, permite mostrar contenido dinámico (vídeos, imágenes, etc) en el contenido de nuestra web solo con copiar y pegar la URL de donde esté alojado ese contenido (Youtube, Flickr, Vimeo, etc).

Ahora bien, por alguna razón no funciona en los socorridos y útiles widgets de texto.

Debido a esto, si quieres mostrar un vídeo, por ejemplo, mediante un widget de texto, tienes que copiar y pegar el código iframe o embed del contenido, no pudiendo aprovechar ese soporte nativo de oEmbed.

Pero se puede solucionar de dos maneras, a saber …

  1. oEmbed en widgets de texto mediante plugin
    Simplemente instala y activa el plugin Text widget oEmbed y ya podrás pegar URLs en los widgets de texto y que se muestre el contenido multimedia. El plugin no tiene nada que configurar, lo activas y listo, ya funciona.
  2. oEmbed en widgets de texto con código
    Añade el siguiente código a tu plugin personal y consigues el mismo resultado que con el plugin anterior:

    //Soporte oEmbed en widgets de texto
    add_filter( 'widget_text', array( $wp_embed, 'run_shortcode' ), 8 );
    add_filter( 'widget_text', array( $wp_embed, 'autoembed'), 8 );

En cualquiera de los dos casos solo tienes que añadir un widget de texto, con URL o código, para que se muestre el vídeo en tu barra lateral …
Widget de texto embed Widget de texto oEmbed Vídeo en widget de texto

Y ya está, hasta aquí las buenas noticias, ahora las malas …
widget de texto oembed se sale del ancho

Pues es que con el método de oEmbed lo que pasa es que, salvo que modifiques el ancho mediante una función o plugin, el widget de texto “se saldrá” normalmente de tu barra lateral, algo que si puedes controlar mediante un código embed, y no con simplemente la URL de oEmbed, así que tenlo en cuenta ¿de acuerdo?

Enviar a la papelera desde la barra de admin de WordPress

wordpress-trash

La barra de administración de WordPress dispone de una serie de botones, enlaces, llámalo como quieras, que permiten realizar algunas acciones rápidas, pero ya habrás comprobado que muchos plugins añaden acciones extra así que ¿por no tu?.

Una utilidad posible es mandar a la papelera la entrada que estés viendo, de manera que te evites pasar por el escritorio para esta acción. Ya se que no es muy habitual pero lo importante es el modo de hacerlo, luego tu añade la funcionalidad que quieras.

En este caso, el código a añadir al plugin de funciones, o sino creas uno solo para eso, sería este:

//Botón de enviar a la papelera en el menu de admin
function fb_add_admin_bar_trash_menu() {
  global $wp_admin_bar;
  if ( !is_super_admin() || !is_admin_bar_showing() )
      return;
  $current_object = get_queried_object();
  if ( empty($current_object) )
      return;
  if ( !empty( $current_object->post_type ) &&
     ( $post_type_object = get_post_type_object( $current_object->post_type ) ) &&
     current_user_can( $post_type_object->cap->edit_post, $current_object->ID )
  ) {
    $wp_admin_bar->add_menu(
        array( 'id' => 'delete',
            'title' => __('Papelera'),
            'href' => get_delete_post_link($current_object->term_id)
        )
    );
  }
}
add_action( 'admin_bar_menu', 'fb_add_admin_bar_trash_menu', 35 );

Y el resultado visible este …
enlace papelera barra admin wordpress

En este ejemplo se usa la función get_delete_post_link() pero hay muchas otras que puedes encontrar en tu misma instalación de WordPress, en concreto en el archivo link-template.php situado en la carpeta wp-includes, un buen sitio para aprender posibles utilidades para la barra de admin, que te recomiendo.
link template wordpress

Idioma diferente para el administrador y el tema

wordpress internacional

Los temas que están localizados, o sea, preparados para reconocer el idioma de WordPress, utilizan la versión internacionalizada del mismo dependiendo del idioma definido en el archivo de configuración de WordPress (wp-config.php), pero no siempre es esto lo deseado.

Cada vez es más habitual que administren WordPress usuarios cuyo idioma nativo no es el que se debe mostrar para los visitantes.

Por ejemplo, digamos que tu te manejas mejor con WordPress en español pero tu sitio está orientado a visitantes de habla inglesa. Pues bien, si el tema está localizado y pones en wp-config.php el español cómo idioma de WordPress, si el tema está internacionalizado y dispone de traducción al español mostrará los mensajes en este idioma definido en el archivo de configuración.

Si no quieres que pase esto solo tienes que hacer un par de cosas:

  1. No definir el idioma en el archivo wp-config.php, o sea, dejar la línea así:
    define('WPLANG', '');
  2. Añade este código al archivo de funciones del tema activo (functions.php):
    // Un idioma para el tema y otro para el administrador
    // hay que llamarlo antes de load_theme_textdomain()
    function set_my_locale($locale) {
    	$locale = ( is_admin() ) ? "es_ES" : "en_US";
    	setlocale(LC_ALL, $local );
    	return $locale;
    }
    add_filter( 'locale', 'set_my_locale' );

Cómo puedes imaginar, debes cambiar la línea 4 a tus preferencias.

Impedir actualizaciones y borrado de entradas después de un tiempo

Cuenta-atrás-4-dias

Se me ocurren pocas situaciones en que sea útil este truco, pero seguro que a más de uno se le ha ocurrido alguna vez cómo se haría para que, pasado un tiempo determinado, nadie pueda modificar o borrar una entrada.

Así que si le vas a sacar partido a este truco solo tienes que añadir el siguiente código a tu plugin personal:

//Desactivar edición de entradas tras un tiempo determinado
function prohibido_editar( $allcaps, $cap, $args ) {
// Salto si no vamos a editar o borrar una entrada ...
    if( 'edit_post' != $args[0] && 'delete_post' != $args[0]
      // ... o si el usuario es administrador
      || !empty( $allcaps['manage_options'] )
      // ... o si el usuario ya no puede editar entradas
      || empty( $allcaps['edit_posts'] ) )
        return $allcaps;

    // Se cargan los datos de la entrada:
    $post = get_post( $args[2] );

    // Salto si la entrada no está aún publicada:
    if( 'publish' != $post->post_status )
        return $allcaps;

    //si la entrada tiene más de 30 días (cámbialo a lo que quieras)…
    if( strtotime( $post->post_date ) < strtotime( '-30 day' ) ) {
        //entonces impedimos que se pueda editar.
        $allcaps[$cap[0]] = FALSE;
    }
    return $allcaps;
}
add_filter( 'user_has_cap', 'prohibido_editar', 10, 3 );

Y ya está, solo tienes que cambiar la cadena -30 day al número de días que tu elijas.

Bonito truco de Smhmic en WPbeginner.

Que “Subir archivos” sea la opción por defecto en el cargador de WordPress

wordpress uploader default

Hay un comportamiento del cargador de WordPress que me molesta especialmente, y es que al abrir el cargador de medios mediante el botón de “Añadir objeto“, la opción por defecto sea mostrar la Librería multimedia, y no la opción de subir archivos, que es lo habitual, al menos para mi.

Creo que nadie sube las imágenes y escribe los artículos como acciones separadas así que creo que tiene más sentido que la opción por defecto sea la de subir archivos ¿no te parece?.

Afortunadamente es fácil de conseguir, pues solo tienes que crear un sencillo plugin, o añadirlo a tu plugin de utilidad, para conseguirlo, donde tendrías que insertar el siguiente código:

<?php } ?>
// Subir archivos como opción por defecto
  add_action( 'admin_footer-post-new.php', 'media_manager_default' );
    add_action( 'admin_footer-post.php', 'media_manager_default' );

    function media_manager_default() {
        ?>
        <script type="text/javascript">
            jQuery(document).ready(function($){
                wp.media.controller.Library.prototype.defaults.contentUserSetting=false;
            });
        </script>
<?php } ?>

Estupendo truco publicado en los foros de soporte oficiales.

Añadir más servicios oEmbed a WordPress

wordpress peliculaWordPress incorpora la capacidad de mostrar contenido multimedia mediante el soporte oEmbed, por el cual puedes mostrar vídeos, imágenes y todo tipo de medios solo con pegar la URL del contenido en el editor, y que se muestre el reproductor del mismo.

Pero WordPress solo trae activos algunos servicios por defecto, que podemos ampliar.

La lista de los proveedores de medios con soporte oEmbed soportados por WordPress es la siguiente:

Pero se puede ampliar la lista, y tenemos varias posibilidades, a saber:

  1. Añadir proveedores oEmbed con una función usando wp_oembed_add_provider, cómo ya vimos para añadir soporte de Slideshare o Twitter, sería así:
    function oembed_sitiomolondevideos(){
    wp_oembed_add_provider( "#http://(.+)?sitiomolondevideos\.com/.*#i", "http://api.sitiomolondevideos.com/oembed", true);
    }
    add_action('init','oembed_sitiomolondevideos');

    Por supuesto, debes informarte en el servicio a añadir de la URL que usa para la API de soporte con oEmbed, en el ejemplo es solo de muestra.

  2. Añadir proveedores oEmbed usando plugins cómo Embedly, oembed provider, etc, que permiten añadir soporte de oEmbed para prácticamente todo servicio disponible.

Y ya, por mi parte nada más, si se te ocurre algo lo comentas.