コンテキスト
次のコードは、カスタム分類法 "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>';
}
?>
menu_order
の代わりにterm_order
を試してください。
Codex のドキュメントによると、wp_get_object_terms
は以下をサポートします。
何年も経って、
このコードを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テーブルに値を格納します。あなたが同時に他のメタを照会したいのであれば明らかにそれは適応される必要があるでしょう。
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);