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.

21 comments

  1. Llevaba tiempo buscando la manera de utilizar los campos personalizados que WordPress ofrece pero no había encontrado nada que no fuera a través de plugins.

    Una solución sencilla y útil, qué más se puede pedir.

    Muchas gracias

  2. Bastante bien la información de los campos personalizados, que todo este tiempo con WordPress y aún no sabía bien como utilizarlos.

  3. HERMANO QUE PENA UTILIZR ESTE POST PARA PEDIRTE AYUDA …
    LA REQUIERO CON URGENCIA MI BLOG ESTA CONSUMIENDO LA BASE DE DATOS Y VEO QUE VOS MANEJAS EL TEMA ….
    POR FAVOR REQUIERO AYUDA…
    YA SABES DONDE ENCONTRARME….
    ABRAZO VIRTUAL

  4. Nada. Solo simples, llanas y afectuosas felicidades por el proyecto, Excelente diseño, buen contraste, y bonita paleta de colores =}

    Lo que más me gustó es el esquema de los números de la revista, porque de esa forma la URL queda amigable, haciendo más fácil la navegación.

    Lo bueno de WP, es la facilidad para themearlo, facilidad que ya se quisieran otros monstruos como Typo3 (de lo mejorcito, pero complicado hasta decir basta) o Drupal (que ahora es bastante más amigable).

    En fin, felicidades y mucho éxito, que se ve que le has puesto trabajo.

  5. Que increible blog! 🙂

    perdon, me gustaria consultarte…

    Como lo hiciste para registrar tu dominio .net?

    Estoy algo desorientado con este tema, nose que empresa es de confiar para hacer este tramite aqui en chile…

    Te escribo todo esto, porque estoy interezado en adquirir un dominio tipo .net o .com

    Me puedes sugerir alguna entidad confiable para registrar mi dominio?

    gracias! espero tu respuesta si no es mucho pedir 🙂

  6. Un artículo como dios manda, si señor 🙂
    Con lo de los “campos personalizados” me has abierto el cielo

  7. Es cierto que está sub-utilizada la potencia de los campos personalizados para WP. Lo vi bien usado para el plugin WP-Views de Lester Chan y los usé yo para mi plugin MetaToro.

    Y a post->post_parent lo apliqué recientemente para las páginas hijas de la página “Publicidad” en mi wl. 🙂

    Lindo post, me gustó leerlo (hasta lo imprimí, y lo leí viajando en colectivo/bondi/bus). 😉

    Ah una cosita, en tu último ejemplo con if($post->post_parent = 2 ¿no debería ser con doble igual ==?

  8. Muy bueno, el articulo…

    Estoy buscando la manera de manejar los campos personalizados, pero lo que necesito, es crear un formulario fuera del dashboard, para que cualquier usuario pueda insertar entradas que yo luego validaria. (en ese formulario hay muchos campos personalizados)

    Alguien sabe de la existencia de algun plugin y/o manual que me ayude a implementar esto…

    Muchas gracias,

  9. Muchas gracias Felipe,

    Es mas o menos lo que buscaba, el tema esta en como añadir campos al formulario para insertar en los campos personalizados que se hayan definido… no se si me explico…

    Imagino que no sea muy complicado de añadir… lo intento… ya te comento…

    Mil gracias,

  10. yo realizo muy buen uso de los campos personalizados sobre todo con el thumbs.php para hacer rezise de las images al tamaño que se prefiera

  11. “Hasta ahí, todo bien… pero ¿y si ese campo está vacío?…”

    Y, una duda

    Y si aparte de epigrafe tenemos mas campos personalizados (ej:dato1, dato2, dato3) pero solo queremos mostrar algunos?, como le hago?

    Saludos

  12. @edgardo: para eso es justamente el segundo parámetro de la función get_post_meta()… con él puedes determinar a qué campo personalizado acceder o mostrar

  13. Se agradecen post didácticos y sencillos de entender como este. Yo no tengo mucha idea de php, pero entiendo que con los plugin tampoco hace falta ser un genio, no?

Comments are closed.