Ordem de alteração da lista de taxonomia personalizada

15

Por padrão, o WordPress ordena taxonomias personalizadas (como tags neste caso) por ordem alfabética e não pela ordem em que foram inseridas na caixa de tags.

Alguém conhece uma maneira de mostrar as taxonomias personalizadas na ordem em que foram inseridas na tela de pós-edição?

O URL em questão é: http://granadatheater.com/

Os artistas do GGW (Goes Good With) estão atualmente em ordem alfabética e desejam que seja alterado para que sejam pedidos da mesma maneira que foram inseridos.

Portanto, se você digitar Artist1, Artist3, Artist2, é assim que deve aparecer no frontend do site.

curtismchale
fonte
Você quer dizer inserir ordem em uma base por postagem?
hakre
Talvez pedir por id?
precisa saber é o seguinte
O melhor que posso dizer é que eles são exibidos em ordem alfabética, então provavelmente não estou entendendo a pergunta. Onde exatamente você quer isso? Você pode fornecer uma captura de tela e um URL de exemplo onde encontrará o que deseja alterar?
precisa saber é o seguinte

Respostas:

0

Isso não é possível "pronto para uso" ...

As opções padrão 'orderby' são (crescente ou decrescente)

  • Nome do ID
  • Padrão
  • lesma
  • contagem
  • term_group

Tudo isso está detalhado no codex.

-

Dito isto, existem algumas senhoras e senhores inteligentes aqui. Se alguém puder resolvê-lo, um desses caras pode ter certeza!

George Wiscombe
fonte
8

Depois de bastante pesquisa e testes extensivos, encontrei a resposta.

Adicione este código às funções do seu tema.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');

(Crédito: isso é baseado - mas aprimorado - http://wordpress.kdari.net/2011/07/listing-tags-in-custom-order.html )

Biranit Goren
fonte
Isso funciona mesmo que o administrador limpe seu cache? Parece precário depender do cache para a ordem dos termos.
PBwebD
1
Se o administrador limpar seu cache, os novos termos desaparecerão de qualquer maneira, porque ainda não foram salvos. Estamos usando o código acima em muitos sites do Wordpress desde que publiquei isso e nunca tive um problema.
Biranit Goren
1
O @BiranitGoren me perdoa por retomar este tópico, mas a preocupação central em todas as respostas é que term_ordernão há suporte nativo. Então, eu estou pensando, no seu exemplo de código, onde é term_orderdefinido para que você possa classificá-lo?
GigiSan
2
@GigiSan, na verdade, é suportado nativamente, mas simplesmente não utilizado. O Wordpress tem term_order em seu núcleo - mas não o utiliza por padrão. Portanto, você não precisa defini-lo, ele já está definido. (Veja isso em trac: core.trac.wordpress.org/ticket/9547 )
Biranit Goren
2

Estou lutando para encontrar a resposta para os termos filhos em ordem alfabética de uma taxonomia personalizada ... Não recomendo alterar os arquivos principais do WP, então aqui está o que adicionei ao meu arquivo taxonomy.php para listar descrições de taxonomia personalizadas, com links termos filhos em ordem alfabética. Modifique para atender às suas necessidades, espero que isso ajude alguém por aí.

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

Eu sei que isso é meio trapaceiro, mas você sempre pode usar o plug-in de pedido personalizado simples . É gratuito e permite classificar taxonomias além de tipos de postagem.

Nate
fonte
0

Depois, para exibir na página da web a ordem correta:

colocar "orderby" => "term_group" no seu wp_get_post_terms

Exemplo:

"poste" é meu nome de taxonomia personalizado, coloque o seu

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