Contenido

Primer problema con Safari4 y WordPress 2.7

25 Feb

+ 14

Pues he de decir que Safari4 me ha encantado. Aúna lo que me gusta de Google Chrome (Webkit) y lo que me gusta de Firefox (Firebug). No creo que pueda decir nada nuevo que no se haya dicho yá sobre este navegador. Pero ya me he encontrado con el primer problema a la hora de trabajar con WordPress 2.7 y Safari4 sobre Mac.

safari4_wordpress27

Como podemos ver la caja en la que pondremos la URL y los datos relacionados a ella, aparece debajo del layer oscuro que oscurece el resto de la página. Esto es debido a que esta caja no tiene z-index. Con esto debería solventarse:

.clearlooks2 {
z-index:300000;
}

Pero ahí no acaba, al intentar cerrar la caja, obtenemos un error de tiny_mce que no he podido mirar aún:

TypeError: Result of expression 'na' [undefined] is not an object.

Si alguien descubre algo, que avise.

Actualización

El problema lo produce TinyMCE y ocurre con todas las versiones de este WYSIWYG sobre este navegador, al parecer en la versión de desarrollo del SVN ya lo tienen funcionando y esperan liberarlo con la próxima versión en breve. Así que los usuarios de WordPress tendremos que esperar a una actualización de las tantas que nos tienen acostumbrados 😀

Adapta tus comentarios a WordPress 2.7 sin problemas

26 Dic

+ 35

Bueno, me he alargado y lo he dejado mucho tiempo, pero más vale tarde que nunca. Entre turrones y garrapiñadas he pensado que sería interesante hacer digestión haciendo algo constructivo, así que vamos al lio.

Introducción

Como es dificil hacer un artículo que abarque a todos los themes disponibles vamos a usar Kubrick para ilustrar con ejemplos este tutorial. Al ser el theme por defecto de WordPress todos disponemos de él para poder hacer las pruebas mientras seguimos el tutorial.

Para los menos experimentados, el Theme Kubrick es el que nos encontraremos en la carpeta wp-content/themes/default/, concretamente vamos a editar el fichero comments.php de este directorio.

Detectar WordPress 2.7

Si estamos desarrollando un theme para WordPress 2.7, este punto puede ser interesante, pero si por el contrario estás haciendo un theme para tu blog, el que ya está en WordPress 2.7, puedes ahorrarte hacer la comprobación ya que siempre se va a cumplir.

if (function_exists('wp_list_comments')) :
// WordPress 2.7
else :
// WordPress 2.6-
endif;

Veamos como quedaría en el theme Kubrick.

<?php if ($comments) : ?>
	<h3 id="comments"><?php comments_number('No Responses', 'One Response', '% Responses' );?> to &#8220;<?php the_title(); ?>&#8221;</h3>
	<ol class="commentlist">
	<?php if (function_exists('wp_list_comments')) : ?>
	<!-- WordPress 2.7 -->
	<?php else : ?>
	<?php foreach ($comments as $comment) : ?>
		<li <?php echo $oddcomment; ?>id="comment-<?php comment_ID() ?>">
			<?php echo get_avatar( $comment, 32 ); ?>
			<cite><?php comment_author_link() ?></cite> Says:
			<?php if ($comment->comment_approved == '0') : ?>
			<em>Your comment is awaiting moderation.</em>
			<?php endif; ?>
			<br />
			<small class="commentmetadata"><a href="#comment-<?php comment_ID() ?>" title=""><?php comment_date('F jS, Y') ?> at <?php comment_time() ?></a> <?php edit_comment_link('edit','&nbsp;&nbsp;',''); ?></small>
			<?php comment_text() ?>
		</li>
	<?php
		/* Changes every other comment to a different class */
		$oddcomment = ( empty( $oddcomment ) ) ? 'class="alt" ' : '';
	?>
	<?php endforeach; /* end for each comment */ ?>
	<!-- WordPress 2.6- -->
	<?php endif;?>
	</ol>
 <?php else : // this is displayed if there are no comments so far ?>
	<?php if ('open' == $post->comment_status) : ?>
		<!-- If comments are open, but there are no comments. -->
	 <?php else : // comments are closed ?>
		<!-- If comments are closed. -->
		<p class="nocomments">Comments are closed.</p>
	<?php endif; ?>
<?php endif; ?>

Como podemos ver, ya tenemos el sistema medio montado. Ahora si el WordPress en el que está corriendo nuestro theme no tiene WordPress 2.7 nos mostrará los comentarios como los estaba haciendo hasta ahora, en caso contrario y con WordPress 2.7 disponible no mostraremos nada, por el momento.

wp_list_comments()

La clave de todo es esta función que se encarga de mostrarnos los comentarios de nuestros posts de una forma sencilla y rápida. Como la mayoría de funciones de WordPress esta tiene una serie de parámetros para personalizar su salida.

  • walker, nos activa/desactiva los comentarios anidados (Por defecto Null)
  • max_depth, máxima profundidad de estos comentarios (Por defecto »)
  • style, estilo con el que WordPress nos permite mostrar los comentarios [ul, div] (Por defecto ul)
  • callback, función que nos permite personalizar completamente la salida de los comentarios, se lanzará en cada uno de los comentarios.
  • end-callback, función que se lanzará al terminar la iteración de los comentarios.
  • type, especifica el tipo de comentarios a mostrar [comment, pingback, all] (Por defecto all)
  • page, página en la que empezamos a mostrar los comentarios.
  • per_page, comentarios por página
  • avatar_size, tamaño del avatar de los usuarios que comentan (Por defecto 32)
  • reverse_top_level, nos muestra los comentarios en orden inverso al que se introdujeron (Por defecto Null)
  • reverse_children, orden inverso en los hijos de los comentarios anidados (Por defecto »)

Bueno, ahora que conocemos las opciones disponibles en wp_list_comments() incorporémoslo en el código anterior.

<?php if ($comments) : ?>
	<h3 id="comments"><?php comments_number('No Responses', 'One Response', '% Responses' );?> to &#8220;<?php the_title(); ?>&#8221;</h3>
	<ol class="commentlist">
	<?php if (function_exists('wp_list_comments')) : ?>
	<!-- WordPress 2.7 -->
		<?php wp_list_comments(); ?>
	<?php else : ?>
	<?php foreach ($comments as $comment) : ?>
		<li <?php echo $oddcomment; ?>id="comment-<?php comment_ID() ?>">
			<?php echo get_avatar( $comment, 32 ); ?>
			<cite><?php comment_author_link() ?></cite> Says:
			<?php if ($comment->comment_approved == '0') : ?>
			<em>Your comment is awaiting moderation.</em>
			<?php endif; ?>
			<br />
			<small class="commentmetadata"><a href="#comment-<?php comment_ID() ?>" title=""><?php comment_date('F jS, Y') ?> at <?php comment_time() ?></a> <?php edit_comment_link('edit','&nbsp;&nbsp;',''); ?></small>
			<?php comment_text() ?>
		</li>
	<?php
		/* Changes every other comment to a different class */
		$oddcomment = ( empty( $oddcomment ) ) ? 'class="alt" ' : '';
	?>
	<?php endforeach; /* end for each comment */ ?>
	<!-- WordPress 2.6- -->
	<?php endif;?>
	</ol>
 <?php else : // this is displayed if there are no comments so far ?>
	<?php if ('open' == $post->comment_status) : ?>
		<!-- If comments are open, but there are no comments. -->
	 <?php else : // comments are closed ?>
		<!-- If comments are closed. -->
		<p class="nocomments">Comments are closed.</p>
	<?php endif; ?>
<?php endif; ?>

De esta forma estaremos obteniendo los comentario con los parámetros por defecto, pero ¿que pasa si queremos adaptar a nuestro gusto los comentarios?

Parámetro callback

El parámetro callback representa el nombre de una función que será lanzada en cada comentario y a la que se le pasará el comentario por parámetro para disponer de todas las opciones dentro de ella. De esta forma podemos personalizar nuestros comentarios.

<?php if (function_exists('wp_list_comments')) : ?>
	<?php wp_list_comments('callback=MI_TEMPLATE_DE_COMENTARIOS'); ?>
	<div class="navigation">
	<div class="alignleft"><?php previous_comments_link() ?></div>
	<div class="alignright"><?php next_comments_link() ?></div>
<?php else : ?>
	<?php foreach ($comments as $comment) : ?>
		<?php MI_TEMPLATE_DE_COMENTARIOS($comment);?>
	<?php endforeach; ?>
<?php endif; ?>

Y la función MI_TEMPLATE_DE_COMENTARIOS() tendrá un aspecto similar a este:

<?php
function MI_TEMPLATE_DE_COMENTARIOS($comment, $args, $depth) {
// Comentario actual
   $GLOBALS['comment'] = $comment; ?>
   /*
   		comment_class() --> Nos permite hacer comentarios tipo zabra.
   		comment_ID() --> ID del comentario actual
   */
   <li <?php comment_class(); ?> id="comment-<?php comment_ID() ?>">
     <div id="div-comment-<?php comment_ID(); ?>
      <div class="comment-author vcard">
/* Mostramos el avatar del usuario */
         <?php echo get_avatar(); ?>

/* Enlace a la URL del autor del comentario */
         <?php printf(__('<cite class="fn">%s</cite> <span class="says">says:</span>'), get_comment_author_link()) ?>
      </div>

/* Controlamos que el comentario esté aprovado */
      <?php if ($comment->comment_approved == '0') : ?>
         <em><?php _e('Your comment is awaiting moderation.') ?></em>
         <br />
      <?php endif; ?>
/* Datos extra de los comentarios */
      <div class="comment-meta commentmetadata"><a href="<?php echo htmlspecialchars( get_comment_link( $comment->comment_ID ) ) ?>"><?php printf(__('%1$s at %2$s'), get_comment_date(),  get_comment_time()) ?></a><?php edit_comment_link(__('(Edit)'),'  ','') ?></div>
/* Texto del comentario */
      <?php comment_text() ?>
/*Botón de reply, con él podremos responder a un comentario.*/
      <div class="reply">
         <?php comment_reply_link(array_merge( $args, array('add_below' => 'div-comment', 'depth' => $depth, 'max_depth' => $args['max_depth']))) ?>
      </div>
     </div>
   </li>
<?php } ?>

Exactamente lo que hará WordPress, será hacer pasar la variable $comment por esta función en cada comentario, haciendo que esta sea la encargada de pintar la salida por pantalla.

Responder comentarios

La posibilidad de responder a comentarios sin tener que montarlo tu mismo, es un aliciente más que WordPress 2.7 nos ofrece, pero para entender como funciona debemos conocer comment_reply_link().

comment_reply_link();

Se trata de generar el enlace necesario para poder responder a un comentario, en el código anterior, vemos como lo insertamos despues de comment_text(). Por defecto esta función recibe 3 parámetros:

  • $args, argumentos que condicionarán la salida
  • $comment, comentario que vamos a responder
  • $post, post en el que se encuentra en comentario que hemos de responder.

Los argumentos disponibles que condicionarán la salida nos darán una cierta flexibilidad a la hora de generar el enlace:

  • add_below, patrón al que se le añadirá el ID del comentario que indicará a que comentario hará referencia la respuesta (Por defecto comment-XXX)
  • respond_id, lugar en el que se insertará el comentario recien comentado (Por defecto respond)
  • reply_text, etiqueta que informará al usuario de la acción del enlace (Por defecto «Reply»)
  • login_text, etiqueta que mostrará en caso de que el usuario no esté logueado y sea necesario (Por defecto «Log in to Reply»)
  • depth, profundida del comentario, para comentarios anidados (Por defecto 0)
  • before, HTML que se insertará delante del enlace
  • after, HTML que se inseratá despues del enlace.

Esto nos generará el enlace necesario para responder a comentarios, pero aún nos queda adaptar el theme para poder recibir la respuesta.

La magia del javascript

La respuesta de comentarios necesitará de unas funciones de Javascript para hacer más dinámica la tarea de responder a los comentarios, para ello tendremos que añadir en el <head></head> de nuestro theme la siguiente línea:

if ( is_singular() ) wp_enqueue_script( 'comment-reply' );

Se encargará de cargar los Javascript necesarios para disfrutar de esta funcionalidad.

Modificando el formulario

WordPress por si solo no puede detectar los nombres de los elementos de nuestros formularios y como necesitan ciertos campos que hasta ahora no existían nos obliga a añadir esta línea en nuestro formulario para generar los campos necesarios para la respuesta.

<?php comment_id_fields(); ?>

Si nuestro theme tiene un elemento <input /> llamado comment_post_ID, podemos borrarlo ya que esta función se encargará de generarlo automáticamente.

Para indicarle el lugar en el que se encuentran los elementos necesarios para responder, debemos insertar un enlace en forma de ancla en el formulario, simplemente nos servirá para llevar el foco al formulario de envio:

<a id="respond"></a>

Para terminar, tenemos la función comment_form_title(), que se encargará de cambiar el famoso texto de «Leave a comment» por un «Leave a reply for XXX» en caso de estar respondiendo un comentario, para ello deberemos reemplazar el texto:

<h3 id="respond">Leave a Reply</h3>

por este otro:

<h3><?php comment_form_title( 'Leave a Reply', 'Leave a Reply to %s' ); ?></h3>

Si el usuario decide cancelar la acción y desechar la respuesta al comentario debe tener un enlace que le permita hacer esto, por eso tendremos que añadirlo en nuestro formulario de comentarios con la siguiente función:

<div id="cancel-comment-reply">
   <small><?php cancel_comment_reply_link() ?></small>
</div>

¿Y la paginación?

Otra de las mejoras que los comentarios nos traen en esta nueva versión, es la paginación de los mismos, haciendo que los posts con centenares de comentarios queden un poco más legibles. Para ello tenemos un serie de funciones que nos permiten dotar nuestros themes de esta funcionalidad. Evidentemente estas funciones será usadas únicamente en el apartado que destinamos a WordPress 2.7 ya que estas funciones no están disponibles para versiones previas.

next_comments_link();

Nos enlaza con la siguiente página de comentarios dentro de nuestro post. Esta función recibe 2 parámetros:

  • label, etiqueta que deseamos mostrar para informar al usuario del uso del enlace. (Por defecto «Newer Comments »»)
  • max_pages, máximo de páginas mostradas para enlazar. (Por defecto 0)

previous_comments_link();

Nos enlaza con los comentarios anteriores, si los hubiera. Por defecto dispone de un único parámetro:

  • label, etiqueta que deseamos mostrar (Por defecto «« Older Comments»)

Cambia la cantidad de comentarios del panel de administración

22 Dic

+ 0

Nuestros amigos de AyudaWordpress, nos muestra un sistema para ayudarnos a mejorar la pantalla de moderación de comentarios haciendo que en lugar de 20, aparezcan 100 o lo que deseemos que aparezca.

20-comentarios
(Imagen de AyudaWordpress)

El problema que le encuentro al sistema propuesto es el tener que modificar un fichero del core de WordPress 2.7 para conseguir dicho efecto, así que he mirado un poco el fichero y he logrado sacarlo para adaptarlo a un plugin, insertarlo en my-hacks.php o incluso en el functions.php de nuestro theme.

<?php
$numComments = 100;
function comentarios_por_pagina(){
	global $numComments;
	return $numComments;
}
add_filter("comments_per_page", "comentarios_por_pagina");
?>

Simplemente tendremos que introducir este código en alguno de los ficheros nombrado anteriormente y reemplazar el 100 de $numComments por el valor de comentarios que deseemos mostrar. De esta forma, ya perderemos esta modificación al actualizar nuestro blog.

Jugando con el API de comentarios de WordPress 2.7

20 Dic

+ 12

La llegada de WordPress 2.7, además de un importante cambio visual ha significado un cambio en la forma de interactuar con el blog. Anteriormente la API del blog únicamente daba la posibilidad de insertar/editar/borrar posts, enviar pigbacks/tracbacks y poca cosa más, ahora con la inclusión de los comentarios en la API las posibilidades son espectaculares.

Una muestra de ello es, por ejemplo, el Notificador de comentarios para MacOS X, que usa esta nueva propiedad para detectar cuando se ha añadido un nuevo comentario.

Pues visto que esta nueva funcionalidad puede dar mucho juego he estado jugando un poco con ella y he montado un primer boceto de lo que sería una clase en PHP que nos permita trabajar con ella fácilment.

Requerimientos

  1. The Inutio XML-RPC Library
  2. WordPress 2.7
  3. PHP5 Akismet (Opcional)

Funcionamiento

El funcionamiento de esta clase es muy sencillo, mediante una petición XML-RPC desde el servidor origen, lanzamos una petición del tipo (insert/getComment/getComments) al servidor destino (que ha de ser un WordPress 2.7) y este nos devuelve el resultado de nuestra petición.

Continua —>

Trucos y consejos para administrar tu WordPress 2.7

15 Dic

+ 1

La gente de Noupe ha hecho una recopilación de los mejores artículos para que la tarea de administrar tu nuevo WordPress 2.7 sea una tarea sencilla y cómoda.

Adapta los comentarios de tu theme a WordPress 2.7

12 Dic

+ 14

Varios han sido los usuarios que me han solicitado ayuda para migrar los comentarios de su theme al nuevo sistema de WordPress 2.7.  Hace unas semanas vimos como hacer que dependiendo de la versión aplicara un sistema u otro, ahora veremos como reaprovechar el código para ambas versiones.

Argumento callback

Para ello debemos hacer uso del parámetro callback que le pasaremos a la función wp_list_comments().

// Comentarios
<?php wp_list_comments('type=comment&callback=mytheme_comment'); ?>
// Pingbacks
<?php wp_list_comments('type=pingback&callback=mytheme_pingback'); ?>

callback, se encarga de pasar el comentario a la función que especificamos como valor y esta función se encargará de mostrar el comentario/pingback con el aspecto que definamos en su interior.

<?php 
function mytheme_comment($comment, $args, $depth) {
// Comentario actual
   $GLOBALS['comment'] = $comment; ?>
   /*
   		comment_class() --> Nos permite hacer comentarios tipo zabra.
   		comment_ID() --> ID del comentario actual
   */
   <li <?php comment_class(); ?> id="comment-<?php comment_ID() ?>">
     <div id="div-comment-<?php comment_ID(); ?>
      <div class="comment-author vcard">
/* Mostramos el avatar del usuario */
         <?php echo get_avatar(); ?>

/* Enlace a la URL del autor del comentario */ 
         <?php printf(__('<cite class="fn">%s</cite> <span class="says">says:</span>'), get_comment_author_link()) ?>
      </div>

/* Controlamos que el comentario esté aprovado */
      <?php if ($comment->comment_approved == '0') : ?>
         <em><?php _e('Your comment is awaiting moderation.') ?></em>
         <br />
      <?php endif; ?>
/* Datos extra de los comentarios */
      <div class="comment-meta commentmetadata"><a href="<?php echo htmlspecialchars( get_comment_link( $comment->comment_ID ) ) ?>"><?php printf(__('%1$s at %2$s'), get_comment_date(),  get_comment_time()) ?></a><?php edit_comment_link(__('(Edit)'),'  ','') ?></div>
/* Texto del comentario */
      <?php comment_text() ?>
/*Botón de reply, con él podremos responder a un comentario.*/
      <div class="reply">
         <?php comment_reply_link(array_merge( $args, array('add_below' => 'div-comment', 'depth' => $depth, 'max_depth' => $args['max_depth']))) ?>
      </div>
     </div>
   </li>               
<?php } ?>

En este ejemplo, vemos como la función recibe como parámetro el comentario, los argumentos pasados además del callback y la profundidad de comentarios. 

¿Y las versiones anteriores a la 2.7?

Pues si unimos lo que vimos hace unas semanas, simplemente tendremos que comprobar que wp_list_comments() exista:

<?php if (function_exists('wp_list_comments')) : ?>
	<?php wp_list_comments('type=comment&callback=mytheme_comment'); ?>
	<div class="navigation">
	<div class="alignleft"><?php previous_comments_link() ?></div>
	<div class="alignright"><?php next_comments_link() ?></div>
<?php else : ?>
	<?php foreach ($comments as $comment) : ?>
		<?php mytheme_comment($comment);?>
	<?php endforeach; ?>
<?php endif; ?>

Si nos fijamos en el código, la misma función nos sirve para ambas versiones. Así que prueba superada, mañana veremos más cosillas sobre los comentarios de WP 2.7.

Con todos ustedes!! WordPress 2.7, Coltrane

11 Dic

+ 32

Por fín, no entiendo el retraso de un 1 día, pero ya está aquí. La versión final de WordPress 2.7 a que han llamado Coltrate, en honor al saxofonista de Jazz John Coltrane. No voy a contar nada sobre esta versión que no sepais así que os explico como migrar a ella y listo 😀

  1. Descargamos el fichero y lo subimos a nuestro servidor.
  2. Desactivamos todos los plugins
  3. Renombramos las carpetas wp-admin/ y wp-includes/ a wp-adminOLD/ y wp-includesOLD/
  4. Descomprimimos el fichero descargado (lastest.zip)
  5. Y copiamos todo el contenido sobre nuestro antiguo WordPress.
  6. Entramos al panel de administrador y actualizamos la base de datos
  7. Revisamos los plugins, si algunos requiere actualización, lo actualizamos antes de activarlo.
  8. Disfrutamos de las nuevas mejoras.
  9. Podemos borrar los directorio *OLD que hemos renombrado antes.

Quizás tengas/quieras adaptar tu theme al nuevo sistema de comentarios, o separarlos de los pingbacks/trackbacks, conocer por completo esta nueva versión o los atajos de teclado teclado.

Ya tenemos versión es Español !!!

WordPress 2.7 RC2, la final tendrá que esperar

10 Dic

+ 5

Vuelve a pasar, WordPress retrasa la puesta en escena de la versión final de WordPress. Al parecer por el mismo motivo que la última vez, pulirlo bien y no dejar nada al azar. Por un lado bien por ellos, pero por otro «JO!!!» 😀 La RC1 ya era bastante estable así que esta RC2  se acercará a lo que veremos … cuando quieran :D[Descargar]

Preparate para la llegada de WordPress 2.7

6 Dic

+ 9

En DigiZen están volcados con la llegada de WordPress 2.7 y nos muestran una recopilación de artículos con los que prepararnos para la llegada de esta nueva versión.

  1. Prepárate para la llegada de WordPress.com 2.7
  2. Prepárate para la llegada de WordPress.com 2.7 (Segunda parte)
  3. A bloguear con WordPress.com 2.7: Primeros pasos
  4. Explorando el Tablero de WordPress.com 2.7
  5. Administración de tu perfil , opciones personales y cuentas de usuarios
  6. Selección del tema o plantilla para tu blog
  7. Modificando la barra lateral mediante widgets
  8. Opciones que debes configurar antes de bloguear
  9. El blogroll: Manejo de enlaces recomendados en WordPress.com
  10. Importando y exportando enlaces en WordPress.com 2.7
  11. Añadir imágenes en el blog
  12. Organizando tu blog mediante categorías y etiquetas
  13. Manejo de comentarios
  14. Publicando contenido en WordPress.com
  15. Creación y administración de páginas estáticas
  16. Añadir videos al blog de WP.com
  17. Añadir archivos a los artículos en WordPress.com
  18. Integrando audio en tu blog de WordPress.com
  19. Añadir enlaces en una entrada o página
  20. El RSS y tu blog en WordPress.com 2.7
  21. Avatar y blavatar en WordPress.com 2.7
  22. Métodos no tradicionales para publicar en WordPress.com 2.7
  23. Fallas frecuentes al comenzar a bloquear en WordPress.com

Wordpres 2.7 RC1

1 Dic

+ 17

WordPress acaba de anunciar la versión RC1 de la nueva WordPress 2.7. Y cada vez está más cerca. Desde la beta1, aNieto2k está funcionando en esta nueva versión y la verdad es que no lo cambio por una anterior por nada del mundo :D[Descargar]