Изменение порядка списка пользовательских таксономий

21 янв. 2011 г., 18:36:26
Просмотры: 55.9K
Голосов: 18

По умолчанию WordPress упорядочивает пользовательские таксономии (в данном случае метки) в алфавитном порядке, а не в порядке их ввода в поле меток.

Знает ли кто-нибудь способ отображения пользовательских таксономий в том порядке, в котором они были введены на экране редактирования записи?

URL-адрес, о котором идет речь: http://granadatheater.com/

Артисты GGW (Goes Good With) в настоящее время отображаются в алфавитном порядке, и требуется изменить их порядок так, чтобы они отображались в том же порядке, в котором были введены.

То есть, если вводятся Artist1, Artist3, Artist2, то именно в таком порядке они должны отображаться на фронтенде сайта.

3
Комментарии

Вы имеете в виду задание порядка для каждой записи отдельно?

hakre hakre
21 янв. 2011 г. 19:49:57

Может, сортировать по id?

Bainternet Bainternet
22 янв. 2011 г. 00:53:20

Насколько я могу судить, они отображаются в алфавитном порядке, поэтому, возможно, я не совсем понимаю вопрос. Где именно вы хотите это изменить? Можете ли вы предоставить скриншот и пример URL, где можно увидеть то, что вы хотите поменять?

MikeSchinkel MikeSchinkel
22 янв. 2011 г. 09:56:42
Все ответы на вопрос 5
4
10

После долгих поисков и многочисленных тестов я нашел решение.

Добавьте этот код в файл functions.php вашей темы:

function set_the_terms_in_order ( $terms, $id, $taxonomy ) {
    $terms = wp_cache_get( $id, "{$taxonomy}_relationships_sorted" );
    if ( false === $terms ) {
        $terms = wp_get_object_terms( $id, $taxonomy, array( 'orderby' => 'term_order' ) );
        wp_cache_add($id, $terms, $taxonomy . '_relationships_sorted');
    }
    return $terms;
}
add_filter( 'get_the_terms', 'set_the_terms_in_order' , 10, 4 );

function do_the_terms_in_order () {
    global $wp_taxonomies;  //исправлена отсутствующая точка с запятой
    // следующее относится к меткам, но вы можете добавить аналогичные строки для любой таксономии
    $wp_taxonomies['post_tag']->sort = true;
    $wp_taxonomies['post_tag']->args = array( 'orderby' => 'term_order' );    
}
add_action( 'init', 'do_the_terms_in_order');

(Авторство: основано на - но улучшено - http://wordpress.kdari.net/2011/07/listing-tags-in-custom-order.html)

21 февр. 2012 г. 14:21:39
Комментарии

Будет ли это работать, даже если администратор очистит кеш? Кажется ненадежным зависеть от кеша для порядка терминов.

PBwebD PBwebD
7 дек. 2016 г. 23:00:16

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

Biranit Goren Biranit Goren
8 дек. 2016 г. 00:10:03

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

GigiSan GigiSan
11 июн. 2019 г. 12:38:45

@GigiSan это на самом деле изначально поддерживается, но просто не используется. В WordPress есть term_order в его ядре, но по умолчанию он не задействован. Поэтому вам не нужно его определять, он уже определен. (Смотрите это в trac: https://core.trac.wordpress.org/ticket/9547)

Biranit Goren Biranit Goren
14 июл. 2019 г. 14:36:21
0

Я знаю, что это немного похоже на читерство, но вы всегда можете использовать плагин Simple Custom Post Order. Он бесплатный и позволяет сортировать не только типы записей, но и таксономии.

11 сент. 2017 г. 18:50:46
0

Я долго искал решение для вывода дочерних терминов пользовательской таксономии в алфавитном порядке... Не рекомендую изменять файлы ядра WordPress, поэтому вот что я добавил в свой файл taxonomy.php для вывода описаний пользовательской таксономии со ссылками на дочерние термины в алфавитном порядке. Модифицируйте под свои нужды, надеюсь, это кому-то поможет.

// Получаем основную таксономию для использования в файле шаблона
$term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) );
$termTaxonomy = $term->taxonomy;

<h1><?php echo apply_filters( 'the_title', $term->name ); ?></h1>

<?php // Проверяем наличие описания перед выводом div
if ( !empty( $term->description ) ): 
  echo '<div class="description">';
  echo $term->description;
  echo '</div>;
endif; ?>

// Получаем дочерние термины, используя get_term с 'child_of' для алфавитного порядка
$termchildren = get_terms( $termTaxonomy, array(
  'child_of'     => $term->term_id,
  'hierarchical' => 0,
  'fields'       => 'ids',
  'hide_empty'   => 0
) );

// Создаем алфавитный список со ссылками
echo '<ul>';
foreach ($termchildren as $child) {
  $term = get_term_by( 'id', $child, $termTaxonomy );

  // Модифицируйте этот вывод для настройки отображения каждого дочернего термина
  echo '<li><a href="' . get_term_link( $term->name, $termTaxonomy ) . '" alt="' .$term->description. '">' . $term->name . '</a></li>';
}
echo '</ul>';
31 июл. 2012 г. 22:44:14
0

И чтобы правильно отобразить порядок на веб-странице, можно сделать следующее:

Добавить параметр "orderby" => "term_group" в функцию wp_get_post_terms.

Пример:

"poste" — это название моей пользовательской таксономии, замените на ваше

$poste =  wp_get_post_terms($post->ID, 'poste', array("fields" => "names", "orderby" => "term_group"));
        if(!empty($poste[0])){ echo $poste[0];}
        if(!empty($poste[1])){
          echo " - ", $poste[1]; }
12 дек. 2019 г. 12:02:45
0

Это невозможно "из коробки"...

Стандартные параметры 'orderby' включают (по возрастанию или убыванию):

  • ID name
  • Default
  • slug
  • count
  • term_group

Все они подробно описаны в кодексе.

--

Тем не менее, здесь есть умные ребята и девчата. Если кто-то и сможет решить эту задачу, я уверен, это сделает кто-то из них!

27 янв. 2011 г. 02:25:04