Упорядочивание Списка Сообщений По Терминам Таксономии?


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

Вот что у меня есть до сих пор:

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

В конце концов, это выглядит так этот: enter image description here

Цель:

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

В частности, я хотел бы заказать (альфа) Режиссера, студию и эпизоды, потому что я знаю, что это либо строки, либо цифры.

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

Сортировка по жанрам - это совершенно другой вопрос, которым я не собираюсь заниматься из-за множества терминов.

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

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

<div class="content-container">
<a href="?sort=titleup">Sort By Title A-Z</a>
<a href="?sort=titledown">Sort By Title Z-A</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().
?>

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

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

Щелкнув термины таксономии, читатель попадет на страницу, на которой перечислены все шоу, связанные с этим термином. например, Все шоу, которые были сделаны этой студией, все шоу с 12 эпизодами, все шоу в жанре "Экшн".

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

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

Тип настраиваемой записи и структура таксономий

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

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

Author: Community, 2015-11-25

2 answers

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

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

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

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

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

 4
Author: Rarst, 2015-11-30 18:39:45

В то время как Ответ Рарста правильный, полезный и действительно дает вам возможность улучшить свое понимание предмета, самый короткий практический ответ на заказ любого 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 для сортировки. Ваш сайт будет намного быстрее, даже с большим количеством записей.

 2
Author: tao, 2017-04-13 12:37:34