私は 'label'というカスタムUSER分類法に 'sort_order'というカスタムフィールドもあります - ラベル分類法を持つユーザのリストを返し、次にこのリストをsort_orderフィールドでソートしようとしています。
これまでのところ私は.....
<?php
$users = get_users(
array(
'meta_key' => 'sort_order',
'fields' => 'all_with_meta'
)
);
function wpse98580_sort_order( $a, $b )
{
if ( $a->sort_order === $b->sort_order ) {
return 0;
} elseif ( $a->sort_order > $b->sort_order ) {
return -1;
}
return 1;
}
usort( $users, 'wpse98580_sort_order' );
/* Iterate over the sorted array */
foreach( $users as $user )
{
echo '<h4>' . $user_info-> user_firstname . ' ' . $user_info-> user_lastname . '</h4>';
}
?>
これはうまくいきません、 'sort_order'メタキーは実際には分類法のカスタムフィールドであるため、取得できないと考えています。通常、sort_orderにアクセスするには次のコードを使用します。
$product_terms = wp_get_object_terms($user->ID, 'label');
if(!empty($product_terms)){
if(!is_wp_error( $product_terms )){
foreach($product_terms as $term){
$t_ID = $term->term_id;
$label_custom_fields = get_option("taxonomy_term_$t_ID");
echo $label_custom_fields['sort_order'];
}
}
}
誰も手伝ってくれる?
これを使用すると、sort_orderカスタムフィールドの昇順で結果を取得できます。
$users = get_users(
array(
'meta_key'=> 'sort_order',
'orderby' => 'meta_value_num',
'order' => 'ASC'
)
);
foreach( $users as $user )
{
echo '<h4>' . $user_info-> user_firstname . ' ' . $user_info-> user_lastname . '</h4>';
}
get_users
はこれをサポートしていないことに気付きました。
残念ながら、ポスト関連コンパニオンのように、orderby
パラメーターの値としてmeta_value
またはmeta_value_num
は使用されません。
しかし、meta_key sort_order
セットの値を持つものだけを取得するように指定できます。
$users = get_users(
array(
'meta_key' => 'sort_order',
'fields' => 'all_with_meta'
)
);
get_users()
はユーザーオブジェクト( WP_User
クラスのインスタンス)の配列を返します。
[ - 。] これらのオブジェクトのうちの1つのvar_dump
はそれを明らかにしませんが 、ユーザーのメタデータはクラスの魔法のメソッドのおかげでプロパティとしてアクセス可能です。
そのため、テストされていませんが、次のようにしてユーザーを希望どおりに並べ替える必要があります。
function wpse98580_sort_order( $a, $b )
{
if ( $a->sort_order === $b->sort_order ) {
return 0;
} elseif ( $a->sort_order > $b->sort_order ) {
return -1;
}
return 1;
}
usort( $users, 'wpse98580_sort_order' );
/* Iterate over the sorted array */
参考として、 usort
を参照してください。
これを行うべき行動があります。あまり文書化されていないようですが、 pre_user_query
はsource に現れます。
function alter_user_search($qry) {
global $wpdb;
$key = $qry->get('meta_key');
if (isset($key)) {
// $qry->query_orderby = preg_replace('/ORDER BY (.*) (ASC|DESC)/',"ORDER BY {$wpdb->usermeta}.meta_value ".$qry->get('order') ,$qry->query_orderby);
$qry->query_orderby = preg_replace('/ORDER BY (.*) (ASC|DESC)/',"ORDER BY CAST({$wpdb->usermeta}.meta_value AS UNSIGNED) ".$qry->get('order') ,$qry->query_orderby);
}
// var_dump($qry); die;
}
add_action( 'pre_user_query', 'alter_user_search' );
キーが設定されていると、メタキーに対するクエリがソートされます。これはおそらく積極的すぎる可能性がありますが、条件を追加することもできます。これは私のデータベースの値で最低限テストされていますが、うまくいくようです(かなり確実)。そのクエリには2つのバージョンがあります。二つ目はあなたのmeta_value
をCAST
にINTEGER
するので、あなたは適当な数値ソートを得るべきです。
ほとんどテストされていません。おそらくバグがあります。警告警告。返金なし。