Como eliminar efectivamente la vista previa de un post en WordPress

@ 24 . marzo . 2007

WordPress logo Una de las nuevas características que traen las versiones de WordPress 2.0 para arriba es la vista previa de los posts. Cuando queremos editar un post antiguo o tenemos uno en borrador, debajo del formulario respectivo hay una vista previa no sólo del nuevo post, sino de todo nuestro blog, con cabecera, pié de página, barra lateral y demás adornos.

La vista previa, para muchos usuarios puede ser útil, pero en mi caso es una gran molestia y el 99.99% de las veces no la necesito. Es una lástima que WordPress no la tenga como una característica opcional, para que en lugar de cargar en la misma página tengamos un botón o un URL que nos direccione a un preview en una nueva pestaña/página.

La vista previa es molesta porque si tenemos un post con varias fotos y videos, el editarlo tomará un largo tiempo de carga, retrasando nuestro proceso de actualización, desperdiciando nuestro ancho de banda del servidor y además si tenemos Ad-Sense aumentaremos el número de vistas innecesariamente.

Anteriormente probé 2 plugins para WordPress 2.1: Kill Preview 2 y IWG Outline Preview. ambos nos llegan desde Alemania con amor. Lamentablemente ninguno de los dos me ha funcionado, porque me muestran una página en blanco cada vez que quiero editar un post existente. Ambos autores saben de este problema y aún no dan con una solución.

La solución definitiva viene de la mano de hypercubed, quien rectifica que no hay opción de lograrlo mediante un plugin, pero si mediante la edición directa del código PHP de WordPress.

La solución: editar el código fuente

No hay que asustarse, esta parte es fácil y no dañará nada.

Tenemos que abrir el archivo post.php ubicado en el directorio wp-admin.

Para WordPress 2.1

Abrimos el archivo post.php y en la linea 72 sustituimos:

<iframe src="<?php echo attribute_escape(apply_filters('preview_post_link', add_query_arg('preview', 'true', get_permalink($post->ID)))); ?>" width="100%" height="600" ></iframe>

por:

<script type="text/javascript">
<!--
  function show_preview() {
	var elm = document.getElementById("frm_preview");
	elm.src = "<?php echo attribute_escape(apply_filters('preview_post_link', add_query_arg('preview', 'true', get_permalink($post->ID)))); ?>";
	elm.height = "600";
	return false;
  }
-->
</script>
<a href="#preview-post" onclick="show_preview();">Show Preview</a>
<iframe id="frm_preview" src="" width="100%" height="10" ></iframe>

Para WordPress 2.0

Abrimos el archivo post.php y en la linea 85 sustituimos:

<iframe src="<?php the_permalink(); ?>" width="100%" height="600" ></iframe>

por:

<script type="text/javascript">
<!--
  function show_preview() {
    var elm = document.getElementById("frm_preview");
    elm.src = "<?php the_permalink(); ?>";
    elm.height = "600";
    return false;
  }
-->
</script>
<a href="#preview-post" onclick="show_preview();">Show Preview</a>
<iframe id="frm_preview" src="" width="100%" height="10" ></iframe>

Para WordPress 2.0.1

Se sustituye la linea 83 por:

<script type="text/javascript">
<!--
  function show_preview() {
    var elm = document.getElementById("frm_preview");
    elm.src = "<?php echo add_query_arg('preview', 'true', get_permalink($post->ID)); ?>";
    elm.height = "600";
    return false;
  }
-->
</script>
<a href="#preview-post" onclick="show_preview();">Show Preview</a>
<iframe id="frm_preview" src="" width="100%" height="10" ></iframe>

Para futuras versiones

La única diferencia en estas 3 opciones es el número de linea a cambiar y el codigo PHP del iframe src.

Nótese que el contenido PHP que estaba en iframe src se incluye exactamente igual dentro de elm.src en todos los casos. Esto aclaro por si en una futura versión de WordPress este código cambiara, como lo ha venido haciendo, sólo modificamos esa parte y este hack seguirá funcionando a la perfección (y)

Esperemos que WordPress recapacite y pronto tenga algo similar funcionando por defecto.

Autor del post: DanielSemper: @aeromental + Facebook

  • neojp

    Es justo lo que pensé, para que instalar plugins si puedes hacerlo manualmente, o hacer algo más pr0 y crear un userscript o algo más sencillo, un userstyle.

    Algo como #frm_preview { display:none; } hará que el iframe no solo desaparezca, sino tampoco cargue (al menos en firefox, “creo” que IE6 si lo carga pero no lo muestra).