Documentos colaborativos y con control de versiones en WordPress

Ahora que cada vez más gente usa servicios en la nube para gestionar documentos y compartirlos, ya sea en Google Docs o Dropbox, también WordPress ofrece servicios para alojar tus documentos online, hacerlos colaborativos y con control de versiones, a un nivel que otros servicios no te ofrecen, y encima sin salir de WordPress.

La magia la conseguimos con WP document revisions, un fantástico plugin gratuito que añade un nuevo tipo de entrada, llamada “Documents“, con sus particularidades.

Cuando sube un documento cualquier usuario registrado (léase persona del equipo) queda registrado a su nombre, y si no tiene capacidad de publicación queda en estado de revisión. A partir de ahí, se pueden subir nuevas versiones, y solo cuando un administrador lo decide se publica en tu web, disponible para los usuarios, con contraseña, privado, abierto, como quieras, pues tienes esas opciones habituales de WordPress.

Lo que te ofrece, en definitiva, es un modo de alojar documentos online, con control de versiones, colaborativo, con distintas opciones de publicación (para clientes, componentes de un proyecto, etc), personalizable, adaptable e incluso auditable.

El modo de uso es muy sencillo, y lo verás mejor en este vídeo …

WordPress 3.4 beta 2

Con solución a más de 60 fallos y cambios propuestos por los que ya hemos probado la beta 1, ya está disponible WordPress 3.4 beta 2, lista para seguir haciendo pruebas y ver como se adaptan tus plugins y temas.

La puedes descargar aquí o echarle un vistazo en el sitio de pruebas.

Tu propio widget de noticias en el escritorio en WordPress

ultimas noticias wordpress

¿Te has fijado en que algunos plugins añaden un widget de noticias propio en el escritorio?, ¿te gustaría saber hacerlo?, pues la verdad es que es bastante sencillo, como casi todo en WordPress.

Es un elemento de branding estupendo para fidelizar clientes o simplemente para tener informados a tus usuarios registrados.

Solo hay que recurrir a nuestro ya célebre plugin de funciones, o sino al fichero functions.php del tema activo y añadir lo siguiente:

// Widget de Escritorio personalizado
add_action('wp_dashboard_setup', 'my_dashboard_widgets');
function my_dashboard_widgets() {
     global $wp_meta_boxes;
     // quita widgets innecesarios, y principalmente los widgets de noticias, pues ya está el tuyo
     // var_dump( $wp_meta_boxes['dashboard'] ); // se usa para obtener todos los ID de los widgets
     unset(
          $wp_meta_boxes['dashboard']['normal']['core']['dashboard_plugins'],
          $wp_meta_boxes['dashboard']['side']['core']['dashboard_secondary'],
          $wp_meta_boxes['dashboard']['side']['core']['dashboard_primary']
     );
     // añade el widget propio de escritorio
     wp_add_dashboard_widget( 'dashboard_custom_feed', 'Lo último sobre WordPress', 'dashboard_custom_feed_output' ); //añade una nueva fuente RSS
}
function dashboard_custom_feed_output() {
     echo '<div class="rss-widget">';
     wp_widget_rss_output(array(
          'url' => 'http://feeds.feedburner.com/AyudaWordPress',
          'title' => 'Lo último sobre WordPress',
          'items' => 3,
          'show_summary' => 1,
          'show_author' => 0,
          'show_date' => 1
     ));
     echo "</div>";
}

Queda así de chulo …

Cómo no, lo tendrás que personalizar, cambiando la “url” por el feed RSS que quieras, los “items” al número de entradas que mostrará por defecto, si quieres mostrar un extracto de cada entrada (“summary“), el autor (“author“) o la fecha (“date“), y por supuesto el título que aparecerá en la lista de widgets disponibles y también en el del Widget.

Ah, en el código, por defecto se anulan los demás widgets de noticias, para que solo esté disponible el tuyo. Si quieres eliminas las líneas relativas al “unset”.

Espero que te guste, yo lo uso siempre para todos los desarrollos de clientes, es muy agradecido.

Paginación en WordPress sin plugin

Ya sé que la mayoría de los que me leéis sois adictos a Pagenavi, ese maravilloso y bien construido plugin que ofrece paginación a nuestro WordPress de manera sencilla.

Pero ¿se puede añadir paginación sin instalar plugins? …

Pues claro, igual que añadimos paginación de comentarios sin plugin podemos añadir paginación a nuestra web sin usar Pagenavi o algún otro plugin, solo hay que usar una función interna de WordPress que lleva ahí desde la versión 2.1, paginate_links y sus posibles parámetros.

El código que nos ofrecerá esta maravilla es el siguiente:

// obtenemos el total de páginas
global $wp_query;
$total = $wp_query->max_num_pages;
// solo seguimos con el resto si tenemos más de una página
if ( $total > 1 )  {
     // obtenemos la página actual
     if ( !$current_page = get_query_var('paged') )
          $current_page = 1;
     // la estructura de “format” depende de si usamos enlaces permanentes "humanos"
     $format = empty( get_option('permalink_structure') ) ? '&page=%#%' : 'page/%#%/';
     echo paginate_links(array(
          'base' => get_pagenum_link(1) . '%_%',
          'format' => $format,
          'current' => $current_page,
          'prev_next' => True,
          'prev_text' => __('&laquo; Anterior'),
          'next_text' => __('Siguiente &raquo;'),
          'total' => $total,
          'mid_size' => 4,
          'type' => 'list'
     ));
}

La explicación de lo que hacen los distintos parámetros es la siguiente:

  • base
    Esta es la ruta de los enlaces de número de página, sin incluir la parte específica de paginación de la URL. Los caractes %_% se sustituirán en esa URL para la pa rte específica de la página de la URL.
  • format
    Esta es la parte de la “página” de la URL. %#% se sustituye pro el número de página.. Por ejemplo, page/%#% o ?page=%#%.
  • total
    El numéro total de páginas disponibles.
  • current
    El número de la página actual.
  • show_all
    Lista todos los enlaces a páginas en vez de limitarlo a un cierto número de enlaces a izquierda o derecha de la página actual..
  • prev_next
    Incluye los enlaces a “Anterior” y “Siguiente” (si procede), como harías normalmente con la función previous_posts_link(). Solo funcionará si también ponemos previamente la función prev_next en “True”.
  • prev_text y next_text
    Texto que irá dentro de los enlaces “Anterior” y “Siguiente”.
  • end_size
    El número de enlaces a páginas a mostrar al final. Por defecto está a 1 (por ejemplo: 1 2 3 … 10).
  • mid_size­
    El número de páginas a mostrar en cada lado de la página actual. Por defecto está puesto a 2 (ejemplo: 1 … 3 4 5 6 7 … 10).
  • type
    Te permite especificar el estilo de salida. Por defecto es “plain”, o sea, una lista de enlaces. También puede establecerse a formatos de “list” (o sea, enlaces englobados en ul y li) o de “array” (lo que mostrará una selección de enlaces a páginas que pueden definirse como tu quieras).
  • También puedes añadir argumentos y fragmentos de query, a tu gusto.

El código del ejemplo generará un HTML como este:

<ul class='page-numbers'>
     <li><span class='page-numbers current'>1</span></li>
     <li><a class='page-numbers' href='http://miwordpress.com/page/2/'>2</a></li>
     <li><a class='page-numbers' href='http://miwordpress.com/page/3/'>3</a></li>
     <li><a class='page-numbers' href='http://miwordpress.com/page/4/'>4</a></li>
     <li><a class='page-numbers' href='http://miwordpress.com/page/5/'>5</a></li>
     <li><span class='page-numbers dots'>...</span></li>
     <li><a class='page-numbers' href='http://miwordpress.com/page/10/'>10</a></li>
     <li><a class='next page-numbers' href='http://miwordpress.com/page/2/'>Next &raquo;</a></li>
</ul>

Una vez tengas el código a tu gusto solo tienes que incluirlo – preferentemente – en las primeras líneas del archivo footer.php de tu tema activo.

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.

Controlar automáticamente el ancho de imágenes en las entradas

Pasa bastante a menudo, que insertamos imágenes y superan el ancho de nuestro tema WordPress. Por supuesto, podemos ajustar la imagen manualmente en el editor, modificando el ancho visible.

Pero ¿no te gustaría algo como lo que hace el tema por defecto TwentyEleven?. Si, esa cosa que hace que siempre se ajusten las imágenes al tema sin necesidad de tocar nada al insertarla en nuestra entrada.

Pues es muy fácil, solo hay que añadir unas líneas de código en la hoja de estilos del tema, normalmente un archivo llamado style.css.

Para ello, lo primero es buscar en la hoja de estilos la clase que define las imágenes, normalmente algo acompañado de img. Una vez localizado solo hay que añadir lo siguiente a esa clase:

max-width: 565px;
width: expression(this.width > 565 ? 565: true);

En este caso he adaptado el ancho máximo al de mi tema (565 pixels), que es el único parámetro que deberás modificar para que se adapte al tuyo.

Este truco puedes usarlo en tu WordPress alojado o en WordPres.com si adquiriste la actualización de diseño, con la que puedes modificar la hoja de estilos.

Este bonito truco se lo leí a Lorenzo Solís.

WordPress 3.4 beta 1 listo para probar

Si te gusta probar las cosas antes que nadie ya tienes listo WordPress 3.4 en su versión beta 1, disponible para descarga y pruebas a gozó.

Entre las novedades a destacar de WordPress 3.4 que ya puedes experimentar están estas:

  • Personalizador y previsualización de temas
  • Tamaños de cabecera personalizables
  • Puedes elegir imágenes para el fondo y cabecera desde la biblioteca de medios de tu WordPress
  • Mejoras en la búsqueda y elección de temas
  • Mejoras de rendimiento en WP_query
  • Ya se pueden instalar temas hijo (child themes) del directorio oficial
  • Nueva API XML-RPC para aplicaciones móviles y externas
  • Mejoras en la internacionalización
  • Nueva API para soporte de personalización de temas
personalizar temas wordpress 34

Nueva opción de personalizar temas (WordPress 3.4)

Además, es bueno hacer pruebas y reportar posibles fallos, para tener una versión WordPress 3.4 final lo más probada y estable posible.

Ah, y si no quieres instalarlo ya lo tienes disponible en WordPress beta testing.

Redirigir una categoría a una web nueva

Si no te ha pasado te pasará. Llegará un día que, cuando tu blog sea enormemente popular, quieras crear una web específica para una categoría concreta de tu sitio.

Digamos, por ejemplo, que tu blog es personal pero que, poco a poco, vas añadiendo guías sobre el uso de Redes Sociales, que almacenas en la categoría “tutos-socialmedia“, que consideras que ya tiene suficiente enjundia para tener su propia web, especializarte, e incluso vender cursos de social media. Vamos, que vas a crear guiasdesocialmedia.com o algo así.

Pues nada, facilísimo, solo hay que añadir a tu fichero .htaccess, el del blog anterior, lo siguiente:

RedirectMatch 301 ^/category/tutos-socialmedia/?(.*)$ http://guiasdesocialmedia.com/category/guias/$1

Por supuesto, antes deberás haber exportado todas las entradas de la categoría “tutos-socialmedia” y haberlas importado en el nuevo sitio en la categoría llamada “guias“, como en el ejemplo, o a tu gusto.

Fácil ¿eh?

Twenty Twelve se aplaza a WordPress 3.5

El nuevo tema por defecto de WordPress, Twenty Twelve, se aplaza a la versión de WordPress 3.5 por lo que se ha retirado del “core” actual y de momento estará en github hasta que empiece el track de la 3.5, también prevista para 2012, tras la liberación de WordPress 3.4, aún sin fecha pero prevista para este año.