wordpress 蜘蛛记录插件的功能记录网站的所有访问记录

要在 WordPress 网站上实现类似的功能,通常你需要开发一个 WordPress 插件。以下是一步步创建一个插件的指南,它可以记录访问者的访问记录,区分搜索引擎蜘蛛,并保存访客的 IP 地址。

1. 创建插件目录和文件

  1. 进入你的 WordPress 插件目录。路径通常是:
wp-content/plugins/
  1. plugins 文件夹中创建一个新目录,例如:visitor-tracker
  2. visitor-tracker 目录中创建一个 PHP 文件,例如:visitor-tracker.php

2. 插件文件结构

插件的文件结构大概如下:

wp-content/
    plugins/
        visitor-tracker/
            visitor-tracker.php

3. 编写插件代码

visitor-tracker.php 文件中,添加以下代码:

<?php
/**
 * Plugin Name: Visitor Tracker
 * Plugin URI: https://yourwebsite.com
 * Description: A simple plugin to track visitors and identify search engine bots.
 * Version: 1.0
 * Author: Your Name
 * Author URI: https://yourwebsite.com
 */

// 确保 WordPress 已加载
if (!defined('ABSPATH')) {
    exit; // 禁止直接访问
}

// 定义数据库表名
global $visitor_tracker_table;
$visitor_tracker_table = 'wp_visitor_logs';

// 插件激活时创建数据库表
function vt_create_table() {
    global $wpdb, $visitor_tracker_table;
    $charset_collate = $wpdb->get_charset_collate();
    
    // 创建数据库表
    $sql = "CREATE TABLE IF NOT EXISTS $visitor_tracker_table (
        id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
        timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
        visitor_type VARCHAR(50),
        user_agent TEXT,
        ip_address VARCHAR(100),
        spider_name VARCHAR(100)
    ) $charset_collate;";
    
    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}
register_activation_hook(__FILE__, 'vt_create_table');

// 插件停用时删除数据库表
function vt_remove_table() {
    global $wpdb, $visitor_tracker_table;
    $sql = "DROP TABLE IF EXISTS $visitor_tracker_table";
    $wpdb->query($sql);
}
register_deactivation_hook(__FILE__, 'vt_remove_table');

// 访问记录处理函数
function vt_log_visitor() {
    global $wpdb, $visitor_tracker_table;
    
    // 获取访客的 IP 地址
    $ip_address = $_SERVER['REMOTE_ADDR'];
    
    // 获取 User-Agent
    $user_agent = $_SERVER['HTTP_USER_AGENT'];
    
    // 判断是否为搜索引擎蜘蛛
    $spiders = ['Googlebot', 'Bingbot', 'Slurp', 'DuckDuckBot', 'Baiduspider', 'YandexBot', 'Sogou', 'Exabot'];
    $is_spider = false;
    $spider_name = '';
    
    foreach ($spiders as $spider) {
        if (strpos($user_agent, $spider) !== false) {
            $is_spider = true;
            $spider_name = $spider;
            break;
        }
    }
    
    // 记录访客或蜘蛛
    $visitor_type = $is_spider ? 'Spider' : 'Visitor';
    
    // 将访问记录保存到数据库
    $wpdb->insert(
        $visitor_tracker_table,
        [
            'visitor_type' => $visitor_type,
            'user_agent' => $user_agent,
            'ip_address' => $ip_address,
            'spider_name' => $is_spider ? $spider_name : null
        ]
    );
}

// 捕获所有页面请求
add_action('wp_head', 'vt_log_visitor');

// 创建管理页面以查看记录
function vt_add_admin_menu() {
    add_menu_page(
        'Visitor Tracker Logs', // 页面标题
        'Visitor Tracker', // 菜单标题
        'manage_options', // 权限要求
        'visitor-tracker-logs', // 菜单 slug
        'vt_display_logs', // 回调函数
        'dashicons-visibility', // 图标
        30 // 位置
    );
}
add_action('admin_menu', 'vt_add_admin_menu');

// 显示日志的回调函数
function vt_display_logs() {
    global $wpdb, $visitor_tracker_table;
    
    $logs = $wpdb->get_results("SELECT * FROM $visitor_tracker_table ORDER BY timestamp DESC LIMIT 20");
    
    echo '<div class="wrap">';
    echo '<h1>Visitor Tracker Logs</h1>';
    
    if ($logs) {
        echo '<table class="wp-list-table widefat fixed striped">';
        echo '<thead><tr><th>ID</th><th>Timestamp</th><th>Visitor Type</th><th>IP Address</th><th>Spider Name</th><th>User Agent</th></tr></thead>';
        echo '<tbody>';
        
        foreach ($logs as $log) {
            echo '<tr>';
            echo '<td>' . $log->id . '</td>';
            echo '<td>' . $log->timestamp . '</td>';
            echo '<td>' . $log->visitor_type . '</td>';
            echo '<td>' . $log->ip_address . '</td>';
            echo '<td>' . ($log->spider_name ? $log->spider_name : '-') . '</td>';
            echo '<td>' . $log->user_agent . '</td>';
            echo '</tr>';
        }
        
        echo '</tbody>';
        echo '</table>';
    } else {
        echo '<p>No logs available.</p>';
    }
    
    echo '</div>';
}

解释:

  1. 插件头部信息Plugin NameDescriptionVersion 等字段描述了插件的基本信息。
  2. 数据库表创建
    • 插件激活时会创建一个名为 wp_visitor_logs 的表,存储访问记录。表中包括字段 idtimestampvisitor_type(访客类型)、user_agent(用户代理)、ip_address(IP 地址)、spider_name(蜘蛛名称)。
  3. 访问记录
    • 通过 wp_head 钩子函数,每次访问页面时会记录访问者的信息。如果访问者是搜索引擎蜘蛛,则会记录蜘蛛的名称;否则,记录访客的 IP 地址。
  4. 管理界面
    • 插件创建了一个 WordPress 后台菜单项,允许管理员查看最近的访问日志。显示的字段包括访问时间、访客类型、IP 地址、蜘蛛名称和用户代理。

4. 启用插件

  1. visitor-tracker 文件夹上传到你的 WordPress 插件目录中:wp-content/plugins/
  2. 登录到 WordPress 后台,进入 插件 页面,启用 Visitor Tracker 插件。

5. 查看访问记录

启用插件后,后台会出现一个新的菜单项 Visitor Tracker,点击该菜单可以查看最近的访问日志,包括访客的 IP 地址、蜘蛛名称和用户代理。

总结

这个插件实现了以下功能:

  • 捕获并记录访问网站的访客和搜索引擎蜘蛛。
  • 对于蜘蛛,记录蜘蛛类型(如 Googlebot、Bingbot 等)。
  • 对于访客,记录 IP 地址。
  • 提供一个后台界面,让管理员可以查看记录的日志。

如果你有任何进一步的定制要求,或者需要帮助解决其他问题,请随时告诉我!

发布者:myrgd,转载请注明出处:https://www.object-c.cn/4411

Like (0)
Previous 2024年11月22日 下午4:05
Next 2024年11月22日 下午5:54

相关推荐

  • Python与Jupyter Notebook中的数据可视化实现

    数据可视化是分析和展示数据的重要手段,而 Python 与 Jupyter Notebook 是构建交互式数据可视化的重要工具组合。以下是如何在 Python 和 Jupyter Notebook 中实现数据可视化的详细介绍。 1. 常用数据可视化库Python 中有多个强大的可视化库,以下是几个常用的:1.1 Matplotlib特点:功能强大、灵活,但语…

    2024年11月26日
    00
  • Docker快速部署Nginx、Redis、MySQL、Tomcat以及制作镜像方法

    使用 Docker 快速部署 Nginx、Redis、MySQL、Tomcat 以及制作镜像 通过 Docker,开发者可以快速部署和管理各种服务。本文介绍如何快速使用 Docker 部署 Nginx、Redis、MySQL 和 Tomcat,以及如何制作自定义镜像。 1. Docker 基础准备 安装 Docker 如果还未安装 Docker,可按照以下步…

    2024年11月26日
    00
  • Android Studio 2024 版本安装 SDK、Gradle环境配置

    在 Android Studio 2024 中,配置 SDK 和 Gradle 环境是非常重要的步骤,确保开发环境能正确运行、编译和构建你的 Android 项目。以下是详细的安装和配置步骤。 1. 安装 Android Studio 2024 首先,你需要安装 Android Studio 2024。你可以从 Android Studio 官网 下载最新版…

    2024年11月23日
    00
  • 开源工具 Flowise 构建可视化的 AI 工作流

    Flowise 是一个开源的工具,用于构建可视化的 AI 工作流和对话代理。通过 Flowise,用户可以快速集成各种大语言模型(LLM)并与数据库交互。以下是详细的本地部署教程: 1. 前置条件 1.1 硬件和系统要求 1.2 软件要求 2. 本地部署步骤 2.1 克隆 Flowise 代码库 2.2 安装依赖 2.3 配置环境变量 2.4 启动服务 运行…

    2024年11月24日
    00
  • 在使用 VS Code 和 Keil 协同开发 STM32 程序

    在使用 VS Code 和 Keil 协同开发 STM32 程序时,可以利用 Keil 强大的编译器 和 VS Code 的高效代码编辑功能,结合起来提高开发效率。以下是实现协同开发的详细步骤: 前置准备安装 Keil确保已安装 Keil MDK-ARM,并配置好开发环境。Keil 下载地址:Keil 官方网站安装 VS Code下载并安装最新版本的 VS …

    2024年12月1日
    00
  • 实现微信支付提现api接口教程

    微信支付的提现功能,通常是通过调用 企业付款到零钱 API 或 企业付款到银行卡 API 来实现的。以下是如何使用微信支付提现 API 的详细教程,包括其前置条件、接口调用以及注意事项。 1. 准备工作 1.1. 开通微信支付商户号 1.2. 配置证书 将这些文件保存在你的服务器上,用于发起 HTTPS 请求。 1.3. 获取 API 密钥 2. 企业付款到…

    2024年11月24日
    00
  • 微信小程序设计和实现一个校园音乐应用的方法

    基于微信小程序设计和实现一个校园音乐平台,主要包括以下几个方面的设计与功能实现: 1. 需求分析 1.1 功能需求 1.2 非功能需求 2. 技术架构设计 2.1 前端:微信小程序 2.2 后端 2.3 技术栈 3. 数据库设计 表结构示例: 4. 功能实现 4.1 用户登录与注册 4.2 音乐播放 4.3 歌单与榜单 4.4 评论功能 5. 部署与优化 5…

    2024年11月26日
    00
  • Python安装与环境配置的详细讲解

    在本文中,我们将详细介绍 Python 的安装及环境配置过程。无论你是 Windows、macOS 还是 Linux 用户,都能根据本教程成功安装 Python 并配置开发环境。 1. 安装 Python(Windows、macOS、Linux) (1) Windows 安装 Python 或 安装 pip: 安装和配置虚拟环境(可选): 激活虚拟环境: (…

    2024年11月23日
    00
  • 安装 Laravel 11 + Filament 详细教程

    安装Laravel 11之前选确保安装了Composer 管理器,接下来的步骤是通过Composer 包管理器安装完成的。 一、前提条件 二、使用 Composer 创建新的 Laravel 11 项目 三、在现有项目中添加 Laravel 11(如果是集成到现有项目) 请注意,在实际安装过程中,可能会遇到各种问题,如权限问题(在 Linux 下,如果没有足…

    2025年1月18日
    00
  • Flutter 在 PC 端多窗口支持方面的进展备受关注的功能,已在 Ubuntu/Canonical 展示

    Flutter 在 PC 端多窗口支持方面的进展是一个备受关注的功能,它的目标是进一步提升 Flutter 的跨平台能力。最近,Flutter 团队与 Canonical 合作,在 Ubuntu 平台上展示了多窗口功能的新成果。这一进展对开发者和终端用户来说都有重要意义,以下是相关细节分析: 展示细节多窗口功能亮相Flutter 的多窗口支持在 Ubuntu…

    2024年12月2日
    00
  • 在 Spring Boot 中实现定时任务,可以使用以下三种方式

    1. 使用 @Scheduled 注解 这是 Spring 提供的简单方式,基于注解实现定时任务。 步骤: 3. 创建任务类使用 @Scheduled 注解定义定时任务: 4. @Scheduled 参数详解 2. 使用 ScheduledExecutorService 如果任务管理需要更灵活,可以使用 Java 自带的线程池。 示例: 3. 使用 Quar…

    2024年11月26日
    00
  • C++ STL vector 类:动态数组的高效应用

    vector 是 C++ 标准库(STL)中最常用的容器之一,它提供了一个动态数组的实现,能够根据需要自动扩展或收缩。vector 是一个线性数据结构,具有高效的随机访问能力和动态扩展能力,广泛应用于需要频繁增删元素且对随机访问要求较高的场景。 1. vector 类简介 vector 是 C++ 标准模板库(STL)中提供的一种容器类,它类似于动态数组(d…

    2024年11月25日
    00
  • 微信小程序中,通过Node.js连接本地 MySQL 实现数据的增删改查

    在微信小程序中,通过Node.js连接本地 MySQL 实现数据的增删改查的过程,可以分为以下几个步骤: 1. 准备工作 必要工具: 2. 搭建 Node.js 后端服务 安装依赖 在 Node.js 项目中,使用 npm init 初始化项目,并安装以下依赖: express: 用于搭建 Web 服务。 mysql: 用于连接和操作 MySQL 数据库。 …

    2024年12月9日
    00
  • Android Studio 国内镜像,加速下载和构建过程

    在国内使用 Android Studio 时,由于访问 Google 的官方资源(如 Gradle 和 SDK)速度较慢甚至无法访问,可以通过配置国内镜像源来加速下载和构建过程。以下是详细配置步骤: 1. 配置 Gradle 国内镜像 Gradle 是 Android Studio 构建项目的重要工具,其依赖库通常托管在 Google Maven 和 JCe…

    2024年11月25日
    00
  • 微信小程序错误提示 does not have a method “onShareTimeline”

    当在微信小程序中尝试实现分享到朋友圈功能时,如果你在控制台遇到 does not have a method “onShareTimeline” 错误,这通常是由于以下原因之一: 1. 检查基础库版本 onShareTimeline 是在小程序基础库 2.11.3 及以上版本支持的。如果当前开发者工具的基础库版本较低,会导致方法无法找到。 解决方法: 2. …

    2024年11月26日
    00

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

在线咨询: QQ交谈

邮件:723923060@qq.com

关注微信