WordPress y Divi: Cómo filtrar la salida de módulos integrados

WordPress y Divi: Cómo filtrar la salida de módulos integrados

Uno de los temas de WordPress que se están haciendo más populares últimamente es Divi de ElegantThemes. De hecho, a día de hoy es el tema que hemos utilizado como base para nuestro sitio web.

Tiene una gran cantidad de módulos que se pueden utilizar a través de un sistema automático de construcción de páginas (PageBuilder). Estos sistemas nos permiten generar páginas complejas de una manera muy sencilla.

Pero a los que nos gusta ir un poco más allá queremos poder hacer uso de estos módulos de una forma programática, y poder configurarlos como queramos.

Un ejemplo de ello es nuestra página de perfil de autor. Para cada uno de los miembros de SingularTeam se genera dinámicamente una página con nuestro bio, y una relación de proyectos y artículos publicados. Por defecto WordPress maneja una plantilla (author.php) para estas páginas. De forma automática en esa página se filtra la lista de artículos para ese autor en el bucle de posts. Pero solo sería válido para los artículos (y no aquellos Custom Post Type). Y si además queremos hacer uso de la forma de presentación de Divi para artículos o proyectos, este filtro no se utiliza automáticamente.

¿Qué podemos hacer entonces? Pues es sencillo. Utilizar un gancho (Hook) que modifique los argumentos de búsqueda de artículos o de proyectos cuando estemos en la página de autor. Para ello, al comiendo de nuestra página author.php ponemos lo siguiente:

<?php
// Use Hook to filter posts and projects by current author

function filter_by_author( $query) {
    global $author_name;
    if (!$query->is_main_query() && ($query->query_vars['post_type']=='project' ||
        !isset($query->query_vars['post_type']))) {
	$query->set( 'author_name', $author_name);
    }
}
add_action( 'pre_get_posts', 'filter_by_author',999 );
?>

La acción pre_get_posts se ejecuta por WordPress una vez que se tiene una lista de argumentos para ejecutar una query sobre la base de datos de wp_posts pero justo antes de ejecutarla. Eso nos permite alterar dicha query. En este caso nos aseguramos de que no sea la query principal (la del bucle o the_loop) y que sea una query para buscar en la lista de proyectos (post_type=project) o que no tenga declarado post_type (que es como se sacan la lista de artículos por defecto). Cuando se cumplan esas condiciones se introduce en la query el nombre del autor para que solo se extraigan de la base de datos aquellos que correspondan a dicho autor. El nombre del autor se saca a través de una variable global que definiremos en la ejecución de author.php

Con esto se puede alterar cualquier plugin o tema que realice llamadas fuera del bucle (con query_posts o get_posts por ejemplo) sin tener que tocar el código del mismo.

Enviar comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>