web-dev-qa-db-ja.com

アルファベット順の降順のget_the_terms

次のようにして、投稿が割り当てられている用語の一覧を表示しています。

<?php 
$terms = get_the_terms( $post->ID , 'winetype' ); 
$sep = ', '; 
foreach ( $terms as $term ) { 
echo $term->name; 
echo $sep; 
} ?>

しかし、出力をアルファベットの降順(Z-A)にしたいのですが、これについてorder => DESCを使用する方法が見つかりません。何か提案がありますか?

進んでくれてありがとう。

4
Adrian

あなたはこれを試すことができます:

// Get posts terms
$terms = wp_get_post_terms( $post->ID, 'winetype', array( 'order' => 'DESC') );

$sep = ', '; 
foreach ( $terms as $term ) { 
    echo $term->name; 
    echo $sep; 
} 
6
Robbert

代わりにwp_get_post_terms()を使用してください。

<?php
$names = wp_get_post_terms(
    $post->ID,
    'winetype',
    array(
        'orderby' => 'name',
        'order' => 'DESC',
        'fields' => 'names'
    );

echo implode(', ', $names); // to avoid trailing separator

更新 @Pieterのおかげで/グーセンのコメント。

$terms = get_the_terms( $post->ID , 'winetype' ); 

if($terms) { // check the variable is not empty

    // compare terms
    function cmp($a, $b)
    {
        return strcmp($b->name, $a->name); // in reverse order to get DESC
    }

    // sort terms using comparison function
    usort($terms, 'cmp');

    // get names from objects
    function my_function($z)
    {
        return $z->name;
    }

    // map names array using my_function()
    $term_names = array_map('my_function', $terms);

    // define separator
    $separator = ', ';

    // get string by imploding the array using the separator 
    $term_names = implode($separator, $term_names);

    echo $term_names; // OR return

}
2
Max Yudin