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.

Curtismchale
źródło
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!

George Wiscombe
źródło
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 )

Biranit Goren
źródło
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>';
Erik Rodne
źródło
2

Wiem, że to rodzaj oszustwa, ale zawsze możesz użyć wtyczki Simple Custom Post Order . Jest darmowy i pozwala sortować taksonomie oprócz rodzajów postów.

Nate
źródło
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]; }
Julie Chaumard
źródło