Ubah urutan Daftar Taksonomi Kustom

15

Secara default, WordPress memesan taksonomi khusus (seperti tag dalam kasus ini) dengan urutan alfabet, bukan dengan urutan yang dimasukkan dalam kotak tag.

Adakah yang mengetahui cara untuk menampilkan taksonomi khusus sesuai urutan yang dimasukkan di layar edit posting?

Url yang dimaksud adalah: http://granadatheater.com/

Seniman GGW (Goes Good With) saat ini berada dalam urutan abjad dan mereka ingin itu diubah sehingga mereka dipesan dengan cara yang sama seperti saat mereka masuk.

Jadi jika memasukkannya Artist1, Artist3, Artist2 begitulah seharusnya muncul di frontend situs.

curtismchale
sumber
Maksud Anda memasukkan pesanan pada basis per posting?
hakre
Mungkin memesan melalui id?
Bainternet
Terbaik yang bisa saya katakan mereka ditampilkan dalam urutan abjad, jadi saya mungkin tidak mengerti pertanyaannya. Di mana tepatnya Anda menginginkan ini? Bisakah Anda memberikan tangkapan layar dan contoh URL tempat Anda akan menemukan yang ingin diubah?
MikeSchinkel

Jawaban:

0

Ini tidak mungkin "di luar kotak" ...

Opsi 'orderby' default adalah (naik atau turun)

  • Nama ID
  • Default
  • siput
  • menghitung
  • term_group

Ini semua dirinci dalam kodeks.

-

Yang mengatakan ada beberapa wanita & pria pintar di sini. Kalau ada yang bisa menyelesaikannya, salah satu dari ini bisa saya yakin!

George Wiscombe
sumber
8

Setelah melakukan sedikit pencarian dan tes ekstensif, saya menemukan jawabannya.

Tambahkan kode ini ke functions.php tema Anda:

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

(Kredit: ini didasarkan pada - tetapi ditingkatkan - http://wordpress.kdari.net/2011/07/listing-tags-in-custom-order.html )

Biranit Goren
sumber
Apakah ini berfungsi bahkan jika admin membersihkan cache mereka? Tampaknya genting tergantung pada cache untuk pesanan jangka.
PBWebD
1
Jika admin menghapus cache mereka, maka syarat baru akan hilang karena mereka belum disimpan. Kami telah menggunakan kode di atas pada banyak situs Wordpress sejak saya memposting ini dan saya tidak pernah mengalami masalah.
Biranit Goren
1
@BiranitGoren maafkan saya untuk melanjutkan topik ini, tetapi perhatian utama pada semua jawaban adalah yang term_ordertidak didukung secara asli. Jadi saya bertanya-tanya, dalam contoh kode Anda, di mana term_orderdidefinisikan sehingga Anda dapat mengurutkannya?
GigiSan
2
@ GigiSan sebenarnya didukung secara asli, tetapi tidak digunakan. Wordpress memiliki term_order pada intinya - tetapi tidak menggunakannya secara default. Oleh karena itu, Anda tidak perlu mendefinisikannya, itu sudah ditentukan. (Lihat ini di trac: core.trac.wordpress.org/ticket/9547 )
Biranit Goren
2

Saya telah berjuang untuk menemukan jawaban untuk istilah anak alfabet dari taksonomi khusus ... Saya tidak akan merekomendasikan mengubah file WP inti, jadi inilah yang saya tambahkan ke file taxonomy.php saya untuk mencantumkan deskripsi taksonomi kustom, dengan tautan untuk istilah anak dalam urutan abjad. Ubah sesuai kebutuhan Anda, saya harap ini membantu seseorang di luar sana.

// 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
sumber
2

Saya tahu ini curang, tetapi Anda selalu bisa menggunakan plugin Simple Custom Post Order . Ini gratis, dan memungkinkan Anda untuk menyortir Taksonomi selain Jenis Posting.

Nate
sumber
0

Dan setelah ditampilkan di halaman web, tatanannya bagus:

untuk meletakkan "orderby" => "term_group" di wp_get_post_terms Anda

Contoh:

"poste" adalah nama taksonomi kustom saya, taruh milik Anda

$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
sumber