Заказать таможенную таксономию по дате

У меня есть обычная таксономия, называемая сериями. Я хочу иметь страницу, на которой перечислены все серии с последними сверху.

Серии

  • Серия о рыбе

    • Сообщение 1
    • Сообщение 2
  • Серия о собаке

    • Сообщение 1
    • Сообщение 2

Я создал таксономию series.php, в которой перечислены отдельные серии, но я перехожу на http://example.com/series . Я получаю 404.

Нужно ли создавать отдельную страницу по теме? перечислить в серии, упорядоченной по дате?

Solutions Collecting From Web of "Заказать таможенную таксономию по дате"

У WordPress нет архива для таксономии, но есть только архив для условий.

Например, у вас может быть url example.com/series/series-about-fish thta отображает все сообщения в этой серии, но нет архива example.com/series/ который отображает сообщения во всех сериях.

Самый простой способ добиться этого – создать шаблон страницы , создать страницу на панели управления с помощью series slug и назначить шаблон, а затем в файле шаблона создать сообщение, которое отображает сообщения, используя пользовательский WP_Query с соответствующим аргументом таксономии_query.

Если каждое сообщение принадлежит только одной серии, легко написать пользовательскую функцию, которая возвращает многомерный массив сообщений, где каждый элемент первого уровня представляет собой массив с двумя элементами: один ключ с ключом содержит термин термин термин, второй ключ " сообщения " содержат все сообщения для этой серии :

В functions.php добавьте что-то вроде:

 function get_series_posts() { $terms = get_terms('series', array('fields'=>'ids') ); $tax_query = array( 'taxonomy' => 'series', 'field' => 'id', 'terms' => $terms, ); $args = array('posts_per_page' => -1, 'tax_query' => array($tax_query)); $q = new WP_Query( $args ); $posts_ordered = array(); $done = 0; while ( $q->have_posts() ) : $q->the_post(); global $post; // all the post series array $series = get_the_terms($post->ID, 'series'); // the last series (if there is only one series per post no matter the order) $serie = array_shift( $series ); if ( ! isset($posts_ordered[$serie->slug]) ) $posts_ordered[$serie->slug] = array('term' => $serie); if ( ! isset($posts_ordered[$serie->slug]['posts']) ) $posts_ordered[$serie->slug]['posts'] = array(); $posts_ordered[$serie->slug]['posts'][] = $post; endwhile; wp_reset_postdata(); return $posts_ordered; } 

После этого в шаблоне страницы вы можете:

 $posts = get_series_posts(); if ( ! empty($posts) ) { echo '<ul>'; // open series list foreach ( $posts as $loop_data) { echo '<li>'; // open series list item echo '<a href="' . get_term_link($loop_data['term'], 'series') . '">'; echo $loop_data['term']->name . '</a>'; echo '<ul>'; // open post list global $post; foreach ( $loop_data['posts'] as $post) { // loop throug posts of a series setup_postdata($post); printf('<li><a href="%s">%s</a></li>', get_permalink(), get_the_title() ); } echo '</ul>'; // close post list; wp_reset_postdata(); echo '</li>'; // close series list item } echo '</ul>'; // close series list }