<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>user-search &#8211; 小豬日常</title>
	<atom:link href="https://piglife.tw/tag/user-search/feed/" rel="self" type="application/rss+xml" />
	<link>https://piglife.tw</link>
	<description>Hello World，一個紀錄生活與學習的地方</description>
	<lastBuildDate>Fri, 12 Dec 2025 14:50:38 +0000</lastBuildDate>
	<language>zh-TW</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>

<image>
	<url>https://piglife.tw/wp-content/uploads/2017/10/cropped-logo-1-32x32.png</url>
	<title>user-search &#8211; 小豬日常</title>
	<link>https://piglife.tw</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>WordPress 自訂使用者搜尋功能實作筆記</title>
		<link>https://piglife.tw/technical-notes/wordpress-custom-user-search/</link>
					<comments>https://piglife.tw/technical-notes/wordpress-custom-user-search/#respond</comments>
		
		<dc:creator><![CDATA[小豬]]></dc:creator>
		<pubDate>Mon, 20 Jan 2025 08:29:00 +0000</pubDate>
				<category><![CDATA[技術筆記]]></category>
		<category><![CDATA[custom-fields]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[pre_user_query]]></category>
		<category><![CDATA[user-search]]></category>
		<category><![CDATA[usermeta]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://piglife.tw/?p=473</guid>

					<description><![CDATA[介紹如何利用 WordPress 的 pre_user_query 鉤子，擴充後台使用者搜尋功能，支...]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading">前言</h2>
<p>在 WordPress 中，預設的使用者搜尋功能僅能查詢固定欄位如使用者名稱或電子郵件，無法搜尋自定義欄位資料。當網站需要透過電話號碼等自定義欄位進行搜尋時，預設功能就顯得不足。本篇筆記將示範如何利用 WordPress 的鉤子擴充後台使用者搜尋功能，支援自定義欄位的搜尋。</p>
<h2 class="wp-block-heading">為什麼需要自訂使用者搜尋？</h2>
<p>WordPress 預設不支援透過自定義欄位搜尋使用者資料，對於擁有大量自定義欄位的網站管理者來說，這是一大限制。透過自訂搜尋功能，可以讓管理者在後台使用者列表中，直接搜尋像是「reg_phone」這類的自定義欄位，提升管理效率。</p>
<h2 class="wp-block-heading">自訂使用者搜尋的程式碼範例</h2>
<p>以下程式碼示範如何使用 <code>pre_user_query</code> 動作鉤子，修改後台使用者查詢的 SQL，加入對自定義欄位 <code>reg_phone</code> 的搜尋支援：</p>
<pre><code class="lang-php language-php php">add_action(&#039;pre_user_query&#039;, &#039;project_pre_user_search&#039;);
function project_pre_user_search($query) {
    global $wpdb;
    global $pagenow;

    // 僅在後台使用者列表頁且有搜尋字串時執行
    if (is_admin() &amp;&amp; &#039;users.php&#039; === $pagenow &amp;&amp; !empty($_REQUEST[&#039;s&#039;])) {
        // 過濾搜尋字串，避免 SQL 注入
        $search_term = esc_sql($_REQUEST[&#039;s&#039;]);

        // 加入 DISTINCT 避免重複
        $query-&gt;query_fields = &#039;DISTINCT &#039; . $query-&gt;query_fields;
        // 連接 usermeta 表以搜尋自定義欄位
        $query-&gt;query_from .= &quot; LEFT JOIN {$wpdb-&gt;usermeta} ON {$wpdb-&gt;usermeta}.user_id = {$wpdb-&gt;users}.ID&quot;;
        // 新增搜尋條件，模糊比對 reg_phone 欄位
        $query-&gt;query_where .= $wpdb-&gt;prepare(
            &quot; OR ({$wpdb-&gt;usermeta}.meta_key = &#039;reg_phone&#039; AND {$wpdb-&gt;usermeta}.meta_value LIKE %s)&quot;,
            &#039;%&#039; . $search_term . &#039;%&#039;
        );
    }
    return $query;
}</code></pre>
<h2 class="wp-block-heading">程式碼解說</h2>
<ol>
<li><strong>動作鉤子（Action Hook）</strong>：使用 <code>pre_user_query</code> 在查詢執行前修改 SQL。</li>
<li><strong>後台頁面檢查</strong>：確保只在後台使用者列表頁（users.php）執行。</li>
<li><strong>搜尋關鍵字過濾</strong>：用 <code>esc_sql()</code> 避免 SQL 注入風險。</li>
<li><strong>連接使用者欄位表</strong>：透過 LEFT JOIN 連接 <code>usermeta</code> 表。</li>
<li><strong>新增搜尋條件</strong>：在 WHERE 子句加入對 <code>reg_phone</code> 欄位的模糊搜尋。</li>
</ol>
<h2 class="wp-block-heading">如何使用這段程式碼？</h2>
<ol>
<li>將程式碼加入主題的 <code>functions.php</code> 或自訂外掛中。</li>
<li>確認已有名為 <code>reg_phone</code> 的自定義使用者欄位，且欄位中有可搜尋資料。</li>
<li>進入 WordPress 後台「使用者」頁面。</li>
<li>在搜尋框輸入關鍵字，即可搜尋 <code>reg_phone</code> 欄位的匹配資料。</li>
</ol>
<h2 class="wp-block-heading">此功能的優點</h2>
<ul>
<li><strong>靈活性</strong>：支援搜尋非預設欄位的自定義資料。</li>
<li><strong>安全性</strong>：使用 WordPress 原生函數處理輸入，降低風險。</li>
<li><strong>可擴展性</strong>：可依需求修改支援更多自定義欄位。</li>
</ul>
<h2 class="wp-block-heading">完整程式碼</h2>
<pre><code class="lang-text language-text text">add_action(&#039;pre_user_query&#039;, &#039;project_pre_user_search&#039;);
function project_pre_user_search($query) {
    global $wpdb;
    global $pagenow;

    if (is_admin() &amp;&amp; &#039;users.php&#039; === $pagenow &amp;&amp; !empty($_REQUEST[&#039;s&#039;])) {
        $search_term = esc_sql($_REQUEST[&#039;s&#039;]);

        $query-&gt;query_fields = &#039;DISTINCT &#039; . $query-&gt;query_fields;
        $query-&gt;query_from .= &quot; LEFT JOIN {$wpdb-&gt;usermeta} ON {$wpdb-&gt;usermeta}.user_id = {$wpdb-&gt;users}.ID&quot;;
        $query-&gt;query_where .= $wpdb-&gt;prepare(
            &quot; OR ({$wpdb-&gt;usermeta}.meta_key = &#039;reg_phone&#039; AND {$wpdb-&gt;usermeta}.meta_value LIKE %s)&quot;,
            &#039;%&#039; . $search_term . &#039;%&#039;
        );
    }
    return $query;
}</code></pre>]]></content:encoded>
					
					<wfw:commentRss>https://piglife.tw/technical-notes/wordpress-custom-user-search/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
