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


15

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

Кто-нибудь знает способ показать пользовательские таксономии в порядке их ввода на экране редактирования?

Рассматриваемый URL-адрес: http://granadatheater.com/

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

Так что, если ввести его Artist1, Artist3, Artist2, это то, как оно должно отображаться на веб-сайте.


Вы имеете в виду ввод заказа по почте?
hakre

Может быть, заказ по идентификатору?
Bainternet

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

Ответы:


0

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

Параметры по умолчанию «порядок» (восходящий или нисходящий)

  • Имя удостоверения личности
  • По умолчанию
  • слизень
  • подсчитывать
  • term_group

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

-

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


8

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

Добавьте этот код в 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;  //fixed missing semicolon
    // the following relates to tags, but you can add more lines like this for any taxonomy
    $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 )


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

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

1
@BiranitGoren простите меня за возобновление этой темы, но центральная проблема во всех ответах - то, что term_orderне поддерживается изначально. Итак, мне интересно, в вашем примере кода, где term_orderопределяется, чтобы вы могли сортировать по нему?
GigiSan

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

2

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

// Get Main Taxonomy for use in template file
$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 // test for description before unleashing a div 
if ( !empty( $term->description ) ): 
  echo '<div class="description">';
  echo $term->description;
  echo '</div>;
endif; ?>

// Now get children terms, using get_term & 'child_of' get's us alphabetical order
$termchildren = get_terms( $termTaxonomy, array(
  'child_of'     => $term->term_id,
  'hierarchical' => 0,
  'fields'       => 'ids',
  'hide_empty'   => 0
) );

// Make an alphabetical linked list
echo '<ul>';
foreach ($termchildren as $child) {
  $term = get_term_by( 'id', $child, $termTaxonomy );

  // Modify this echo to customize the output for each child term
  echo '<li><a href="' . get_term_link( $term->name, $termTaxonomy ) . '" alt="' .$term->description. '">' . $term->name . '</a></li>';
}
echo '</ul>';

2

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


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]; }
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.