私はワードプレスですべてのユーザーのリストを作成しています。そのために私は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を案内してください。
ありがとう
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
}