web-dev-qa-db-ja.com

カスタム分類法とユーザー役割によるユーザーの照会

WP_User_Query()を使用してユーザーにクエリを作成しようとしていますshop_managerロールとshop-categoryというカスタム分類法および現在の分類法の用語IDでユーザーをフィルタ処理する必要があります。

私がこれまでに持っているコード:

<?php 

// WP_User_Query arguments
$args = array (
    'role'           => 'shop_manager',
    'order'          => 'DESC',
    'orderby'        => 'user_registered',
    'tax_query' => array(
    array('taxonomy' => 
    'shop-category', 
    'field' => 'id', 
    'terms' => $term_id ) ) 
);

// The User Query
$user_query = new WP_User_Query( $args );

// The User Loop
if ( ! empty( $user_query->results ) ) {
    foreach ( $user_query->results as $user ) {
        echo '<li><span>' . esc_html( $user->shop_name ) . '</span></li>';
    }
} else {
    // no users found
}

?>

タームIDを取得するには、このコードを使用していました

<?php $queried_object = get_queried_object();
$term_id = $queried_object->term_id; 

echo 'ID = '. $term_id;?>

これで、shop_managerロールを持つすべてのユーザーが表示されました。分類法がうまくいかないようです。

5
Erik

どうやら'tax_query'WP_User_Queryのコア実装はまだありません。

詳細はこちらのチケットをチェックしてください - > https://core.trac.wordpress.org/ticket/31383

それにもかかわらず、get_objects_in_termを使用する代替方法があります

$taxonomy = 'shop-category';
$users = get_objects_in_term( $term_id, $taxonomy );    

if(!empty($users)){

    // WP_User_Query arguments
    $args = array (
        'role'           => 'shop_manager',
        'order'          => 'DESC',
        'orderby'        => 'user_registered',
        'include'        => $users
    );

    // The User Query
    $user_query = new WP_User_Query( $args );

    // The User Loop
    if ( ! empty( $user_query->results ) ) {
        foreach ( $user_query->results as $user ) {
            echo '<li><span>' . esc_html( $user->shop_name ) . '</span></li>';
        }
    } 
    else {
        // no shop_manager found 
    }
}
else {
    // no users found
}
4
RafaSashi

tax_queryクラスにはWP_User_Queryパラメーターはありません。質問にuser-metaというタグを付けたので、特定のshop-category用語のID(または用語名自体さえも)をユーザーメタエントリとして格納することしかできません。

この場合、次のようなものが必要になります。

// The 'WP_User_Query' arguments array
$args = array(
    'role'          => 'shop_manager',
    'order'         => 'DESC',
    'orderby'       => 'user_registered',
    'meta_key'      => 'shop_name', // Is this the meta key you are using?
    'meta_value'    => 'the_term_name_or_term_id', // Based on however you store your meta data
    'meta_compare'  => '=',
);
2
webtoure