web-dev-qa-db-ja.com

WP_User_Queryにカスタムクエリフィルタを追加する方法

私はワードプレスですべてのユーザーのリストを作成しています。そのために私はmeta_queryと一緒にWP_User_Queryを使用しているので、フィルターされたユーザーのみを表示できます。 SELECTでカスタムクエリフィルタを追加したいところで動けなくなりました

p.distance_unit
             * DEGREES(ACOS(COS(RADIANS(p.latpoint))
             * COS(RADIANS(mt30.meta_value ))
             * COS(RADIANS(p.longpoint) - RADIANS(mt31.meta_value))
             + SIN(RADIANS(p.latpoint))
             * SIN(RADIANS(mt30.meta_value)))) AS distance

そしてカスタムJOIN

SELECT  '.$_REQUEST['user_lat'].'  AS latpoint,  '.$_REQUEST['user_long'].' AS longpoint,
            '.$_REQUEST['geo-radius'].'.0 AS radius,      111.045 AS distance_unit
) AS p ON 1=1

そしてカスタムWHERE条件

AND (mt30.meta_value
 BETWEEN p.latpoint  - (p.radius / p.distance_unit)
     AND p.latpoint  + (p.radius / p.distance_unit)
AND mt31.meta_value
 BETWEEN p.longpoint - (p.radius / (p.distance_unit * COS(RADIANS(p.latpoint))))
     AND p.longpoint + (p.radius / (p.distance_unit * COS(RADIANS(p.latpoint)))))

そして慣習的な節

having distance < $_REQUEST['geo-radius']

POSTS用のクエリフィルタを追加する方法はわかっていますが、USERS用のクエリフィルタを追加することはできません。

私または任意の参照URLを案内してください。

ありがとう

1
avinashphp

WordPressの pre_user_query アクションフックを使用すると、WP_User_Queryオブジェクト内のSQLステートメントをデータベースに対して実行する前に変更できます。これはフィルタではなくアクションであるため、渡された$user_queryを返す必要はありません。

add_action( 'pre_user_query', 'add_my_custom_queries' );

function add_my_custom_queries( $user_query ) {

   $user_query->query_fields .= ', my_custom_field ';  // additional fields 
   $user_query->query_from .= ' INNER JOIN my_table '; // additional joins here
   $user_query->query_where .= ' AND field='value' '; // additional where clauses
   $user_query->query_orderby .= ' ORDER BY my_custom_field '; // additional sorting
   $user_query->query_limit .= ''; // if you need to adjust paging

}
4
Pete Nelson