Изменение порядка списка пользовательских таксономий
По умолчанию WordPress упорядочивает пользовательские таксономии (в данном случае метки) в алфавитном порядке, а не в порядке их ввода в поле меток.
Знает ли кто-нибудь способ отображения пользовательских таксономий в том порядке, в котором они были введены на экране редактирования записи?
URL-адрес, о котором идет речь: http://granadatheater.com/
Артисты GGW (Goes Good With) в настоящее время отображаются в алфавитном порядке, и требуется изменить их порядок так, чтобы они отображались в том же порядке, в котором были введены.
То есть, если вводятся Artist1, Artist3, Artist2, то именно в таком порядке они должны отображаться на фронтенде сайта.

После долгих поисков и многочисленных тестов я нашел решение.
Добавьте этот код в файл 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)

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

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

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

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

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

Я долго искал решение для вывода дочерних терминов пользовательской таксономии в алфавитном порядке... Не рекомендую изменять файлы ядра 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>';

И чтобы правильно отобразить порядок на веб-странице, можно сделать следующее:
Добавить параметр "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]; }

Это невозможно "из коробки"...
Стандартные параметры 'orderby' включают (по возрастанию или убыванию):
- ID name
- Default
- slug
- count
- term_group
Все они подробно описаны в кодексе.
--
Тем не менее, здесь есть умные ребята и девчата. Если кто-то и сможет решить эту задачу, я уверен, это сделает кто-то из них!
