Ardilla Quio Ardilla Quio

15 de Mayo de 2013

Estructura web en Wordpress: cargar el contenido del primer hijo

La mayor parte de las páginas web tienen una estructura organizada en varios niveles. Cuando el cliente entrega los contenidos vemos que muchas veces no hay nada en las secciones padre. Al preguntar qué contenidos irán ahí, la respuesta más habitual es que no quieren nada, que cuando pinchen en esa sección se redirija a la primera sección hija, es decir, que sólo se utiliza la sección padre como contenedor, para organizar los contenidos.

En este artículo explicaremos una solución a este problema cuando estamos desarrollando la página web con el open source Wordpress.

Se trata de crear una plantilla de página en la que añadiremos el código para hacer la redirección al primer hijo.

Para hacer un plantilla de página debemos crear un fichero nuevo. Las primeras líneas del fichero deberán ser las palabras "Template Name" dentro de comentarios PHP. Un ejemplo:

<?php
/*
Template Name: Cargar primer hijo
*/

A continuación pondremos el código:

$pagekids = get_pages("child_of=".$post->ID."&sort_column=menu_order");
$firstchild = $pagekids[0];
wp_redirect(get_permalink($firstchild->ID));

La primera línea llama a get_pages que es una función del núcleo del Wordpress para obtener las secciones de tipo Page. En este caso la llamamos con los siguientes parámetros:

  • child_of = $post->ID: child_of es para recuperar sólo las secciones que son hijas del id indicado. $post->ID es el id de la página en la que estamos, por lo tanto recuperamos los hijos de la página actual.
  • sort_column = menu_order: sort_column indica el tipo de ordenación. Con el valor menu_order hacemos que los recupere según el campo Page Order.

El resultado final es que recuperamos en un array todas las páginas hijas de la actual ordenadas por el campo Page Order.

En la segunda línea metemos en una variable el primer elemento del array anterior, es decir el primer hijo y en la tercera línea hacemos una redirección al primer hijo.

Para acabar sólo nos queda añadir este fichero en el directorio de nuestro tema (/wp-content/themes/mi-tema/) y la próxima vez que entremos a editar o crear una página, en la sección de "Atributos de página" veremos una nueva plantilla en el desplegable con el nombre que hayamos puesto después de "Template Name", en este ejemplo "Cargar primer hijo". Para hacer que cualquier página vaya al primer hijo sólo tendremos que tener seleccionada esta opción.

Consejos

  • No poner un nombre excesivamente largo en "Template Name", ya que el desplegable en el que se muestra tiene un máximo de 250px. Los nombres muy largos quedan cortados.
  • Poner un nombre al fichero que nos recuerde que es una plantilla para páginas y la plantilla que es. Para este ejemplo un buen nombre sería "redirect-first-child-page-template.php"

Mejora:

Una posible mejora a este código es comprobar antes si nuestra página tiene contenido. En caso de tenerlo mostramos el contenido y, si no, redireccionamos al primer hijo.

El código completo sería:

<?php
/*
Template Name: Cargar primer hijo
*/
if (have_posts()) {
  while (have_posts()) {
    the_post();
    $pagekids = get_pages("child_of=".$post->ID."&sort_column=menu_order");
    $firstchild = $pagekids[0];
    wp_redirect(get_permalink($firstchild->ID));
  }
}
?>

Más información

0 comentarios

Comentario anónimo
Comentar como usuario