Search code examples
phpwordpresscustom-post-typetaxonomy

Wordpress meta_query taxonomy don't work


On my blogI tried sucessfully to make a research for articles titles and content, but after I tried to make a research for custom taxonomy of articles 'categories' with meta_query() and REGEXP, didn't work.

My form :

<div class="zone_filters">
  <form action="" method="GET">
    <input type="hidden" name="page_id" value="249" />
    <input type="text" name="search_input" />
    <select name="type">
        <option value="title">titre et texte</option>
        <option value="category">catégorie</option>
    </select>
    <select name="orderby">
        <option value="DESC">plus récent</option>
        <option value="ASC">plus ancien</option>
    </select>
    <button type="submit">OK</button>
  </form>
</div>

My arguments :

<?php 

$orderby = 'DESC';

if($_GET['orderby']) {

    $orderby = $_GET['orderby'];
}

$args = array(
    'post_type' => 'article',
    'posts_per_page' => 3,
    'paged' => get_query_var('paged') ? get_query_var('paged') : 1,
    'orderby' => array('date' => $orderby)
);

if($_GET['type'] == 'title') {

    $args['s'] = $_GET['search_input'];
}
elseif($_GET['type'] == 'category') {

    $value = '^[a-zA-Z|\s]*(' . strtoupper( $_GET['search_input']) . '|' . strtolower( $_GET['search_input']) . ')[a-zA-Z|\s]*$';

    $args['meta_query'] = array(array('key' => 'categories', 'value' => $value, 'compare' => 'REGEXP'));

}

$query = new WP_Query($args);?>

I learned it from the Codex and I can't found the differences between my code and the doc.


Solution

  • Use tax query for category.

    $args['tax_query'] = array(array('taxonomy' => 'categories', 'field' => 'slug', 'terms' => $value));
    

    as per your html

    <div class="zone_filters">
      <form action="" method="GET">
        <input type="hidden" name="page_id" value="249" />
        <input type="text" name="search_input" />
        <select name="type">
            <option value="">titre et texte</option>
            <option value="category-1">Category 1</option>
            <option value="category-2">Category 2</option>
            <option value="category-3">Category 3</option>
        </select>
        <select name="orderby">
            <option value="DESC">plus récent</option>
            <option value="ASC">plus ancien</option>
        </select>
        <button type="submit">OK</button>
      </form>
    </div>
    
    <?php 
    
    $orderby = 'DESC';
    
    if($_GET['orderby']) {
    
        $orderby = $_GET['orderby'];
    }
    
    $args = array(
        'post_type' => 'article',
        'posts_per_page' => 3,
        'paged' => get_query_var('paged') ? get_query_var('paged') : 1,
        'orderby' => array('date' => $orderby)
    );
    
    if($_GET['type'] == 'title') {
    
        $args['s'] = $_GET['search_input'];
    }
    elseif($_GET['type'] == 'category') {
    
        $value = '^[a-zA-Z|\s]*(' . strtoupper( $_GET['search_input']) . '|' . strtolower( $_GET['search_input']) . ')[a-zA-Z|\s]*$';
    
        $args['tax_query'] = array(array('taxonomy' => 'categories', 'field' => 'slug', 'terms' => $value));
    
    }
    
    $query = new WP_Query($args);?>