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 se explicara 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 delid
indicado.$post->ID
es elid
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 valormenu_order
hacemos que los recupere según el campoPage 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));
}
}
?>
Te esperamos en los siguientes artículos en donde hablaremos mas acerca de estos temas, los cuales hoy en día son de vital importancia en el mundo de la tecnología.