用户元查询RLIKE
:
如果出生日期存储为
dd/mm/yyyy
, 在用户元中,您可以通过以下元查询找到所有八月生日用户:
\'meta_query\' => [
[
\'key\' => \'birthday\',
\'value\' => \'/08/\',
\'compare\' => \'RLIKE\'
],
]
您还可以考虑在用户元中另外存储生日月份。
Here 我列出了可用的元比较。
应用于代码段:
Part #1
下面是如何将其应用于代码示例:
/**
* Setup the user meta query for the current birth month
*/
add_action( \'pre_get_users\', function( $user_query )
{
// User input:
$birthmonth = filter_input( INPUT_GET, \'birthmonth\', FILTER_SANITIZE_NUMBER_INT );
// Setup the meta query:
if( $birthmonth )
{
$user_query->query_vars[\'meta_key\'] = \'birthday\';
$user_query->query_vars[\'meta_value\'] = zeroise( $birthmonth, 2 );
$user_query->query_vars[\'meta_compare\'] = \'RLIKE\';
}
} );
我们使用
pre_get_users
钩子而不是
pre_user_query
并使用handy
zeroise()
功能-查看
\\WP_Locale
班我们将使用
get_month()
下面第二部分中的方法。
请注意,在当前直接修改SQL查询的尝试中birthday
字段被视为wp_users
桌子还有INNER JOIN
, 在wp_usermeta
缺少表。
您还必须验证/清理用户输入。
Part #2
第二部分修改为:
/**
* Add a birth month filter to the users table
*/
add_action( \'restrict_manage_users\', function()
{
global $wp_locale;
// User input:
$birthmonth = filter_input( INPUT_GET, \'birthmonth\', FILTER_SANITIZE_NUMBER_INT );
// Birthmonth select box:
print \'<select name="birthmonth" id="birthmonth" onchange="" size="1">\';
printf( \'<option value="">%s</option>\', __( \'Birthmonth\' ) );
foreach( range(1,12) as $month )
{
printf(
\'<option value="%d" %s>%s</option>\',
$month,
selected( $birthmonth, $month ),
$wp_locale->get_month( $month )
);
}
print \'</select>\';
} );
我们使用的位置
birthmonth
而不是
month
, 以避免名称冲突。
我还添加了默认状态,没有任何birthmonth
已选定。
还添加了handyselected()
函数,以显示当前选定的选项。
月份名称在\\WP_Locale
类和类实例可通过全局$wp_locale
对象