要在 WordPress 网站显示用户搜索历史记录,可按以下步骤操作:

1. 记录搜索历史


你需要在用户每次进行搜索时记录相关信息。可以通过在主题的 functions.php 文件中添加代码来实现这一功能。
收起
php
// 记录搜索历史到用户元数据
function record_search_history() {
    if ( is_search() ) {
        $search_query = get_search_query();
        $user_id = get_current_user_id();

        if ( $user_id ) {
            $search_history = get_user_meta( $user_id, 'search_history', true );
            if ( ! $search_history ) {
                $search_history = array();
            }
            array_push( $search_history, $search_query );
            update_user_meta( $user_id, 'search_history', $search_history );
        }
    }
}
add_action( 'template_redirect', 'record_search_history' );

上述代码的作用是,当用户进行搜索时(通过 is_search() 函数判断),获取搜索关键词和当前用户的 ID。如果用户已登录($user_id 不为空),则获取该用户之前的搜索历史记录(存储在用户元数据中),将当前搜索关键词添加到历史记录数组里,最后更新用户的搜索历史记录。

2. 创建显示搜索历史的短代码


为了方便在页面或文章中显示搜索历史,你可以创建一个短代码。继续在 functions.php 文件中添加以下代码:
收起
php
// 创建短代码来显示搜索历史
function display_search_history_shortcode() {
    $user_id = get_current_user_id();
    if ( $user_id ) {
        $search_history = get_user_meta( $user_id, 'search_history', true );
        if ( $search_history && is_array( $search_history ) ) {
            $output = '<ul>';
            foreach ( array_reverse( $search_history ) as $query ) {
                $output.= '<li><a href="' . esc_url( home_url( '/?s=' . urlencode( $query ) ) ) . '">' . esc_html( $query ) . '</a></li>';
            }
            $output.= '</ul>';
            return $output;
        } else {
            return '<p>暂无搜索历史记录。</p>';
        }
    } else {
        return '<p>请先登录以查看搜索历史记录。</p>';
    }
}
add_shortcode( 'search_history', 'display_search_history_shortcode' );

此代码定义了一个名为 search_history 的短代码。当使用该短代码时,它会检查用户是否已登录。若已登录,则获取该用户的搜索历史记录,并将其以无序列表的形式输出,每个搜索关键词都链接到相应的搜索结果页面;若未登录,则提示用户先登录;若没有搜索历史记录,则提示暂无记录。

3. 在页面或文章中使用短代码


在 WordPress 后台编辑页面或文章时,只需在编辑器中输入 [search_history] 短代码,保存并发布页面或文章后,即可在相应位置显示用户的搜索历史记录。

4. 安全性和性能考虑

 
  • 数据清理:搜索历史记录可能会不断增加,占用过多的数据库空间。你可以定期清理旧的搜索记录,例如只保留最近的 10 条记录。

收起
php
// 限制搜索历史记录数量
function limit_search_history() {
    $user_id = get_current_user_id();
    if ( $user_id ) {
        $search_history = get_user_meta( $user_id, 'search_history', true );
        if ( is_array( $search_history ) && count( $search_history ) > 10 ) {
            $search_history = array_slice( $search_history, -10 );
            update_user_meta( $user_id, 'search_history', $search_history );
        }
    }
}
add_action( 'template_redirect', 'limit_search_history' );
 
  • 数据安全:在输出搜索关键词时,使用 esc_html() 和 esc_url() 等函数对数据进行转义,防止 XSS 攻击。

通过以上步骤,你就可以在 WordPress 网站上显示用户的搜索历史记录了。