Thay đổi thứ tự của Danh sách phân loại tùy chỉnh


15

Theo mặc định, WordPress đặt hàng các phân loại tùy chỉnh (dưới dạng thẻ trong trường hợp này) theo thứ tự bảng chữ cái không theo thứ tự chúng được nhập vào hộp thẻ.

Có ai biết một cách để hiển thị các nguyên tắc phân loại tùy chỉnh theo thứ tự chúng được nhập vào màn hình chỉnh sửa bài không?

Url trong câu hỏi là: http://granadatheater.com/

Các nghệ sĩ GGW (Goes Good With) hiện đang theo thứ tự bảng chữ cái và họ muốn nó thay đổi để họ được sắp xếp giống như cách họ đã nhập.

Vì vậy, nếu nhập vào Artist1, Artist3, Artist2, đó là cách nó sẽ hiển thị trên giao diện của trang web.


Bạn có nghĩa là nhập đơn hàng trên cơ sở mỗi bài?
hakre

Có thể đặt hàng theo id?
BaiNET

Tốt nhất tôi có thể nói rằng chúng được hiển thị theo thứ tự chữ cái, vì vậy tôi có thể không hiểu câu hỏi. Chính xác thì bạn muốn cái này ở đâu? Bạn có thể đưa ra một ảnh chụp màn hình và một URL ví dụ nơi bạn sẽ tìm thấy những gì bạn muốn thay đổi không?
MikeSchinkel

Câu trả lời:


0

Điều này không thể "ra khỏi hộp" ...

Các tùy chọn 'orderby' mặc định là (tăng dần hoặc giảm dần)

  • Tên ID
  • Mặc định
  • sên
  • đếm
  • thuật ngữ

Đây là tất cả chi tiết trong codex.

-

Điều đó nói rằng có một số phụ nữ thông minh & gents ở đây. Nếu bất cứ ai có thể giải quyết nó, một trong những người này tôi có thể chắc chắn!


8

Sau khá nhiều tìm kiếm và thử nghiệm rộng rãi, tôi đã tìm thấy câu trả lời.

Thêm mã này vào chức năng của chủ đề của bạn.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');

(Tín dụng: điều này dựa trên - nhưng được cải thiện - http://wordpress.kdari.net/2011/07/listing-tags-in-custom-order.html )


Điều này có hoạt động ngay cả khi quản trị viên xóa bộ nhớ cache của họ? Có vẻ bấp bênh phụ thuộc vào bộ đệm cho thứ tự hạn.
PBwebD

1
Nếu quản trị viên xóa bộ nhớ cache của họ, thì các điều khoản mới sẽ không còn nữa vì chúng chưa được lưu. Chúng tôi đã sử dụng đoạn mã trên trên nhiều trang Wordpress kể từ khi tôi đăng bài này và tôi chưa bao giờ gặp phải vấn đề gì.
Biranit Goren

1
@BiranitGoren tha thứ cho tôi vì đã tiếp tục chủ đề này, nhưng mối quan tâm chính trong tất cả các câu trả lời term_orderlà không được hỗ trợ. Vì vậy, tôi tự hỏi, trong ví dụ mã của bạn, nơi được term_orderxác định để bạn có thể sắp xếp trên đó?
GigiSan

2
@GigiSan nó thực sự được hỗ trợ, nhưng đơn giản là không được sử dụng. Wordpress có term_order trong lõi của nó - nhưng không sử dụng nó theo mặc định. Do đó, bạn không cần xác định nó, nó đã được xác định. (Xem phần này trên trac: core.trac.wordpress.org/ticket/9547 )
Biranit Goren

2

Tôi đã vật lộn để tìm câu trả lời cho các thuật ngữ con theo thứ tự chữ cái của phân loại tùy chỉnh ... Tôi không khuyên bạn nên thay đổi các tệp WP cốt lõi, vì vậy đây là những gì tôi đã thêm vào tệp taxonomy.php để liệt kê các mô tả phân loại tùy chỉnh, với các liên kết để các điều khoản con theo thứ tự chữ cái. Sửa đổi cho phù hợp với nhu cầu của bạn, tôi hy vọng điều này sẽ giúp được ai đó ngoài kia.

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

Và sau khi hiển thị trên trang web, thứ tự tốt có thể là:

để đặt "orderby" => "term_group" trong wp_get_post_terms của bạn

Thí dụ :

"poste" là tên phân loại tùy chỉnh của tôi, đặt tên của bạn

$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]; }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.