wordpresscategoriesmeta-query

custom wp_query where meta_key is variable or not needed


To make a custom post type filterable and sortable, i created a custom query that works based on variables in url, accessed by $_GET. One specific situation breaks it. This is an (un)specified metakey. In the case of sort, the metakey is needed when sorting on a custom field. In the other cases, the metakey can be ignored. However, when i set the variable on empty, the query doesnt produce any posts. How to deal with an empty meta_key?

So far i tried to set the variable as empty ($variable =''); I set the variable as null; I have used unset.

if (isset($_GET["key"]) || isset($_GET["orderby"])){
if (isset($_GET["key"])) {$key = $_GET["key"];}
else {$key = '';}
if (isset($_GET["value"])) {$value = $_GET["value"]; echo $value;}
else {$value = '';}
if (isset($_GET["orderby"])) {$orderby = $_GET["orderby"];}
if ($orderby='meta_value'){$meta_key='averagerating';}
else {$orderby='';$meta_key='';}
if (isset($_GET["order"])) {$order = $_GET["order"];}
else {$order='';}
$cat = get_queried_object();
if (!empty($cat) && !is_post_type_archive('bedrijf')){
$category = $cat->name;
}

if (is_post_type_archive('bedrijf')){
$category = '';
$terms = get_terms( 'bedrijfs-category' ); 
    // convert array of term objects to array of term IDs
$category = wp_list_pluck( $terms, 'name' );    
}
global $post;
                $the_query ='';
                $args = array(
                    'post_type' => 'bedrijf',
                    'posts_per_page' => 10,
                    'meta_key' => ''.$meta_key.'',
                    'orderby'   => ''.$orderby.'',
                    'order' => ''.$order.'',
                    'tax_query' => array(
                                        array(
                                            'taxonomy' => 'bedrijfs-category',
                                            'field'    => 'name',
                                            'terms'    => $category
                                            )
                                        ),
                    'meta_query' => array(
                                        array(
                                            'key'=> ''.$key.'', 
                                            'value' => ''.$value.'',
                                            'compare' => 'LIKE'
                        )   
                    )
                );
 $the_query = new WP_Query($args); }

WHat i would like is a solution for inserting an empty variable in the meta_key => ''.$meta_key.'' so the loop skips the meta_key part.


Solution

  • define meta_query or tax_query out of $args and (example):

    if($_GET['some_name'] !== ''){
      $meta_query = array(
        array(
             'taxonomy' => 'bedrijfs-category',
             'field'    => 'name',
             'terms'    => $category
        )
      );
      //define args with some_one para exists
      $args = array(
            'post_type' => 'bedrijf',
            'posts_per_page' => 10,
            'meta_key' => ''.$meta_key.'',
            'orderby'   => ''.$orderby.'',
            'order' => ''.$order.'',
            'meta_query' => $meta_query
      );
    
    }else{
    
        //define args with some_one para not exists
        $args = array(
            'post_type' => 'bedrijf',
            'posts_per_page' => 10,
            'meta_key' => ''.$meta_key.'',
            'orderby'   => ''.$orderby.'',
            'order' => ''.$order.''
      );
    
     }
    

    tax_query is like this