Заказ списка сообщений по таксономическим условиям?

Мне интересно, как написать код для заказа списка сообщений по их условиям из пользовательских таксономий?

Вот что я имею до сих пор :

  • У меня есть страница, в которой перечислены все сообщения в пользовательском типе сообщений на одной странице.
  • Под каждой почтой CPT я получил пользовательские таксономии для показа.
  • Я разрешил сортировку сообщений CPT по Alpha, ASC и DESC.

В конце концов, это выглядит так: введите описание изображения здесь

Цель :

Я хотел бы добавить пару ссылок с «Сортировать по заголовку», которые у меня уже есть.

В частности, я хотел бы заказать (альфа) Director, Studio и Episodes, потому что я знаю, что это либо строки, либо числовые.

Я также хотел бы заказать по сезону Премированные по году, но мне, возможно, придется изменить способ, которым я назвал эти термины (это, вероятно, просто выплюнет зиму 2011, зиму 2012 года, как это в настоящее время).

Сортировка по жанру – это еще одно дело, которое я не собираюсь решать из-за нескольких терминов.

Я не слишком уверен, как это сделать и могу использовать помощь.

Текущий код страницы :

<div class="content-container"> <a href="?sort=titleup">Sort By Title AZ</a> <a href="?sort=titledown">Sort By Title ZA</a> <hr> <?php $type = 'animes'; $args=array( 'post_type' => $type, 'post_status' => 'publish', 'posts_per_page' => -1, 'caller_get_posts'=> 1 ); if( isset( $_GET['sort'] ) && "titleup" == $_GET['sort'] ){ $args['orderby'] = 'title'; $args['order'] = 'ASC'; } if( isset( $_GET['sort'] ) && "titledown" == $_GET['sort'] ){ $args['orderby'] = 'title'; $args['order'] = 'DESC'; } $my_query = new WP_Query($args); if( $my_query->have_posts() ) { while ($my_query->have_posts()) : $my_query->the_post(); ?> <div class="anime-title"><a href="<?php the_permalink() ?>" title="<?php the_title_attribute(); ?> Page"><?php the_title(); ?></a></div> <br><span>Director:</span> <?php $taxonomy = 'director'; // get the term IDs assigned to post. $post_terms = wp_get_object_terms( $post->ID, $taxonomy, array( 'fields' => 'ids' ) ); // separator between links $separator = ', '; if ( !empty( $post_terms ) && !is_wp_error( $post_terms ) ) { $term_ids = implode( ',' , $post_terms ); $terms = wp_list_categories( 'title_li=&style=none&echo=0&taxonomy=' . $taxonomy . '&include=' . $term_ids ); $terms = rtrim( trim( str_replace( '<br />', $separator, $terms ) ), $separator ); // display post categories echo $terms; } ?> <br><span>Studio:</span> <?php $taxonomy = 'studio'; // get the term IDs assigned to post. $post_terms = wp_get_object_terms( $post->ID, $taxonomy, array( 'fields' => 'ids' ) ); // separator between links $separator = ', '; if ( !empty( $post_terms ) && !is_wp_error( $post_terms ) ) { $term_ids = implode( ',' , $post_terms ); $terms = wp_list_categories( 'title_li=&style=none&echo=0&taxonomy=' . $taxonomy . '&include=' . $term_ids ); $terms = rtrim( trim( str_replace( '<br />', $separator, $terms ) ), $separator ); // display post categories echo $terms; } ?> <br><span>Season Premiered:</span> <?php $taxonomy = 'season'; // get the term IDs assigned to post. $post_terms = wp_get_object_terms( $post->ID, $taxonomy, array( 'fields' => 'ids' ) ); // separator between links $separator = ', '; if ( !empty( $post_terms ) && !is_wp_error( $post_terms ) ) { $term_ids = implode( ',' , $post_terms ); $terms = wp_list_categories( 'title_li=&style=none&echo=0&taxonomy=' . $taxonomy . '&include=' . $term_ids ); $terms = rtrim( trim( str_replace( '<br />', $separator, $terms ) ), $separator ); // display post categories echo $terms; } ?> <br><span>Episodes:</span> <?php $taxonomy = 'episodes'; // get the term IDs assigned to post. $post_terms = wp_get_object_terms( $post->ID, $taxonomy, array( 'fields' => 'ids' ) ); // separator between links $separator = ', '; if ( !empty( $post_terms ) && !is_wp_error( $post_terms ) ) { $term_ids = implode( ',' , $post_terms ); $terms = wp_list_categories( 'title_li=&style=none&echo=0&taxonomy=' . $taxonomy . '&include=' . $term_ids ); $terms = rtrim( trim( str_replace( '<br />', $separator, $terms ) ), $separator ); // display post categories echo $terms; } ?> <br><span>Genres:</span> <?php $taxonomy = 'genre'; // get the term IDs assigned to post. $post_terms = wp_get_object_terms( $post->ID, $taxonomy, array( 'fields' => 'ids' ) ); // separator between links $separator = ', '; if ( !empty( $post_terms ) && !is_wp_error( $post_terms ) ) { $term_ids = implode( ',' , $post_terms ); $terms = wp_list_categories( 'title_li=&style=none&echo=0&taxonomy=' . $taxonomy . '&include=' . $term_ids ); $terms = rtrim( trim( str_replace( '<br />', $separator, $terms ) ), $separator ); // display post categories echo $terms; } ?> <hr> <?php endwhile; } wp_reset_query(); // Restore global post data stomped by the_post(). ?> 

Другая информация :

После нажатия на Title of the Show это приведет к тому, что читатель перейдет на другую страницу, на которой будет отображаться изображение шоу, пользовательские таксономии, перечисленные снова, и все другие сообщения, связанные с этим показом (связанные тегом как имя Show) , например, если есть сообщение «Обзор» или «Обсуждение» с тегом «Мальчики и девочки», оно появится на этой странице.

После нажатия на условия таксономии, читатель будет отправлен на страницу со списком всех шоу, относящихся к этому термину. например, все шоу, сделанные этой студией, все шоу с 12 эпизодами, все шоу под жанром «Действие».

Это может потенциально поставить под вопрос общую структуру того, как я это настрою. Я очень новичок в веб-разработке и WordPress, поэтому я сделал все возможное, основываясь на проведенных исследованиях.

У меня есть пара других сообщений без ответа Stack Exchange, в которых подробно рассматриваются вопросы и вопросы о структурировании этой части веб-сайта. Помощь там также оценена, или если вам нужно уточнить, что я пытаюсь сделать.

Структура персонализированного типа и таксономии

Создание сортируемой таблицы по таксономическим условиям

Большое вам спасибо за ваше время и помощь, оказанную мне до сих пор.

Solutions Collecting From Web of "Заказ списка сообщений по таксономическим условиям?"

Ядро WordPress (выраженное участвующими людьми в нескольких случаях) сильно препятствует сортировке по срокам. Он рассматривает термины как исключительно механизм группировки , без возможности упорядочения.

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

Разумеется, в практическом развитии люди должны сортировать по срокам в разных обстоятельствах. На практике это означает какой-то очень специальный SQL, чтобы это произошло.

Один из наиболее полезных примеров реализации, о котором я знаю, относится к сообщению блога Sortable Taxonomy Columns .

Чтобы это произошло, вам придется писать / адаптировать необходимый SQL, а затем включать его в свои запросы.

Хотя ответ Rarst правильный, полезный и действительно дает вам возможность улучшить ваше понимание предмета, самый короткий практический ответ на заказ любого WP_Query с помощью custom_post_meta :

 $args = array( 'meta_key' => 'name', //custom field name here 'orderby' => 'meta_value', 'order' => 'ASC') // the sort order // the rest of your arguments here... ); 

Если вам нужен пользовательский порядок сортировки, отличный от ASC или DESC , вам нужно создать пользовательский запрос .


ОБНОВЛЕНИЕ: Мой ответ не имеет никакого отношения к вопросу. Я просто пропустил это. Сожалею.

Я не буду удалять его, поскольку комментарии содержат полезную информацию для тех, кто еще не решил между использованием custom_post_meta или taxonomy для определенного атрибута. Сортировка по таксономии возможна, как указал Рарст, используя запрос Scribu (3-я, улучшенная версия). Но вы должны избегать этого, так как это скажется на скорости ваших запросов.

Используйте terms для группировки и meta для сортировки. Ваш сайт будет намного быстрее, даже с большим количеством записей.