Пользовательский запрос $ wpdb для пользовательских типов сообщений по категориям

Я использую следующий код для вывода списка элементов в пользовательском типе «Документы» по году и месяцу.

<ul> <?php $post_type = 'documents'; global $wpdb; /**/ $years = $wpdb->get_col("SELECT DISTINCT YEAR(post_date) FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = '".$post_type."' ORDER BY post_date DESC"); foreach($years as $year) : $years_count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = '".$post_type."' AND YEAR(post_date) = ".$year.";" ) ); ?> <li class="year"><?php echo $year; ?> (<?php echo $years_count; ?> Posts) <ul> <? $months = $wpdb->get_col("SELECT DISTINCT MONTH(post_date) FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = '".$post_type."' AND YEAR(post_date) = '".$year."' ORDER BY post_date DESC"); foreach($months as $month) : $months_count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = '".$post_type."' AND YEAR(post_date) = ".$year." and MONTH(post_date) = ".$month.";" ) ); ?> <li class="month">> <a href="<?php echo get_month_link($year, $month)."?post_type=".$post_type; ?>"><?php echo date( 'F', mktime(0, 0, 0, $month) );?></a> (<?php echo $months_count; ?> Posts) <?php $theids = $wpdb->get_results("SELECT ID, post_title, post_date FROM $wpdb->posts WHERE post_type = '".$post_type."' AND post_status = 'publish' AND YEAR(post_date) = ".$year." and MONTH(post_date) = ".$month.";"); foreach ($theids as $theid): ?> <h4 style="font-style:italic;"><li><a href="#"><?php echo $theid->post_title; ?></a></li></h4> <?php endforeach; ?> </li> <?php endforeach;?> </ul> </li> <?php endforeach; ?> </ul> 

В настоящее время это работает так, как ожидалось, но у меня возникают проблемы с попыткой сделать то же самое для определенной категории в моем почтовом типе документов. Как бы я уточнил этот код для своей категории «cascade-campus-docs» в моем почтовом типе «документы».

Не используйте $wpdb , используйте wp_query . Не только ваш код будет более компактным и быстрым, вы избежите таких проблем. Если вы ничего не делаете с пользовательскими таблицами или серьезно углубленным SQL, нет никаких оснований делать прямые вызовы SQL на $wpdb .

Итак, чтобы ответить на ваш вопрос – перепишите его с нуля с помощью wp_query , убедитесь, что все, что вы хотите сделать, задокументировано в Codex , решите свои проблемы без каких-либо хлопот и похлопайте себя по спине, сделайте хорошо выполненную работу.

Спасибо SickHippie.

Это то, с чем я столкнулся:

 <?php $args = array( 'posts_per_page' => -1, 'post_type' => 'documents', 'post_status' => 'publish', 'tax_query' => array( array( 'taxonomy' => 'download-category', 'field' => 'slug', 'terms' => 'cascade-campus-docs' ) ) ); $my_query = null; $my_query = new WP_Query($args); ?> <?php if( $my_query->have_posts() ) { while ($my_query->have_posts()) : $my_query->the_post(); ?> <?php $year = get_the_date('Y', '', '', FALSE); if ($year !== $year_check) { echo "<h2 class='year'>" . $year . "</h2>"; } $year_check = $year; ?> <?php the_date('F', '<p class="the_date"><span>', '</span></p>'); ?> <p><a href="#" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p> <?php endwhile; } wp_reset_query(); ?> 

Я искал это в течение последней недели, но ничего не нашел. Надеюсь, этот запрос будет отображаться только для определенных категорий:

 <?php $years = $wpdb->get_col("SELECT DISTINCT YEAR(post_date) FROM $wpdb->posts INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id) INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id AND $wpdb->term_taxonomy.taxonomy='category') INNER JOIN $wpdb->terms ON ($wpdb->terms.term_id = $wpdb->term_taxonomy.term_id) WHERE $wpdb->terms.slug='blog' ORDER BY post_date DESC"); foreach($years as $year) : ?> <li><a href="JavaScript:void()"><?php echo $year; ?></a> <ul class="archive-sub-menu"> <? $months = $wpdb->get_col("SELECT DISTINCT MONTH(post_date) FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'post' AND YEAR(post_date) = '".$year."' ORDER BY post_date DESC"); foreach($months as $month) : ?> <li><a href="<?php echo get_month_link($year, $month); ?>"> <?php echo date( 'F', mktime(0, 0, 0, $month) );?></a> </li> <?php endforeach;?> </ul> </li> <?php endforeach; ?>