最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

terms - Change order of Custom Taxonomy List

programmeradmin5浏览0评论

By default WordPress orders custom taxonomies (as tags in this case) by alphabetical order not by the order they were entered in the tag box.

Is anyone aware of a way to show the custom taxonomies in the order they were entered in the post edit screen?

The url in question is: /

The GGW (Goes Good With) artists are currently in alphabetical order and they want it changed so that they are ordered the same way they were entered.

So if the enter it Artist1, Artist3, Artist2 that's how it should show up on the frontend of the site.

By default WordPress orders custom taxonomies (as tags in this case) by alphabetical order not by the order they were entered in the tag box.

Is anyone aware of a way to show the custom taxonomies in the order they were entered in the post edit screen?

The url in question is: http://granadatheater/

The GGW (Goes Good With) artists are currently in alphabetical order and they want it changed so that they are ordered the same way they were entered.

So if the enter it Artist1, Artist3, Artist2 that's how it should show up on the frontend of the site.

Share Improve this question edited Feb 4, 2011 at 16:56 curtismchale asked Jan 21, 2011 at 16:36 curtismchalecurtismchale 2,5977 gold badges25 silver badges30 bronze badges 3
  • You mean entering order on a per post base? – hakre Commented Jan 21, 2011 at 17:49
  • Maybe order by id? – Bainternet Commented Jan 21, 2011 at 22:53
  • Best I can tell they are displayed in alphabetic order, so I'm probably not understanding the question. Where exactly do you want this? Can you give a screenshot and an example URL where you'll find what you want changed? – MikeSchinkel Commented Jan 22, 2011 at 7:56
Add a comment  | 

5 Answers 5

Reset to default 0

This isn't possible "out of the box"...

The default 'orderby' options are (ascending or descending)

  • ID name
  • Default
  • slug
  • count
  • term_group

These are all detailed in the codex.

--

That said there are some clever ladies & gents here. If anyone can solve it, one of these guys can i'm sure!

After quite a bit of searching and extensive tests, I found the answer.

Add this code to your theme's functions.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');

(Credit: this is based on - but improved - http://wordpress.kdari/2011/07/listing-tags-in-custom-order.html)

I know this is kind of cheating, but you could always use the Simple Custom Post Order plugin. It's free, and it allows you to sort Taxonomies in addition to Post Types.

I've been struggling to find the answer to alphabetical child terms of a custom taxonomy ... I wouldn't recommend altering core WP files, so here's what I added to my taxonomy.php file to list out custom taxonomy descriptions, with links to child terms in alphabetical order. Modify to suit your needs, I hope this helps someone out there.

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

And after to display in web page the good order it could be :

to put "orderby" => "term_group" in your wp_get_post_terms

Example :

"poste" is my custom taxonomy name, put yours

$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]; }
发布评论

评论列表(0)

  1. 暂无评论