Reihenfolge der benutzerdefinierten Taxonomieliste ändern


15

Standardmäßig ordnet WordPress benutzerdefinierte Taxonomien (in diesem Fall als Tags) in alphabetischer Reihenfolge an, nicht in der Reihenfolge, in der sie in das Tag-Feld eingegeben wurden.

Kennt jemand eine Möglichkeit, die benutzerdefinierten Taxonomien in der Reihenfolge anzuzeigen, in der sie im Bildschirm für die Nachbearbeitung eingegeben wurden?

Die fragliche URL lautet: http://granadatheater.com/

Die GGW-Künstler (Goes Good With) sind derzeit in alphabetischer Reihenfolge und möchten, dass die Reihenfolge so geändert wird, wie sie eingegeben wurden.

Wenn Sie also Artist1, Artist3, Artist2 eingeben, sollte dies im Frontend der Site angezeigt werden.


Sie meinen, die Bestellung per Post zu erfassen?
Hakre

Vielleicht nach ID bestellen?
Bainternet

Soweit ich weiß, werden sie in alphabetischer Reihenfolge angezeigt, sodass ich die Frage wahrscheinlich nicht verstehe. Wo genau willst du das? Können Sie einen Screenshot und eine Beispiel-URL angeben, unter der Sie die gewünschten Änderungen finden?
MikeSchinkel

Antworten:


0

Das ist nicht "out of the box" möglich ...

Die Standardoptionen für 'orderby' sind (aufsteigend oder absteigend).

  • ID Name
  • Standard
  • Schnecke
  • Anzahl
  • term_group

Diese sind alle im Kodex aufgeführt.

-

Das heißt, es gibt einige kluge Damen und Herren hier. Wenn jemand es lösen kann, kann einer dieser Jungs sicher sein!


8

Nach einigem Suchen und ausgiebigen Tests fand ich die Antwort.

Füge diesen Code in die functions.php deines Themas ein:

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

(Gutschrift: Dies basiert auf - aber verbessert - http://wordpress.kdari.net/2011/07/listing-tags-in-custom-order.html )


Funktioniert dies auch, wenn der Administrator den Cache leert? Scheint prekär, um die Laufzeitreihenfolge vom Cache abhängig zu machen.
PBwebD

1
Wenn der Administrator den Cache leert, gehen die neuen Begriffe trotzdem verloren, da sie noch nicht gespeichert wurden. Wir haben den obigen Code auf vielen Wordpress-Sites verwendet, seit ich dies gepostet habe und ich bin nie auf ein Problem gestoßen.
Biranit Goren

1
@BiranitGoren entschuldigen Sie, dass ich dieses Thema wieder aufgenommen habe, aber die zentrale Sorge in allen Antworten ist, dass term_orderes nicht von Haus aus unterstützt wird. Ich frage mich also, wo in Ihrem Codebeispiel term_orderdefiniert ist , damit Sie danach sortieren können?
GigiSan

2
@GigiSan wird zwar nativ unterstützt, aber einfach nicht genutzt. Wordpress hat term_order im Kern - verwendet es jedoch nicht standardmäßig. Daher müssen Sie es nicht definieren, es ist bereits definiert. (Siehe dies auf trac: core.trac.wordpress.org/ticket/9547 )
Biranit Goren

2

Ich habe Probleme damit, die Antwort auf alphabetische untergeordnete Begriffe einer benutzerdefinierten Taxonomie zu finden ... Ich würde nicht empfehlen, die WP-Kerndateien zu ändern. Deshalb habe ich meiner taxonomy.php-Datei die folgenden Elemente hinzugefügt, um benutzerdefinierte Taxonomiebeschreibungen mit Links aufzulisten zu untergeordneten Begriffen in alphabetischer Reihenfolge. Passen Sie diese an Ihre Bedürfnisse an. Ich hoffe, dies hilft jemandem da draußen.

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

Und nachdem in der Webseite die gute Reihenfolge angezeigt wurde, könnte es sein:

um "orderby" => "term_group" in deine wp_get_post_terms zu setzen

Beispiel:

"poste" ist mein benutzerdefinierter Taxonomiename

$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]; }
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.