web-dev-qa-db-ja.com

Term_orderで条件を並べる

コンテキスト

  • 投稿の種類: リソース
  • 分類法: メディアタイプ、 用語: オーディオ
  • 分類法: シリーズ

次のコードは、カスタム分類法 "Series"の一意のリストを表示します。

リストをterm_order順に並べたいのですが、うまくいきません。助言がありますか?

site 。現在はID順になっています

    <?php
                $post_data = array();

                $my_query = new WP_Query( array( 
                        'post_type' => 'resource',
                        'posts_per_page' => -1,
                        'media_type' => 'audio'

                    ) 
                );

                if ( $my_query->have_posts() ) {
                    while ( $my_query->have_posts() ) {
                        $my_query->the_post();
                        $post_data[] = get_the_ID();
                    }
                }

// Start with whatever ID you want to have from Media Type
                $audio = 16;

                // Get all those post_ids for that term
                $post_ids = get_objects_in_term( $audio, 'media_type', array('post_status' => 'publish') );

                // Then get the series terms for those post ids
                $terms = wp_get_object_terms( $post_data, 'series', array('fields' => 'ids', 'orderby' => 'menu_order' ) );
                $result = array_values( array_unique($terms) );

                ?>


            <?php
        $a = $result;

        foreach ($a as $v) {
        $term = get_term( $v, 'series' );
        $name = $term->name;
        $slug = $term->slug;
        echo '<div class="resource-item"><a href="'.get_term_link($slug, 'series').'" title="'.$name.'"><div class="play"></div><li>'.$name.'</li></a></div>';      
        } 

        ?>
1
izharbuen

menu_orderの代わりにterm_orderを試してください。

Codex のドキュメントによると、wp_get_object_termsは以下をサポートします。

  • カウント
  • ナメクジ
  • term_group
  • term_orderと
  • term_id
1
Jonathan Wold

何年も経って、

このコードをfunctions.phpに追加することができます。

function wpcf_filter_terms_order( $orderby, $query_vars, $taxonomies ) {
    return $query_vars['orderby'] == 'term_order' ? 'term_order' : $orderby;
}

add_filter( 'get_terms_orderby', 'wpcf_filter_terms_order', 10, 3 );

このコードはWPがあなたのtermクエリで orderby => term_order 引数を使うことを強制します。

これはグーグルでのトップ結果の1つであり、上記のどれも私のためには全くうまくいきませんでしたので、これは管理者の彼らの表示と一致する順序で用語を返すようでした...

 get_terms([
  'taxonomy'   => 'whatever_you_want',
  'meta_key'   => 'order',
  'orderby'    => 'meta_value_num'
]);

だれにも役立つ場合、WPは、管理メニュー内の表示位置を表すキー順で、termmetaテーブルに値を格納します。あなたが同時に他のメタを照会したいのであれば明らかにそれは適応される必要があるでしょう。

0
Ben White

wp_term_queryは、term_orderをorderbyパラメータの1つとして受け入れません。そのため、以下のスニペットをfunctions.phpに追加することで、このオプションをtermクエリ変数に強制的に追加する必要があります。

function wpcf_filter_terms_order( $orderby, $query_vars, $taxonomies ) {
    return $query_vars['orderby'] == 'term_order' ? 'term_order' : $orderby;
}

add_filter( 'get_terms_orderby', 'wpcf_filter_terms_order', 10, 3 );

あなたが以下のような何かを実行するならば上のスニペットを追加した後にそれはあなたにterm_orderによる用語順を与えます。

$terms = get_terms('category', array(
                    'orderby'  => 'term_order',
                    'order'    => 'ASC'
                ));

2番目のアプローチ、term_orderによる用語を世界規模で、そしてワードプレス全体で入手したい場合は、functions.phpに以下のスニペットを追加してください。

function uc_get_terms_orderby($orderby, $args){
        return 't.term_order';
}
add_filter('get_terms_orderby', 'uc_get_terms_orderby', 10, 2);
0
SkyRar