Zmień kolejność niestandardowej listy taksonomii


15

Domyślnie WordPress porządkuje niestandardowe taksonomie (w tym przypadku jako tagi) według kolejności alfabetycznej, a nie według kolejności, w jakiej zostały wprowadzone w polu znaczników.

Czy ktoś wie, jak wyświetlić niestandardowe taksonomie w kolejności, w jakiej zostały wprowadzone na ekranie edycji postów?

Adres URL to: http://granadatheater.com/

Artyści GGW (Goes Good With) są obecnie w kolejności alfabetycznej i chcą, aby zmieniono je tak, aby zostali uporządkowani w taki sam sposób, w jaki zostali wpisani.

Więc jeśli wpisz Artysta1, Artysta3, Artysta2, tak powinien on pojawić się na froncie witryny.


Masz na myśli wprowadzanie zamówienia na podstawie posta?
— hakre 21.01.11

Może zamówienie według ID?
— Bainternet,

Najlepsze, co mogę powiedzieć, są wyświetlane w kolejności alfabetycznej, więc prawdopodobnie nie rozumiem pytania. Gdzie dokładnie tego chcesz? Czy możesz podać zrzut ekranu i przykładowy adres URL, pod którym znajdziesz to, co chcesz zmienić?
— MikeSchinkel

Odpowiedzi:


0

Nie jest to możliwe „od razu po wyjęciu z pudełka” ...

Domyślne opcje „sortuj według” to (rosnąco lub malejąco)

  • Nazwa identyfikacyjna
  • Domyślna
  • ślimak
  • liczyć
  • term_group

Wszystkie są wyszczególnione w kodeksie.

-

Powiedział, że są tu sprytne panie i panowie. Jeśli ktoś może to rozwiązać, jeden z tych facetów może być pewien!


8

Po długich poszukiwaniach i obszernych testach znalazłem odpowiedź.

Dodaj ten kod do funkcji motywu. 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');

(Kredyt: jest to oparte na - ale poprawione - http://wordpress.kdari.net/2011/07/listing-tags-in-custom-order.html )


Czy to działa, nawet jeśli administrator wyczyści pamięć podręczną? Wydaje się, że niepewne jest poleganie na pamięci podręcznej przy zamówieniach terminowych.
— PBwebD,

1
Jeśli administrator wyczyści pamięć podręczną, nowe warunki i tak znikną, ponieważ nie zostały jeszcze zapisane. Używamy powyższego kodu na wielu stronach Wordpress, odkąd go opublikowałem i nigdy nie napotkałem problemu.
— Biranit Goren,

1
@BiranitGoren wybacz mi wznowienie tego tematu, ale głównym problemem we wszystkich odpowiedziach jest to, że term_ordernie jest natywnie wspierane. Zastanawiam się więc, w twoim przykładzie kodu, gdzie jest term_orderzdefiniowany, abyś mógł go posortować?
— GigiSan

2
@GigiSan jest faktycznie obsługiwany natywnie, ale po prostu nieużywany. Wordpress ma rdzeń term_order - ale nie korzysta z niego domyślnie. Dlatego nie musisz go definiować, jest już zdefiniowany. (Zobacz to na trac: core.trac.wordpress.org/ticket/9547 )
— Biranit Goren

2

Próbowałem znaleźć odpowiedź na alfabetyczne warunki potomne niestandardowej taksonomii ... Nie zalecałbym zmiany podstawowych plików WP, więc oto, co dodałem do mojego pliku taksonomy.php, aby wyświetlić niestandardowe opisy taksonomii wraz z linkami terminy potomne w kolejności alfabetycznej. Zmodyfikuj odpowiednio do swoich potrzeb, mam nadzieję, że to pomoże komuś tam.

// 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>';


0

A potem, aby wyświetlić na stronie internetowej, może to być porządek:

umieścić „orderby” => „term_group” w swoich wp_get_post_terms

Przykład:

„poste” to moja niestandardowa nazwa taksonomiczna

$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]; }
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.