Таксономия и Дата в том же запросе?

Возможно объединить tax_query с date_query в новом Wordpress?

Вот моя попытка сделать так:

$args = array(
 'post_type' => 'job',
'tax_query' => array(  
       array(  
        'taxonomy' => 'location',
        'terms' => 'dallas',
        'field' => 'slug',
       )  
 ),
 'date_query' => array(
    array(
        'year' => '2014',
        'month' => '12',
    ),
  )
);
$jobs = new WP_Query($args);

Однако это игнорирует запрос даты и только работы запроса таксономии. Когда я удаляю часть запроса таксономии, запрос даты внезапно работает.

Какие-либо идеи об этом?

1
05.06.2014, 00:11
3 ответа

Вот полный код, который я закончил тем, что использовал, с тех пор, кажется, нет способа представить "ИЛИ" как отношение в запросе. Это просто проверяет, какой запрос происходит от строки запроса, затем применяет корректный args к WP_Query. Надежда все это имеет смысл!

<?php
$locationq = $_REQUEST["location"]; 
$monthq = $_REQUEST['month'];
$yearq = $_REQUEST['year'];
$searchq = $_REQUEST['keyword'];

//list terms in a given taxonomy
$taxonomy = 'careerlocation';
$tax_terms = get_terms($taxonomy);
echo '<div class="careerbox locationpicker">';
echo '<select class="locationlinks">';
echo '<option value="" disabled="disabled" selected="selected">Select a region</option>';
echo '<option value="">View All</a></li>';
foreach ($tax_terms as $tax_term) {
    echo '<option value="?location='.$tax_term->slug.'">' . $tax_term->name . '</option>'."\n";
}
echo '</select>';
echo '</div>';

//list month and year of listed positions
echo '<div class="careerbox datepicker">';
echo '  <select class="datelinks">';
echo '    <option value="" disabled="disabled" selected="selected">Date Posted</option>';
$current_date = "";
$count_posts = wp_count_posts();
$nextpost = 0;
$published_posts = $count_posts->publish;
$myposts = get_posts(array(
  'post_type' => 'career',
  'posts_per_page' => $published_posts
)); 
foreach($myposts as $post) :
    $nextpost++;
    setup_postdata($post);
    $date = get_the_date("F Y");   
    if($current_date!=$date): 
        //echo '<option value="">'. $date .'</option>';
        $dt = strtotime($date);
        $month=date('m',$dt);
        $year=date('Y',$dt);
        echo '<option value="?month='.$month.'&year='.$year.'">'. $date .'</option>';
        $current_date = $date;
    endif;
endforeach; 
wp_reset_postdata();
echo '  </select>';
echo '</div>';
?>
           </div>
<?php
//now run query filter on either date or location
if($locationq) {
$qu = 'tax_query';
$typequery = array(  
    array(  
        'taxonomy' => 'careerlocation',
        'terms' => $locationq,
        'field' => 'slug',
        'operator' => 'IN',
        'include_children' => false
    )
);
} else if($monthq || $yearq) {
$qu = 'date_query';
$typequery = array(
    array(
        'year' => intval($yearq),
        'month' => intval($monthq),
        'compare' => '='
    )
);
} else if($searchq) {
$qu = 's';
$typequery = $searchq;
}
$jobargs = array(
'post_type' => 'career',
$qu => $typequery
);
$careersq = new WP_Query($jobargs);
?>
0
19.02.2020, 23:26

Более тщательно изучите параметры даты; необходимо будет ввести целое число (число), не строка (текст). Просто избавьтесь от одинарных кавычек, чтобы заставить его работать:

$args = array(
  'post_type' => 'job',
  'tax_query' => array(  
    array(  
      'taxonomy' => 'location',
      'terms' => 'dallas',
      'field' => 'slug'
    )  
  ),
  'date_query' => array(
    array(
      'year' => 2014,
      'month' => 12
    ),
  )
);

$jobs = new WP_Query($args);
0
19.02.2020, 23:26
  • 1
    На самом деле, они проникают как переменные, таким образом, в моем рабочем коде нет никаких кавычек. Это похоже на это: 'год' => $year, –  f8xmulder 05.06.2014, 02:45
  • 2
    , который я только что протестировал с реальными целыми числами, никакими кавычками, и это все еще подходит пустое. –  f8xmulder 05.06.2014, 02:47
  • 3
    @f8xmulder - Вы уверенный в выводе $year? Возможно, это поможет: (int)$year –  Sven 05.06.2014, 02:51
  • 4
    Только испытанный 'год' => intval (2014) и 'год' => 2014 Все еще ничто... –  f8xmulder 05.06.2014, 02:58
  • 5
    @f8xmulder ну, 'year' => 2014, 'month' => 12 находится в будущем; действительно ли Вы уверены, что существуют сообщения? ;) –  Sven 05.06.2014, 03:12

Немного больше рытья. Я смог сделать условное выражение на основе querystring и выполнить отдельный запрос.

Вот мое конечное решение:

if($locationq) {
$qu = 'tax_query';
$typequery = array(  
    array(  
        'taxonomy' => 'location',
        'terms' => $locationq,
        'field' => 'slug',
        'operator' => 'IN',
        'include_children' => false
    )
);
} else if($monthq || $yearq) {
$qu = 'date_query';
$typequery = array(
    array(
        'year' => intval($yearq),
        'month' => intval($monthq),
        'compare' => '='
    )
);
} 
$jobargs = array(
'post_type' => 'career',
$qu => $typequery
);
0
19.02.2020, 23:26

Теги

Похожие вопросы