Argumentos condicionales para WP_Query y tax_query dependiendo si $somevar tiene un valor
20 jun 2012, 04:09:11
Vistas: 27.2K
Votos: 8
He creado una nueva consulta para un tipo de publicación personalizada 'courses'. Esos resultados luego se filtran usando tax_query, consultando 3 taxonomías personalizadas que coinciden con 1 o varios ID de términos. Estos se pasan desde una página de búsqueda.
Aquí está el código funcionando hasta ahora:
// Vamos a emular los ID publicados desde el widget de búsqueda de cursos
// con algunos ID de términos estáticos para cada taxonomía personalizada.
$search_course_area = array(65, 62);
$search_course_level = array(117); //52 para filtrado adicional
$search_course_mode = array(54, 56);
//Comenzar una nueva consulta
$query = new WP_Query(
array(
//Recuperar TODOS los posts de cursos
'post_type' => 'course',
'posts_per_page' => '-1',
//Filtrar taxonomías por ids pasados desde el widget buscador de cursos
'tax_query' => array(
//Establecer la condición de relación para los filtros
//en este caso estamos usando AND ya que está explícitamente
//establecido por el usuario al buscar
'relation' => 'AND',
//Primero verificar y recuperar course-area basado en ID
array(
'taxonomy' => 'course-area',
'field' => 'id',
'terms' => $search_course_area
),
//Y de nuevo para la segunda taxonomía
array(
'taxonomy' => 'study-levels',
'field' => 'id',
'terms' => $search_course_level
),
//Finalmente verificar y recuperar course-level basado en ID
array(
'taxonomy' => 'course-mode',
'field' => 'id',
'terms' => $search_course_mode
),
)
)
);
Lo que me tiene un poco atascado es que si se pasa un array que está vacío, esto obviamente rompería la consulta y no devolvería resultados.
¿Cuál sería la forma más limpia de abordar esto?
Todas las respuestas a la pregunta
2
3
Puedes definir los argumentos fuera de la instanciación de WP_Query
:
<?php
$tax_query = array('relation' => 'AND');
if (isset($search_course_area))
{
$tax_query[] = array(
'taxonomy' => 'course-area',
'field' => 'id',
'terms' => $search_course_area
);
}
if (isset($search_course_level))
{
$tax_query[] = array(
'taxonomy' => 'study-levels',
'field' => 'id',
'terms' => $search_course_level
);
}
if (isset($search_course_mode))
{
$tax_query[] = array(
'taxonomy' => 'course-mode',
'field' => 'id',
'terms' => $search_course_mode
);
}
$query = new WP_Query(
array(
// Recuperar TODAS las publicaciones de cursos
'post_type' => 'course',
'posts_per_page' => '-1',
// Filtrar taxonomías por IDs pasados desde el widget de buscador de cursos
'tax_query' => $tax_query,
)
);
?>

jessica
1.4K
20 jun 2012 04:44:55
0
Por si alguien está viendo esto actualmente, si tienes múltiples casos dentro de tu instancia de consulta, deberías envolver tu variable dentro de otro arreglo... algo como:
$meta_query = array();
if ( 0 == $current_user->ID ) {
$meta_query[] = array(array(
'key' => 'restrito_para_visualizar',
'value' => '1',
'compare' => '!=',
'type' => 'CHAR',
),
array(
'key' => 'ativo',
'value' => '1',
'compare' => '=',
'type' => 'NUMERIC',
));
} else {
$meta_query[] = array(
array(
'key' => 'ativo',
'value' => '1',
'compare' => '=',
'type' => 'NUMERIC',
));
}

Wesley Andrade
11
3 oct 2018 23:51:48
Preguntas relacionadas
2
respuestas
0
respuestas
3
respuestas
3
respuestas
2
respuestas