Más iconos de formato al editor visual de WordPress

Por defecto, WordPress muestra una fila de iconos para dar formato a tus textos en el editor visual de entradas. Y supongo que ya sabrás que haciendo clic en el último icono, el de los cuadritos de colorines, aparece una segunda fila en la que además tienes los siguientes iconos:

  • Estilo de párrafo
  • Subrayado
  • Justificado total
  • Color de texto
  • Pegar como texto plano
  • Pegar desde Word
  • Eliminar formatos
  • Insertar caracteres especiales
  • Aumentar / disminuir márgenes de texto
  • Deshacer / Rehacer cambios
  • Ayuda

Pues bien, lo que quizás no sepas es que hay una tercera fila de iconos que puedes hacer visible …

Para verla solo tienes que añadir este código a tu fichero functions.php, o casi mejor a tu Plugin de Funciones:

// muestra tercera fila de iconos al editor visual
function add_more_buttons($buttons) {
$buttons[] = 'hr';
$buttons[] = 'del';
$buttons[] = 'sub';
$buttons[] = 'sup';
$buttons[] = 'fontselect';
$buttons[] = 'fontsizeselect';
$buttons[] = 'cleanup';
$buttons[] = 'styleselect';
return $buttons;
}
add_filter("mce_buttons_3", "add_more_buttons");

Una vez guardes los cambios verás estos otros iconos:

  • Insertar línea horizontal
  • Subíndice
  • Superíndice
  • Familia de fuente
  • Tamaño de fuente
  • Limpiar código de Word
  • Estilos de wpgallery, oEmbed y  más.

Esta nueva fila se verá aunque no hayas desplegado la primera, estará siempre visible.

¿Quieres aún más?, pues puedes instalar el plugin TinyMCE Advanced, que añade esos iconos y muchísimos más (a voluntad y personalizable), sustituyendo el editor estándar de WordPress por una versión más “completa”.

¡Tu eliges!

WordPress Jeopardy

Ya casi no queda nada que no se pueda hacer con WordPress pero ¿un juego?, pues si. Eso es WordPress Jeopardy, una idea que surgió en WordCamp Suiza este año, la de hacer un juego con una instalación de WordPress, usando sus funciones y hooks.

Y, ni cortos ni perezosos, en Septiembre de este año empezó la primera tanda del WordPress Jeopardy, que para el que no lo sepa es un juego basado en un popular concurso de televisión norteamericano que surgió allí por 1964, hace nada menos que 47 años.

La idea es genial; cada respuesta es una entrada, con sus metadatos como preguntas y puntos de cada pregunta. El sitio es una instalación de WordPress simple, con un tema personalizado. Lo único que necesita es una lista de categorías de entradas y las entradas, que van en la categoría correspondiente de este modo:

<?php
$x = 1;
$cat_args = array( 'parent' => 0 );
$categories = get_categories( $cat_args );
foreach ( $categories as $category ) :
	// Muestra la cabecera de la categoría
	$y = 1;
	$post_args = array( 'category' => $category -> term_id );
	$posts = get_posts( $post_args );
	foreach ( $posts as $post ) :
		// Muestra la entrada de respuesta, aquí va la pregunta y los puntos
	endforeach;
endforeach;
?>

Luego se aplica un poco de CSS y a correr.

Tunea el escritorio de WordPress

Una de las cosas que me encanta de WordPress son los plugins. Y es que aunque habitualmente comparta funciones o hooks con los que modificar aspectos de WordPress, cuando sale un plugin que nos facilita la vida para que con un par de clics hagas virguerías me encanta.

CMSfy es una de estas pequeñas maravillas. Como herramienta de personalización de la administración de WordPress no tiene precio, y encima es gratis, a nuestra disposición en el instalador de plugins y el repositorio oficial, vamos, que no se le puede pedir más.

¿Que qué hace?, pues un poco de todo … 

Lo que busca es ofrecer una personalización completa de la administración de WordPress, y para ello ofrece una única pantalla, eso si, con 3 pestañas distintas y multitud de posibilidades en cada una. Es lo que se suele llamar un "tweaker".

En la primera pestaña podemos realizar multitud de personalizaciones a la visibilidad de los elementos en la administración, decidiendo que verán los usuarios de nuestro WordPress y que no. No te las detallaré todas porque son una cantidad enorme, pero puedes ocultar las actualizaciones a los que no sean administradores, elegir que widgets de Escritorio se verán, que widgets estarán disponibles para las barras laterales, incluso que columnas verás en las ventanas de entradas y páginas.

La segunda, llamada "Media", nos ofrece un par de cuestiones importantes. Por una parte podemos provocar que las imágenes que subamos se redimensionen automáticamente en la carga, evitando un consumo excesivo de espacio y tiempo en carga del servidor por culpa de usuarios pedorros que suben sus fotos a tope de calidad, por ejemplo.

Lo siguiente que nos ofrece esta pestaña es poder añadir tamaños adicionales que se crearán al subir una imagen, definiendo no solo el tamaño, que eso ya lo puedes hacer en la página de ajustes estándar, sino también los nombres de las distintas imágenes. No sustituyes los tamaños estándar sino que puedes crear más.

En la tercera y última pestaña de configuraciones, llamada "Editor", puedes mejorar algo el editor de entradas TinyMCE, eligiendo que formatos de estilo de texto quieres que se muestren (que siempre sobran), pero también puedes añadir formatos y tamaños nuevos, a tu gusto.

Y si te quedas con ganas de más en la última pestaña tienes una serie de plugins recomendados para mejorar la experiencia y el control de tu CMS WordPress.

Bien ¿no?

Yo creo, no obstante, que aún se puede mejorar más el plugin, pues por ejemplo no te permite definir que perfil de usuario verá según que cosas, por ejemplo. En la versión actual si inactivas, por poner un caso, el widget Quick Press no estará disponible ni para el administrador. Con eso sería perfecto del todo. Pero vamos, que es genial, y más para una versión tan temprana como la 0.5.

Contenido exclusivo para suscriptores al Feed

¡Gracias por seguirnos a diario!. Premiamos tu fidelidad ofreciéndote habitualmente contenidos exclusivos. Hoy puedes descargar:

Clic aquí para iniciar la descarga Guía Windows Live Writer

Detectar usuarios con iPhone de forma nativa en WordPress

Ayuda WordPress iPhone

Aunque hay algunos plugins, y temas, que sirven para ofrecer una versión móvil de tu sitio WordPress a usuarios de dispositivos móviles como iPhone igual tiene sentido usar una variable nativa que ya existe en WordPress para detectar este tipo de cacharritos y así prescindir de ayudas externas ¿sabías que existía esta función?, pues existe.

Así que, si te animas, es bastante fácil, solo tienes que hacer dos pasos: crear la función y añadir un poco de CSS para que se vea distinto (es lo menos ¿no?).

Vamos a ver como sería … 

1. Crear la función

Asegúrate, eso si, de que pegas la función antes del cierre de la etiqueta . Por defecto, por ejemplo, el tema TwentyEleven usa la función body_class(); en la cabecera del fichero header.php para añadir clases de manera dinámica a la etiqueta < body >, pero cada tema es distinto.

Por ejemplo, si estás viendo una página en WordPress, es un ejemplo de una clase para el cuerpo de una página o entrada sencilla, lo que te permite cambiar el estilo de ciertos elementos de tu diseño de manera dinámica usando CSS. Si tu tema no usa la etiqueta body_class(); inclúyela de este modo:

PHP:
  1. <body <?php body_class(); ?>>

WordPress dispone de variables globales que pueden usarse para detectar navegadores, como la que aquí estamos tratando, la variable $is_iphone. Esta variable está incluida en el fichero vars.php de la instalación de WordPress, en estas líneas:

PHP:
  1. if ( $is_safari && stripos($_SERVER['HTTP_USER_AGENT'], 'mobile') !== false )
  2.   $is_iphone = true;

Vamos a usar esta variable junto con la clase 'body'. Para hacerlo primero escribimos esta función:

PHP:
  1. <?php
  2. function detectar_iphone($iphone) {
  3.     global $is_iphone;
  4.     if($is_iphone) $iphone[] = 'iphone';
  5.     return $iphone;
  6. }
  7. add_filter('body_class','detectar_iphone');
  8. ?>

Ya tenemos hecha la función. Lo primero que hace es darle un nombre, en este caso 'detectar_iphone', para poder reconocerla entre el resto de funciones. Luego se le añade la variable 'global', nuestra ya querida $is_iphone, esto se hace así porque la variable está definida fuera de nuestra función. A continuación le decimos a WordPress que si se produce esa condición (que hay un iPhone navegando por nuestro sitio) añadamos 'iphone' a nuestra clase 'body'. Una vez lo tenemos ya podemos pegar este código de arriba antes de < / head > en nuestro tema activo, normalmente en el archivo header.php, como he comentado antes.

2. Un poco de CSS

Como ya hems creado la función ya solo nos queda crear un CSS específico para esa clase 'iphone' a la que llamamos. En la misma podemos añadir muchos elementos de estilo, como por ejemplo una etiqueta h1 distinta, algo así:

Por ejemplo, donde tengamos la clase h1 de nuestra hoja de estilos (habitualmente en el fichero style.css de nuestro tema activo) le vamos añadiendo la clase 'iphone' que adapte el diseño al dispositivo:

CSS:
  1. h1 {
  2. font-size: 30px;
  3. line-height: 110%;
  4. text-decoration: underline;
  5. }
  6.  
  7. .iphone h1 {
  8. font-size: 35px;
  9. text-decoration: none;
  10. color: #FF0000;
  11. }

Y así sucesivamente, hasta que ofrezcas una versión para iPhone totalmente a tu gusto.

¿Que no te animas?, pues puedes recurrir a plugins como mobble que añade más variables o WpTouch que lo hace todo el solito.

Contenido exclusivo para suscriptores al Feed

¡Gracias por seguirnos a diario!. Premiamos tu fidelidad ofreciéndote habitualmente contenidos exclusivos. Hoy puedes descargar:

Clic aquí para iniciar la descarga Guía para Administrar WordPress

Plantilla HTML5 para desarrollar temas WordPress

Si buscas una plantilla a partir de la cual desarrollar tus temas WordPress que sea HTML5, esté bien documentada y con un CSS limpio seguro que te encanta Bones. La podrás usar para no tener que escribir la base de tus temas y tener un punto de partida increíble para tus desarollos.

Sus características son las siguientes:

  • 256 kb de tamaño
  • Constantes actualizaciones y mejoras
  • 2 hojas de estilo incluidas
  • 5 funciones incluida para que te ahorres plugins (posts relacionados, navegación, etc)
  • Te ahorra horas de desarrollo

Además, no es una cosa nueva que acaba de salir, ya lleva 9 versiones y creciendo. Si te animas o quieres probar Bones puedes descargarlo aquí.

Me enteré gracias a Blog perfume

Eliminar completamente los comentarios

No me refiero a eliminarlos de la plantilla para que no puedan comentar, ni siquiera a desactivarlos desde los ajustes de WordPress, me refiero a eliminar completamente los comentarios y cualquier referencia, incluso visual, a su existencia.

Está claro, los comentarios son parte de los blogs, esencia misma de la Web 2.0, pero hay ocasiones en que - sobre todo para trabajos a clientes - en que es posible que quieras quitar cualquier atisbo de que tal cosa siquiera existe.

En este raro, pero probable, caso, Frank ha elaborado un plugin cuyo código quita toda referencia a los comentarios, vamos, que dejan de existir en tu WordPress, no verá rastro ni cita alguna a los mismos.

Solo tienes que guardar este código con el nombre que quieras, subirlo a la carpeta 'plugins' de tu instalación de WordPress, activarlo y habrás eliminado totalmente los comentarios de tu WordPress.

PHP:
  1. <?php
  2. /**
  3. * Plugin Name: Eliminar comentarios completamente
  4. * Plugin URI: http://bueltge.de/
  5. * Text Domain: remove_comments_absolute
  6. * Domain Path: /languages
  7. * Description: Desactiva las funciones de comentarios y quita todas sus referencias en la instalación de WordPress
  8. * Author: Frank Bültge
  9. * Version: 0.0.1
  10. * Licence: GPLv2
  11. * Author URI: http://bueltge.de
  12. * Upgrade Check: none
  13. * Last Change: 01.06.2011
  14. */
  15. if ( ! class_exists( 'Remove_Comments_Absolute' ) ) {
  16.     add_action( 'plugins_loaded', array( 'Remove_Comments_Absolute', 'get_object' ) );
  17.     class Remove_Comments_Absolute {
  18.         static private $classobj = NULL;
  19.         /**
  20.          * Constructor, init on defined hooks of WP and include second class
  21.          *
  22.          * @access  public
  23.          * @since   0.0.1
  24.          * @uses    add_filter, add_action
  25.          * @return  void
  26.          */
  27.         public function __construct () {
  28.             add_filter( 'the_posts', array( $this, 'set_comment_status' ) );
  29.             add_filter( 'comments_open', array( $this, 'close_comments', 10, 2 ) );
  30.             add_filter( 'pings_open', array( $this, 'close_comments', 10, 2 ) );
  31.             add_action( 'admin_init', array( $this, 'remove_comments' ) );
  32.             add_filter( 'add_menu_classes', array( $this, 'add_menu_classes' ) );
  33.             add_action( 'admin_head', array( $this, 'remove_comments_areas' ) );
  34.             add_action( 'wp_before_admin_bar_render', array( $this, 'admin_bar_render' ) );
  35.         }
  36.         /**
  37.          * Handler for the action 'init'. Instantiates this class.
  38.          *
  39.          * @access  public
  40.          * @since   0.0.1
  41.          * @return  object $classobj
  42.          */
  43.         public function get_object () {
  44.             if ( NULL === self :: $classobj ) {
  45.                 self :: $classobj = new self;
  46.             }
  47.             return self :: $classobj;
  48.         }
  49.         /**
  50.          * Set the status on posts and pages - is_singular ()
  51.          *
  52.          * @access  public
  53.          * @since   0.0.1
  54.          * @uses    is_singular
  55.          * @param   string $posts
  56.          * @return  string $posts
  57.          */
  58.         public function set_comment_status ( $posts ) {
  59.             if ( ! empty( $posts ) && is_singular() ) {
  60.                 $posts[0]->comment_status = 'closed';
  61.                 $posts[0]->post_status = 'closed';
  62.             }
  63.             return $posts;
  64.         }
  65.         /**
  66.          * Close comments, if open
  67.          *
  68.          * @access  public
  69.          * @since   0.0.1
  70.          * @param   string | boolean $open
  71.          * @param   string | integer $post_id
  72.          * @return  string $posts
  73.          */
  74.         public function close_comments ( $open, $post_id ) {
  75.             // if not open, than back
  76.             if ( ! $open )
  77.                 return $open;
  78.             $post = get_post( $post_id );
  79.             if ( $post -> post_type ) // all post types
  80.                 return FALSE;
  81.             return $open;
  82.         }
  83.         /**
  84.          * Change options for dont use comments
  85.          * Remove meta boxes on edit pages
  86.          * Remove support on all post types for comments
  87.          * Remove menu-entries
  88.          *
  89.          * @access  public
  90.          * @since   0.0.1
  91.          * @uses    update_option, get_post_types, remove_meta_box, remove_post_type_support
  92.          * @return  void
  93.          */
  94.         public function remove_comments () {
  95.             // int values
  96.             foreach ( array( 'comments_notify', 'default_pingback_flag' ) as $option )
  97.                 update_option( $option, 0 );
  98.             // string false
  99.             foreach ( array( 'default_comment_status', 'default_ping_status' ) as $option )
  100.                 update_option( $option, 'false' );
  101.             // all post types
  102.             // alternative define an array( 'post', 'page' )
  103.             foreach ( get_post_types() as $post_type ) {
  104.                 // comment status
  105.                 remove_meta_box( 'commentstatusdiv', $post_type, 'normal' );
  106.                 // remove trackbacks
  107.                 remove_meta_box( 'trackbacksdiv', $post_type, 'normal' );
  108.                 // remove all commnts from tabels
  109.                 remove_post_type_support( $post_type, 'comments' );
  110.             }
  111.             // remove dashboard meta box for recents comments
  112.             remove_meta_box( 'dashboard_recent_comments', 'dashboard', 'normal' );
  113.             // Remove menu entries with WP 3.1 and higher
  114.             if ( function_exists( 'remove_menu_page' ) ) {
  115.                 remove_menu_page( 'edit-comments.php' );
  116.                 remove_submenu_page( 'options-general.php', 'options-discussion.php' );
  117.             } else {
  118.                 // unset comments
  119.                 unset( $GLOBALS['menu'][25] );
  120.                 // unset menuentry Discussion
  121.                 unset( $GLOBALS['submenu']['options-general.php'][25] );
  122.             }
  123.         }
  124.         /**
  125.          * Add class for last menu entry with no 20
  126.          *
  127.          * @access  public
  128.          * @since   0.0.1
  129.          * @param   array string $menu
  130.          * @return  array string $menu
  131.          */
  132.         function add_menu_classes ( $menu ) {
  133.             $menu[20][4] .= ' menu-top-last';
  134.             return $menu;
  135.         }
  136.         /**
  137.          * Remove areas for comments in backend via JS
  138.          *
  139.          * @access  public
  140.          * @since   0.0.1
  141.          * @return  string with js
  142.          */
  143.         public function remove_comments_areas () {
  144.             ?>
  145.             <script type="text/javascript">
  146.             //<![CDATA[
  147.             jQuery(document).ready( function($) {
  148.                 $( '.table_discussion' ).remove();
  149.             });
  150.             //]]>
  151.             </script>
  152.             <?php
  153.         }
  154.         /**
  155.          * Remove comment entry in Admin Bar
  156.          *
  157.          * @access  public
  158.          * @since   0.0.1
  159.          * @uses    remove_menu
  160.          * @return  void
  161.          */
  162.         public function admin_bar_render () {
  163.             // remove entry in admin bar
  164.             $GLOBALS['wp_admin_bar'] -> remove_menu( 'comments' );
  165.         }
  166.     } // end class
  167. } // end if class exists
  168. ?>

Lo que hace el plugin es lo siguiente:

  • Cierra todos los formularios de comentarios existentes
  • Quita los widgets relacionados con comentarios en el editor
  • Quita todos los enlaces a la gestión de comentarios de los menús de WordPress
  • Quita la columna de comentarios del Escritorio
  • Quita los ajustes de comentarios

Aquí tienes unas capturas de como queda de solito y desolado WordPress sin comentarios. Ahora tu decides, igual para algún proyecto te viene bien.
nocomentarios1 nocomentarios2

Contenido exclusivo para suscriptores al Feed

¡Gracias por seguirnos a diario!. Premiamos tu fidelidad ofreciéndote habitualmente contenidos exclusivos. Hoy puedes descargar:

Clic aquí para iniciar la descarga Guía Domina tu Blog

Simple Tags vuelve al pasado

Si eres aficionado a utilizar el plugin Simple Tags y has visto que hay una versión nueva (beta 1, y 2) quizás deberías pensártelo antes de actualizar.

Y es que esta versión 2 en beta que nos ofrecen no incorpora avances como suele suceder sino que es una vuelta a la simplicidad, al pasado.

Lo que han hecho ha sido aligerar enormemente el peso y carga del plugin, eliminando muchas de las funciones que lo han hecho tan popular, algo que a mi modo de ver no han hecho del mejor modo, pero no me explayo hasta detallar los cambios:

  • Se quitan los marcadores
  • Se quitan las entradas relacionadas
  • Se quitan las etiquetas relacionadas
  • Se quitan las opciones de nofollow
  • Se quitan las etiquetas como palabras clave HTML
  • Se quitan la función para mostrar las etiquetas de la entrada actual
  • Se quita la opción de auto-añadir etiquetas
  • Se quitan las etiquetas incrustadas
  • Se cambia el método para las etiquetas por página

Por lo que se mejora el consumo de memoria, ya que todo se puede desactivar y se dejan de usar variables de clases para las opciones, además de utilizar las librerías AJAX de WordPress

Pues bien, entiendo que quieran aligerar de consumo de memoria el plugin, pero de ahí a quitar aquello que lo ha hecho tan popular, permitiendo eliminar otros plugins ya que este lo hacía incluso mejor, me parece el modo menos adecuado. Creo que habría estado mejor dejar todo sin instalar por defecto, como hace WordPress con el instalador de importadores, pero creo que es un error desactivar funciones que han hecho de este plugin uno de los más populares y recomendados, al menos para mi.

En consecuencia, que de momento pasa a mi lista de plugins a NO actualizar.

¿Lo has probado ya?

Nota: como en los comentarios muchos decís que “se os ha ido la mano y habéis actualizado”, os recuerdo que siempre podéis volver a instalar versiones anteriores desde la página del plugin (de cualquier plugin), en el enlace llamado “Other versions”. En este caso la página es esta y el enlace a la última versión “completa”, la 1.8, este otro.

Contenido exclusivo para suscriptores al Feed

¡Gracias por seguirnos a diario!. Premiamos tu fidelidad ofreciéndote habitualmente contenidos exclusivos. Hoy puedes descargar:

Clic aquí para iniciar la descarga Guía para Administrar WordPress

Define llamadas a funciones y acelera tu WordPress

WordPress sigue siendo el rey y además lo sigue demostrando, cada día más posibilidades y opciones. Ahora descubrimos otro truco más para acelerar la carga de WordPress.

Aumentar un poco más la velocidad definiendo llamadas a funciones de WordPress de forma directa en el fichero de configuración y así evitando una consulta a la base de datos.

Aquí tienes unos ejemplos, seguro que puede aplicarse para más funciones. Abre tu fichero de configuración wp-config.php y añade estas líneas:

define(‘WP_HOME’, ‘http://carrero.es’); // blog url
define(‘WP_SITEURL’, ‘http://carrero.es’); // site url
define(‘TEMPLATEPATH’, ‘/ruta/absoluta/to/wp-content/themes/nombredemitema’);
define(‘STYLESHEETPATH’, ‘/ruta/absoluta/to/wp-content/themes/nombredemitema’);

Y no te olvides de actualizar “/ruta/absoluta/” y “nombredemitema” por tus datos correctos. En mi caso estoy probando en Carrero.es solo las 2 primeras variables y en el caso de Color Vivo con las 4 variables.

Gracias a Fernando de Ayuda WordPress.

Define llamadas a funciones y acelera tu WordPress is a post from: Carrero

Template tags de WordPress 3.x

Si buscas un sitio de referencia sobre las "template tags" vigentes en la versión de WordPress 3.0 y superiores el sitio Attachment Tags te va a encantar.

Por supuesto, tienes la referencia oficial en el Codex pero la herramienta web que vas a encontrar aquí es una gozada a la hora de buscar los códigos y funciones necesarios para el diseño de temas WordPress.

A la izquierda, en la barra lateral, dispones de la lista de usos habituales, y haciendo clic en cada elemento se muestran las tags disponibles, luego solo tienes que hacer clic en el elegido y te muestra el uso para el que está creada esa template tag y un ejemplo de como utilizarla.

¡Muy recomendable!

¡He quitado el archivo!

Si te has fijado, ya no dispones de un widget en la barra lateral mediante el que navegar por el archivo de Ayuda WordPress. Y no es que te tenga manía o que quiera ocultar el pasado, es simplemente que he encontrado un modo mejor (muuuucho mejor) de ofrecer el archivo de lo publicado.

¿He despertado tu curiosidad? …

Te propongo un juego, y es que descubras como navegar por el archivo del blog. Porque estar ahí está, en cada post, en la portada, en la navegación por categorías, por etiquetas, en el sitio más obvio posible ¿aún no lo has acertado?. Venga, un poco de atención … 

(si no das con ello pasa a la página 2)