如何修改WordPress用户搜索脚本,获取姓名、电话等更多用户信息
修改WordPress用户搜索脚本以返回更多用户信息
以下是修改后的完整代码,可返回用户的名、姓、邮箱和电话号码(假设电话号码存储在用户元数据的phone字段中,若你的字段名不同,请自行替换):
<form action="/custom-search" method="GET"> <div class="search boxes"> <input type="text" name="ven_search_title" class="customsearch-field" placeholder="Vendor Search"> <input type="submit" name="search" value="Search"> </div> </form> <?php // 处理搜索关键词,简化条件判断 if (!empty($_GET['ven_search_title'])) { $ven_search_title = sanitize_text_field($_GET['ven_search_title']); global $wpdb; // 关联用户表和用户元数据表,获取所需字段 $query = $wpdb->prepare( "SELECT u.user_nicename, u.user_email, um_first.meta_value AS first_name, um_last.meta_value AS last_name, um_phone.meta_value AS phone FROM {$wpdb->prefix}users u LEFT JOIN {$wpdb->prefix}usermeta um_first ON u.ID = um_first.user_id AND um_first.meta_key = 'first_name' LEFT JOIN {$wpdb->prefix}usermeta um_last ON u.ID = um_last.user_id AND um_last.meta_key = 'last_name' LEFT JOIN {$wpdb->prefix}usermeta um_phone ON u.ID = um_phone.user_id AND um_phone.meta_key = 'phone' WHERE u.user_nicename LIKE %s", '%' . $wpdb->esc_like($ven_search_title) . '%' // 添加模糊匹配通配符,同时转义特殊字符 ); $results = $wpdb->get_results($query, ARRAY_A); if (!empty($results)) { foreach ($results as $user) { echo '<div class="user-result">'; echo '<p><strong>用户名:</strong>' . esc_html($user['user_nicename']) . '</p>'; echo '<p><strong>名:</strong>' . esc_html($user['first_name'] ?? '未填写') . '</p>'; echo '<p><strong>姓:</strong>' . esc_html($user['last_name'] ?? '未填写') . '</p>'; echo '<p><strong>邮箱:</strong>' . esc_html($user['user_email']) . '</p>'; echo '<p><strong>电话:</strong>' . esc_html($user['phone'] ?? '未填写') . '</p>'; echo '</div><hr>'; } } else { echo '<p>未找到匹配的用户</p>'; } } ?>
关键改动说明:
- 安全防护:用
$wpdb->prepare()和$wpdb->esc_like()处理搜索关键词,避免SQL注入风险;同时添加%通配符实现模糊搜索(若需精确匹配可去掉通配符)。 - 扩展数据来源:WordPress默认将用户姓名(first_name、last_name)存在
wp_usermeta表中,通过LEFT JOIN关联该表获取对应字段;电话号码需根据实际存储的元字段名调整meta_key(比如电商场景常用billing_phone)。 - 输出优化:用
esc_html()转义输出内容防止XSS攻击,添加字段标签提升可读性,同时处理字段为空的情况(用??运算符显示默认提示文本)。 - 逻辑简化:精简原代码中重复的条件判断,增加无匹配结果时的友好提示。
内容的提问来源于stack exchange,提问作者phplover
相关产品推荐
相关产品推荐

