Argumentos condicionais para WP_Query e tax_query dependendo se $ somevar tem um valor

4

Eu criei uma nova consulta para um tipo de postagem personalizado de 'cursos'. Esses resultados devem então ser filtrados usando tax_query, consultando 3 taxonomias personalizadas correspondentes a 1 ou vários IDs de termo. Estes são passados de uma página de pesquisa.

Este é o código que funciona até agora:

// Lets emulate the posted ID's from the course search widget
// with some static term ID's for each custom taxonomy.
$search_course_area = array(65, 62);
$search_course_level = array(117); //52 for further filtering
$search_course_mode = array(54, 56); 


//Begin a new query
$query = new WP_Query(
    array(
        //Retreive ALL course posts
        'post_type' => 'course',
        'posts_per_page' => '-1',
        //Filter taxonomies by id's passed from course finder widget
        'tax_query' => array(
                //Set the relation condition for the filters in 
                //this case we're using AND as it is explicity set 
                //by the user when searching
                'relation' => 'AND',
                //First check retreive course-area's based on ID
                array(
                    'taxonomy' => 'course-area',
                    'field' => 'id',
                    'terms' => $search_course_area
                ),
                //And again for the second taxonomy
                array(
                    'taxonomy' => 'study-levels',
                    'field' => 'id',
                    'terms' => $search_course_level
                ),
                //Finally check retreive course-level's based on ID
                array(
                    'taxonomy' => 'course-mode',
                    'field' => 'id',
                    'terms' => $search_course_mode
                ),
        )
    )
);

A coisa em que estou um pouco preso é se uma matriz é passada, o que é vazio, isso obviamente quebra a consulta e não retorna nenhum resultado.

Qual seria a maneira mais limpa de lidar com isso? Eu poderia fazer algo como:

if (isset($search_course_area)) {
    echo  "array(
                    'taxonomy' => 'course-area',
                    'field' => 'id',
                    'terms' => $search_course_area
                ),";
};

Mas tenho a sensação de que essa não seria a melhor maneira de abordar isso?

Muito obrigado pelo seu tempo e qualquer ajuda que você possa dar Eu realmente agradeço!

    
por Craig Pearson 20.06.2012 / 03:09

2 respostas

10

Você pode definir os argumentos fora da instanciação 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(
        //Retreive ALL course posts
        'post_type' => 'course',
        'posts_per_page' => '-1',
        //Filter taxonomies by id's passed from course finder widget
        'tax_query' => $tax_query,
    )
);
?>
    
por jessica 20.06.2012 / 03:44
0

Apenas no caso de alguém ver isso hoje em dia, se você tiver vários casos em sua instância de consulta, você deve ter sua variável envolvida por outra matriz ... 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',
    )); 
} 
    
por Wesley Andrade 03.10.2018 / 22:51