Comentando algunas funciones para WordPress

Durante los últimos días he estado trabajando en un proyecto que se ubica a medio camino entre yukei.net y el psicoanálisis —siendo más concreto, se trata del diseño y la implementación de un sitio web para una revista de psicoanálisis y literatura en cuyo desarrollo estoy involucrado.

Ahora, a lo que promete el título de este artículo: como podrán deducir, he optado por WordPress como gestor de contenidos, principalmente por su facilidad de uso y por mi propia familiaridad con el mismo, estructurando los números de la revista (en papel) con el sistema de páginas, de esta manera:

  • Istmo
    • Archivo de números
      • Número 1
        • Artículo
        • Artículo
        • Artículo (…)
      • Número (n)
        • Artículo (n)

De esta manera, me he visto enfrentado a algunos retos interesantes en términos de programación (de la que, repito, no se nada aparte de lo que he ido aprendiendo con la experiencia) para manejar ciertos aspectos de la navegación, generación dinámica de contenidos, etc. Paso entonces a las funciones.

Custom fields (campos personalizados)

Probablemente una de las características menos ocupadas de WordPress por un usuario común (¿probablemente?…. ¡seguramente!) pero con mayor potencial.

En principio, iba a utilizar campos personalizados para guardar prácticamente todo menos el texto de un artículo, pero algunas complicaciones (puntualmente, la necesidad de utilizar notas al pie de página) me decidieron finalmente por incluir más cosas en el cuerpo del texto (o sea, lo que escupe the_post) y utilizar clases y estilos.

Aunque existen algunos plugins para acceder a los contenidos de los campos personalizados, opté finalmente por utilizar directamente las funciones de WordPress. Por ejemplo, para recuperar el epígrafe (almacenado en un campo convenientemente llamado epigrafe):

<blockquote class="epigrafe">
<?php echo get_post_meta($post->ID, 'epigrafe', $single = true)?>
</blockquote>
  • get_post_meta es una función interna de WordPress que sirve para recuperar el valor de un custom field. Ojo: recuperar no significa que ese valor vaya a ser visible al usuario (aquí los que saben más podrían explicarlo con la terminología correcta) por lo que es necesario explicitar esto con el echo que la antecede.
  • El primer argumento indica en qué post/página debe buscar el campo personalizado, en este caso, $post->ID indica que es en el post/página que el usuario está viendo.
  • El segundo argumento indica el nombre del campo personalizado a buscar, en este caso, epigrafe
  • El tercer argumento, $single = true indica que debe devolver el valor como si fuera uno solo, de lo contrario lo devuelve como un array… no entraré en detalles al respecto

Hasta ahí, todo bien… pero ¿y si ese campo está vacío? Si fuera así, entonces nuestro código quedaría con un blockquote vacío, lo que para un hueón obsesivo como yo es inaceptable. Entonces agregamos un par de líneas para indicar que solamente si hay algo en el campo 'epigrafe' vamos a querer poner el blockquote con su respectivo contenido:

<?php if ( get_post_meta($post->ID, 'epigrafe', $single = true) != '' ) { ?>
<blockquote class="epigrafe">
<?php echo get_post_meta($post->ID, 'epigrafe', $single = true)?>
</blockquote>
<?php } ?>

En la primera línea tenemos una comparación lógica: if, o sea, “si”. Entonces, esa línea se lee “si el campo epígrafe de este post es distinto de (vacío), entonces…”, donde != es distinto (o no igual) y las dos comillas representan el vacío.

Puedes leer más información sobre Custom fields en este post de Boja: Custom fields de WordPress

Enlazar a la página “padre”

Hasta donde yo sé, no existe una función para enlazar a la página “padre” de una sub-página, por lo que es necesario un poco de ingenio para lograrlo:

<a 
href="<?php 
echo get_permalink($post->post_parent)?>">
<?php echo get_the_title($post->post_parent)?>
</a>

Veamos:

  • Nuevamente, recurriremos a dos funciones que ya existen en WordPress: get_permalink y get_the_title, más la ayuda de echo. La primera de ellas sirve para recuperar la URL permanente de un determinado post/página; la segunda, para el título.
  • get_permalink necesita sólo de un argumento: el identificador del post que queremos enlazar. Las jerarquías de páginas se definen indicando la ID de la página padre; si ésta no existe significa que es una página de primer nivel. Por ello, en este caso solicitamos la ID de la página padre mediante $post->post_parent.
  • Para get_the_title el caso es similar, recuperamos el título de la página padre de la misma forma.

Listar las páginas “hermanas”

Por supuesto, con “páginas hermanas” me refiero a aquellas que comparten un mismo padre.

Nuevamente, una función específica para mostrarlas no existe, pero se puede utilizar ésta:

<?php wp_list_pages("child_of=".$post->post_parent."&sort_column=menu_order&depth=1&title_li=");?>

La función wp_list_pages está bien documentada, lo único especial acá es la utilización (una vez más) de $post->post_parent. Atención a la sintaxis: ".$post->post_parent.".

Listar las páginas hijas en la página padre (pero no en la página “abuela”)

¿Hasta dónde puede llegar esta analogía? Probablemente ya la he estirado mucho…

Después de haber estado jugando y experimentando (curiosa y excepcionalmente, con éxito) con estas funciones, decidí aplicarme un poco más y crear un método para que al crear a página de un Número se creara automáticamente una lista con enlaces a los artículos correspondientes (recordar la estructura de páginas que esquematicé anteriormente).

<?php if($post->post_parent = 2 AND $post->ID != 2) {?>
	<ol class="toc">
	<?php wp_list_pages('child_of='.$post->ID.'&sort_column=menu_order&depth=1&title_li='); ?>
	</ol>
<?php } ?>

En mi caso, lo fundamental era la primera línea, que se lee: “si esta página es hija de la página con la ID 2 y no es la página con la ID 2, entonces…”, o sea, mostrar el listado de subpáginas en “Número (n)”, pero no en “Archivo”.

Sin dudas es redundante pero esto fue necesario ya que de otro modo en la página con la ID 2 (“Archivo”) también muestra el listado de subpáginas.

Y para finalizar

Eso es todo, los comentarios quedan abiertos para más aportes.