Intereting Posts

Получить архив таксономии wordpress и отсортировать по году

У меня есть пользовательский тип сообщения с пользовательской таксономией.

В настоящее время я показываю все сообщения, отсортированные по дате, с заголовком даты выше всех сообщений, используя этот код:

<?php $years = $wpdb->get_results( "SELECT YEAR(post_date) AS year FROM wp_posts WHERE post_type = 'press' AND post_status = 'publish' GROUP BY year DESC" ); foreach ( $years as $year ) { $posts_this_year = $wpdb->get_results( "SELECT ID, post_title FROM wp_posts WHERE post_type = 'press' AND post_status = 'publish' AND YEAR(post_date) = '" . $year->year . "'" ); echo '<div id="press-year">' . $year->year . '</div>'; foreach ( $posts_this_year as $post ) { echo '<div id="small_gridbox1">'; $src = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), thumbnail, false); echo '<div id="small_gridbackground" style="background-image: url('; echo $src[0]; echo ')"> </div> <a href="'; the_field('pdflink'); echo '" target="_blank"> <div id="small_gridcontent"> <div class="small_title">'; the_title(); echo '<div class="job_title">'; the_field('title'); echo '</div></div> <div class="small_sub">'; echo str_replace(' ', '', get_field('sub_heading')); echo '</div> </div> </a> </div>'; } } ?> 

Кажется, я не могу получить только сообщение с определенной таксономией на страницах архива.

В идеале я хотел бы использовать код, который у меня есть, но некоторые, как объединить его с этим кодом, который я успешно использовал в прошлом:

  <?php $term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) ); ?> 

Может ли кто-нибудь дать представление?

Solutions Collecting From Web of "Получить архив таксономии wordpress и отсортировать по году"

Вы здесь слишком усложняете. То, что вы делаете, не просто дорого ( потому что вы теряете все кеши, которые включают в себя почтовые, почтовые мета, термины и миниатюрные кеши ), это совершенно неправильно.

  • Вы выполняете пользовательские запросы, которые заменяют основной запрос. Это само по себе замедляет загрузку страницы

  • Вы не должны запускать свои собственные SQL-запросы для целей безопасности и dynamica. Как я уже сказал, вы теряете все кеши, которые ускоряют загрузку страниц и уменьшают количество запросов. Вы также потеряете все фильтры и действия, которые предлагает WP_Query

  • У вас много ненужных запросов. Все, что вам нужно сделать, уже находится в основном запросе, это всего лишь случай использования этой информации для удовлетворения ваших потребностей.

Давайте посмотрим, как мы это решаем. Основной запрос на странице архива термина таксономии уже возвращает только сообщения из запрошенного термина. Эти сообщения по умолчанию упорядочены по дате, DESC. Итак, самые новые сообщения будут сверху, а динозавры внизу. Как вы можете видеть, все уже существует, все, что вам может потребоваться, это изменить количество сообщений, отображаемых на странице, что в этом случае, кажется, все из них на первой странице

Поскольку мы используем основной запрос здесь, все почтовые кэши заполняются нашими сообщениями, сообщениями о мета и терминах, что в дальнейшем значительно облегчает запросы db. Кроме того, поскольку мы используем основной запрос, наши миниатюры сообщений также кэшируются. Помните, что эскизы сообщений кэшируются только для основного запроса, а не для пользовательских запросов.

Во-первых, позвольте использовать pre_get_posts чтобы получить все сообщения на первой странице наших страниц архива терминов таксономии

 add_action( 'pre_get_posts', function ( $q ) { if ( !is_admin() // Only target front end && $q->is_main_query() // Only target the main query && $q->is_tax() // Only target taxonomy term archive pages ) { $q->set( 'posts_per_page', -1 ); // Will return all posts on page one } }); 

Если вы используете основной цикл по умолчанию, вы бы увидели все сообщения, которые были отправлены по дате на вашей странице архива таксономии

Позволяет сортировать ваш цикл. Прежде всего, удалите весь свой код. Мы не хотим и не нуждаемся в пользовательских запросах. Мы просто хотим использовать основной цикл. Что касается сортировочной части, это так же просто, как сравнение дат публикации и отображение только года, если это отличается между любыми двумя сообщениями ( ПРИМЕЧАНИЕ: весь код не проверен, и я только очистил ваш код, не изменял его)

 if ( have_posts() ) { // Define a variable which will hold our year value $year_variable = ''; while ( have_posts() ) { the_post(); // Lets get the post date, but only the year value $post_year = get_the_date( 'Y' ); /** * Compare the current post's date with our $year_variable and * display the year value if the two dates differs */ if ( $year_variable !== $post_year ) echo '<div id="press-year">' . $post_year . '</div>'; // Update the $year_variable value $year_variable = $post_year; // Now we can display the rest of the loop echo '<div id="small_gridbox1">'; $src = wp_get_attachment_image_src( get_post_thumbnail_id(), thumbnail, false); echo '<div id="small_gridbackground" style="background-image: url( ' . $src[0] . ' </div>'; echo '<a href='" . the_field('pdflink') . '" target="_blank <div id="small_gridcontent"> <div class="small_title"> ' . the_title() . ' <div class="job_title"> ' . the_field('title') . ' </div> </div> <div class="small_sub"> ' . str_replace( ' ', '', get_field('sub_heading' ) ) . ' </div> </div> </a>'; echo '</div>'; } } 

Это должно дать вам общее представление о том, как должна выглядеть ваша страница архива таксономии