Змінити порядок користувацького списку таксономії


15

За замовчуванням WordPress замовляє власні таксономії (як теги в цьому випадку) за алфавітом, а не за порядком, який вони були введені у полі тегів.

Хтось знає про спосіб відображення користувальницьких таксономій у тому порядку, коли вони були введені на екрані редагування публікацій?

URL-адреса, про яку йдеться: http://granadatheater.com/

Виконавці GGW (Goes Good With) наразі в алфавітному порядку, і вони хочуть, щоб це було змінено, щоб вони були впорядковані так, як вони були введені.

Тож якщо введіть його Artist1, Artist3, Artist2 - це має відображатися на фронтальному майданчику сайту.


Ви маєте на увазі введення замовлення на базі за поштою?
хакре

Може замовити за ідентифікатором?
Бейнтернет

Я найкраще можу сказати, що вони відображаються в алфавітному порядку, тому я, мабуть, не розумію питання. Де саме ви цього хочете? Чи можете ви навести скріншот і приклад URL, де ви знайдете те, що хочете змінити?
MikeSchinkel

Відповіді:


0

Це неможливо "поза коробкою" ...

Параметри "замовлення за замовчуванням" за замовчуванням:

  • Ідентифікаційне ім’я
  • За замовчуванням
  • слимак
  • рахувати
  • термін_група

Вони детально описані в кодексі.

-

Це сказало, що тут є кілька розумних дам і панів. Якщо хтось може це вирішити, я можу впевнений, хтось із цих хлопців!


8

Після зовсім небагато пошуків та обширних тестів я знайшов відповідь.

Додайте цей код до функції теми.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 має у своїй основі термін_order, але не використовує його за замовчуванням. Тому визначати це не потрібно, це вже визначено. (Дивіться це на trac: core.trac.wordpress.org/ticket/9547 )
Biranit Goren

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.