1107 lines
62 KiB
HTML
1107 lines
62 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="zh-CN">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>WP-CLI 文派命令行 — WordPress 命令行接口</title>
|
||
<link rel="icon" type="image/jpeg" href="./favicon.jpg">
|
||
<link rel="stylesheet" href="./style.css">
|
||
<meta name="description" content="WP-CLI 是文派(WordPress)的命令行接口,让您无需浏览器即可管理 WordPress 网站。支持插件更新、数据库操作、用户管理等自动化任务,是开发者的必备工具。">
|
||
<meta name="keywords" content="WP-CLI, WordPress, 命令行工具, 网站管理, 自动化运维, PHP, 开发工具">
|
||
<meta name="author" content="WP-CLI 中文指南">
|
||
<meta property="og:title" content="WP-CLI — WordPress 命令行接口">
|
||
<meta property="og:description" content="WP-CLI 是 WordPress 的命令行接口,让您无需浏览器即可管理 WordPress 网站。支持插件更新、数据库操作、用户管理等自动化任务,是开发者的必备工具。">
|
||
<meta property="og:type" content="website">
|
||
<meta property="og:image" content="https://wp-cli.org/assets/img/wp-cli-logo.png">
|
||
<meta property="twitter:card" content="summary_large_image">
|
||
<link rel="preconnect" href="https://cn.windfonts.com" crossorigin>
|
||
<link rel="stylesheet" crossorigin="anonymous" href="https://app.windfonts.com/api/css?family=wenfeng-systcn:wght@light;medium;regular;semibold;bold;extralight;heavy">
|
||
</head>
|
||
<body>
|
||
<div id="scroll-progress"></div>
|
||
<div id="toc" class="toc"></div>
|
||
<div class="container">
|
||
<header>
|
||
<div class="logo">
|
||
<img src="./wp-cli-logo.png" alt="WP-CLI Logo">
|
||
<div class="lang-switch">
|
||
<a href="./index.html" class="active">简</a>
|
||
<span>/</span>
|
||
<a href="./zh-tw.html">繁</a>
|
||
</div>
|
||
</div>
|
||
|
||
<button id="menu-toggle" class="mobile-menu-btn" aria-label="切换菜单">
|
||
<span class="bar"></span>
|
||
<span class="bar"></span>
|
||
<span class="bar"></span>
|
||
</button>
|
||
|
||
<nav id="main-nav">
|
||
<a href="#install">安装</a>
|
||
<a href="#waza">技巧</a>
|
||
<a href="#ai">智能</a>
|
||
<a href="#config">配置</a>
|
||
<a href="#advanced">进阶</a>
|
||
<a href="#cases">案例</a>
|
||
<a href="#faq">解惑</a>
|
||
<a href="#extend">生态</a>
|
||
<a href="https://feicode.com/wp-cli/wp-cli" target="_blank">feiCode ↗</a>
|
||
<button id="theme-toggle" class="btn-icon" aria-label="切换主题">
|
||
<span class="icon-sun">昼</span>
|
||
<span class="icon-moon">夜</span>
|
||
</button>
|
||
</nav>
|
||
</header>
|
||
|
||
<main>
|
||
<section class="hero">
|
||
<div class="hero-text-vertical">
|
||
<h1>文派命令行接口</h1>
|
||
<span class="subtitle">WordPress 管理之道</span>
|
||
|
||
</div>
|
||
<div class="hero-content">
|
||
<p class="description">无需浏览器,指尖流转代码,掌控 WordPress 之一切。</p>
|
||
|
||
<div class="code-block">
|
||
<span class="comment"># 源 (Origin / EN)</span>
|
||
<span class="command" title="点击复制" style="cursor: pointer;">curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar</span>
|
||
|
||
<div class="separator"></div>
|
||
|
||
<span class="comment"># 镜 (Mirror / CN)</span>
|
||
<span class="command" title="点击复制" style="cursor: pointer; color:#4CAF50;">curl -O https://feicode.com/wp-cli/builds/raw/branch/gh-pages/phar/wp-cli.phar</span>
|
||
|
||
<div class="separator"></div>
|
||
|
||
<span class="comment"># 短 (Short / CN)</span>
|
||
<span class="command" title="点击复制" style="cursor: pointer; color:#4CAF50;">curl -O wp-cli.cn/phar</span>
|
||
|
||
<div class="separator"></div>
|
||
|
||
|
||
<span class="comment"># 验 (Verify)</span>
|
||
<span class="command" title="点击复制" style="cursor: pointer;">php wp-cli.phar --info</span>
|
||
</div>
|
||
|
||
<a href="#install" class="btn-zen">开始使用</a>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="philosophy">
|
||
<div class="grid">
|
||
<div class="card">
|
||
<h2>速</h2>
|
||
<p>执行快如闪电,无需等待,插件更新、数据导入。</p>
|
||
</div>
|
||
<div class="card">
|
||
<h2>简</h2>
|
||
<p>输入极简指令,直达核心。摒弃繁杂界面更纯粹。</p>
|
||
</div>
|
||
<div class="card">
|
||
<h2>动</h2>
|
||
<p>自动化脚本,批量处理。减少重复劳动随风而去。</p>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section id="install" class="install">
|
||
<div class="section-title-vertical">
|
||
<h2>始</h2>
|
||
<span class="subtitle-vertical">万物之源</span>
|
||
</div>
|
||
<div class="install-content">
|
||
<div class="tabs">
|
||
<button class="tab-btn active" data-group="install" data-tab="unix">UNIX</button>
|
||
<button class="tab-btn" data-group="install" data-tab="windows">WINDOWS</button>
|
||
</div>
|
||
|
||
<div id="unix-content" class="tab-content active" data-group="install">
|
||
<div class="step">
|
||
<div class="step-num">01</div>
|
||
<div class="step-detail">
|
||
<h4>下载 (Download)</h4>
|
||
<p>选择离你最近的源下载 <code>wp-cli.phar</code> 文件。以下自选其一。</p>
|
||
<div class="code-block-mini">
|
||
<span class="comment"># 推荐国内用户使用镜像源</span>
|
||
<span class="command">curl -O https://feicode.com/wp-cli/builds/raw/branch/gh-pages/phar/wp-cli.phar</span>
|
||
</div>
|
||
<div class="code-block-mini">
|
||
<span class="comment"># 加速短链</span>
|
||
<span class="command">curl -O wp-cli.cn/phar</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="step">
|
||
<div class="step-num">02</div>
|
||
<div class="step-detail">
|
||
<h4>赋权 (Permission)</h4>
|
||
<p>赋予文件可执行权限,使其成为可运行的程序。</p>
|
||
<div class="code-block-mini">
|
||
<span class="command">chmod +x wp-cli.phar</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="step">
|
||
<div class="step-num">03</div>
|
||
<div class="step-detail">
|
||
<h4>归位 (Move)</h4>
|
||
<p>将文件移动到系统路径,并重命名为 <code>wp</code>。</p>
|
||
<div class="code-block-mini">
|
||
<span class="command">sudo mv wp-cli.phar /usr/local/bin/wp</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="step">
|
||
<div class="step-num">04</div>
|
||
<div class="step-detail">
|
||
<h4>验证 (Verify)</h4>
|
||
<p>确认安装成功。</p>
|
||
<div class="code-block-mini">
|
||
<span class="command">wp --info</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="windows-content" class="tab-content" data-group="install">
|
||
<div class="step">
|
||
<div class="step-num">01</div>
|
||
<div class="step-detail">
|
||
<h4>下载 (Download)</h4>
|
||
<p>下载 <code>wp-cli.phar</code> 到你的项目根目录。</p>
|
||
<div class="code-block-mini">
|
||
<span class="command">curl -O https://feicode.com/wp-cli/builds/raw/branch/gh-pages/phar/wp-cli.phar</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="step">
|
||
<div class="step-num">02</div>
|
||
<div class="step-detail">
|
||
<h4>配置 (Configure)</h4>
|
||
<p>在同一目录下创建 <code>wp.bat</code> 文件。</p>
|
||
<div class="code-block-mini">
|
||
<span class="command">echo @php "%~dp0wp-cli.phar" %* > wp.bat</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="step">
|
||
<div class="step-num">03</div>
|
||
<div class="step-detail">
|
||
<h4>路径 (Path)</h4>
|
||
<p>将该目录添加到系统的环境变量 <code>PATH</code> 中。</p>
|
||
</div>
|
||
</div>
|
||
<div class="step">
|
||
<div class="step-num">04</div>
|
||
<div class="step-detail">
|
||
<h4>验证 (Verify)</h4>
|
||
<p>打开新的命令行窗口验证。</p>
|
||
<div class="code-block-mini">
|
||
<span class="command">wp --info</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section id="waza" class="waza">
|
||
<div class="section-title-vertical">
|
||
<h2>技</h2>
|
||
<span class="subtitle-vertical">日常之修炼</span>
|
||
</div>
|
||
<div class="waza-content">
|
||
<input type="text" id="command-search" class="waza-search" placeholder="搜索命令...">
|
||
<div class="tabs command-tabs">
|
||
<button class="tab-btn active" data-group="waza" data-tab="sys">系统</button>
|
||
<button class="tab-btn" data-group="waza" data-tab="content">内容</button>
|
||
<button class="tab-btn" data-group="waza" data-tab="ext">扩展</button>
|
||
<button class="tab-btn" data-group="waza" data-tab="manage">管理</button>
|
||
<button class="tab-btn" data-group="waza" data-tab="debug">调试</button>
|
||
</div>
|
||
|
||
<!-- 系统 (System + DB + Adv) -->
|
||
<div id="sys-content" class="tab-content active" data-group="waza">
|
||
<div class="command-item">
|
||
<div class="command-desc">查看系统信息</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp --info</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">检查 WordPress 核心更新</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp core check-update</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">更新 WordPress 核心</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp core update</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">清理缓存</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp cache flush</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">开启维护模式</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp maintenance-mode activate</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">导出数据库</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp db export backup.sql</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">导入数据库</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp db import backup.sql</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">搜索并替换 (支持序列化)</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp search-replace 'old.com' 'new.com'</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">优化数据库表</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp db optimize</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">执行 PHP 代码</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp eval 'echo "Hello WP";'</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">交互式 Shell</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp shell</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">管理定时任务</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp cron event list</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">获取选项值</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp option get siteurl</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 内容 (Post + Media) -->
|
||
<div id="content-content" class="tab-content" data-group="waza">
|
||
<div class="command-item">
|
||
<div class="command-desc">创建新文章</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp post create --post_title="Hello World" --post_status=publish</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">列出最近发布的文章</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp post list --post_type=post --number=5</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">生成测试数据</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp post generate --count=10 --post_type=page</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">批量删除文章</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp post delete $(wp post list --post_type=post --format=ids)</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">导入图片</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp media import ~/images/logo.png</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">重新生成缩略图</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp media regenerate --yes</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">列出未使用的媒体文件</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp media list --post_parent=0</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 扩展 (Plugin + Theme) -->
|
||
<div id="ext-content" class="tab-content" data-group="waza">
|
||
<div class="command-item">
|
||
<div class="command-desc">安装并激活插件</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp plugin install woocommerce --activate</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">更新所有插件</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp plugin update --all</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">列出所有插件状态</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp plugin list</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">禁用插件</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp plugin deactivate hello</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">安装主题</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp theme install twentytwentyone</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">激活主题</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp theme activate twentytwentyone</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">生成子主题</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp scaffold child-theme my-child --parent_theme=twentytwentyone</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">列出所有主题</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp theme list</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 管理 (User + Site) -->
|
||
<div id="manage-content" class="tab-content" data-group="waza">
|
||
<div class="command-item">
|
||
<div class="command-desc">创建新用户</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp user create bob bob@example.com --role=editor</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">列出管理员用户</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp user list --role=administrator</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">更新用户密码</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp user update bob --user_pass=strongpassword</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">管理用户权限</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp cap list administrator</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">删除用户并重新分配文章</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp user delete bob --reassign=1</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">创建新站点 (多站点)</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp site create --slug=subsite --title="Sub Site"</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">列出所有站点</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp site list</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 调试 (Debug) -->
|
||
<div id="debug-content" class="tab-content" data-group="waza">
|
||
<div class="command-item">
|
||
<div class="command-desc">查看详细配置信息</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp config list</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">检查数据库状态</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp db check</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">查看数据库大小</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp db size --human-readable</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">列出当前运行的 Cron 事件</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp cron event list</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">立即运行所有 Cron 事件</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp cron event run --due-now</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">跳过插件/主题运行 (排错模式)</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp plugin list --skip-plugins --skip-themes</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">重新生成重写规则 (Fix 404)</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp rewrite flush</div>
|
||
</div>
|
||
<div class="command-item">
|
||
<div class="command-desc">验证 WordPress 核心文件校验和</div>
|
||
<div class="code-line"><span class="prompt">$</span> wp core verify-checksums</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section id="ai" class="ai-section">
|
||
<div class="section-title-vertical">
|
||
<h2>智</h2>
|
||
<span class="subtitle-vertical">未来之演进</span>
|
||
</div>
|
||
<div class="ai-content">
|
||
<p class="ai-intro">
|
||
当命令行遇上人工智能,WP-CLI 不再只是工具,而是你的智能助手。
|
||
通过 AI 赋能,实现自然语言控制、代码自动生成与智能故障诊断。
|
||
</p>
|
||
|
||
<div class="ai-demo-terminal" id="ai-demo-terminal">
|
||
<div class="terminal-header">
|
||
<span class="dot red"></span>
|
||
<span class="dot yellow"></span>
|
||
<span class="dot green"></span>
|
||
<span class="terminal-title">WP-CLI AI Assistant</span>
|
||
</div>
|
||
<div class="terminal-body" id="ai-terminal-body">
|
||
<!-- JS will populate this -->
|
||
<div class="terminal-line">
|
||
<span class="ai-prompt">AI @ wp-cli:~$</span>
|
||
<span class="typing-cursor"></span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="grid-ai">
|
||
<div class="card-ai">
|
||
<div class="card-icon-zen">言</div>
|
||
<h3>自然语言交互</h3>
|
||
<p>告别繁琐参数,直接告诉它你想做什么。</p>
|
||
<div class="code-block-mini">
|
||
<span class="comment"># 示例 (需配合 AI 扩展)</span>
|
||
<span class="command">wp ai "帮我创建一个用户名为 feibisi 的管理员"</span>
|
||
</div>
|
||
</div>
|
||
<div class="card-ai">
|
||
<div class="card-icon-zen">化</div>
|
||
<h3>智能代码生成</h3>
|
||
<p>自动生成插件样板代码、自定义文章类型注册代码。</p>
|
||
<div class="code-block-mini">
|
||
<span class="comment"># 生成自定义文章类型</span>
|
||
<span class="command">wp scaffold post-type book --label="书籍"</span>
|
||
</div>
|
||
</div>
|
||
<div class="card-ai">
|
||
<div class="card-icon-zen">医</div>
|
||
<h3>故障自动诊断</h3>
|
||
<p>智能分析日志,快速定位错误根源并给出修复建议。</p>
|
||
<div class="code-block-mini">
|
||
<span class="command">wp doctor check --all</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section id="config" class="config-section">
|
||
<div class="section-title-vertical">
|
||
<h2>配</h2>
|
||
<span class="subtitle-vertical">运筹于帷幄</span>
|
||
</div>
|
||
<div class="config-content">
|
||
<div class="config-intro">
|
||
<p>通过 <code>wp-cli.yml</code> 配置文件,您可以定义全局参数、注册命令别名,甚至管理远程站点。</p>
|
||
</div>
|
||
|
||
<div class="tabs">
|
||
<button class="tab-btn active" data-group="config" data-tab="global">全局 (Global)</button>
|
||
<button class="tab-btn" data-group="config" data-tab="alias">别名 (Alias)</button>
|
||
</div>
|
||
|
||
<div id="global-content" class="tab-content active" data-group="config">
|
||
<div class="config-card">
|
||
<h3>全局配置</h3>
|
||
<p>一次配置,处处生效。省去重复输入参数的烦恼。</p>
|
||
<div class="code-block-yml">
|
||
<div class="yml-title">wp-cli.yml</div>
|
||
<pre><code>path: web/wp
|
||
url: http://example.com
|
||
user: admin
|
||
disabled_commands:
|
||
- db drop
|
||
- plugin install</code></pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="alias-content" class="tab-content" data-group="config">
|
||
<div class="config-card highlight">
|
||
<h3>远程别名 (Aliases)</h3>
|
||
<p>在本地机器上,直接操控远程服务器的 WordPress 站点。</p>
|
||
<div class="code-block-yml">
|
||
<div class="yml-title">wp-cli.yml</div>
|
||
<pre><code>@prod:
|
||
ssh: user@prod-server/var/www/html
|
||
@dev:
|
||
ssh: user@dev-server/var/www/html</code></pre>
|
||
</div>
|
||
<div class="code-block-mini" style="margin-top: 1rem;">
|
||
<span class="comment"># 同步生产环境数据库到本地</span>
|
||
<span class="command">wp db export - | wp @local db import -</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section id="advanced" class="advanced-section">
|
||
<div class="section-title-vertical">
|
||
<h2>深</h2>
|
||
<span class="subtitle-vertical">自动化之道</span>
|
||
</div>
|
||
<div class="advanced-content">
|
||
<p class="advanced-intro">
|
||
精通 WP-CLI 不仅仅是掌握单个命令,更在于将其融入自动化工作流。
|
||
这里有一些进阶的脚本与配置示例。
|
||
</p>
|
||
|
||
<div class="accordion">
|
||
<div class="accordion-item">
|
||
<button class="accordion-header">
|
||
<span>Shell 脚本:批量更新所有站点</span>
|
||
<span class="icon">+</span>
|
||
</button>
|
||
<div class="accordion-body">
|
||
<p>如果您管理着多个 WordPress 站点,可以编写一个简单的 Bash 脚本来遍历目录并更新所有站点。</p>
|
||
<div class="code-block-sh">
|
||
<pre><code>#!/bin/bash
|
||
|
||
# 假设所有站点都在 /var/www/html/ 下
|
||
for dir in /var/www/html/*/; do
|
||
echo "Updating $dir..."
|
||
cd "$dir"
|
||
|
||
# 检查是否是 WordPress 目录
|
||
if wp core is-installed --allow-root; then
|
||
# 更新核心、插件和主题
|
||
wp core update --allow-root
|
||
wp plugin update --all --allow-root
|
||
wp theme update --all --allow-root
|
||
echo "Done."
|
||
else
|
||
echo "Not a WordPress install. Skipping."
|
||
fi
|
||
done</code></pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="accordion-item">
|
||
<button class="accordion-header">
|
||
<span>System Cron:替换低效的 WP-Cron</span>
|
||
<span class="icon">+</span>
|
||
</button>
|
||
<div class="accordion-body">
|
||
<p>WordPress 默认的 Cron 依赖页面访问触发,不仅不稳定还影响性能。建议禁用它,改用系统的 Crontab。</p>
|
||
<p>1. 在 <code>wp-config.php</code> 中禁用默认 Cron:</p>
|
||
<div class="code-block-mini">
|
||
<span class="command">define( 'DISABLE_WP_CRON', true );</span>
|
||
</div>
|
||
<p>2. 在服务器的 crontab 中添加任务(每分钟执行一次):</p>
|
||
<div class="code-block-mini">
|
||
<span class="command">* * * * * php /path/to/wp-cli.phar cron event run --due-now --path=/var/www/html</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="accordion-item">
|
||
<button class="accordion-header">
|
||
<span>对象缓存 (Object Cache)</span>
|
||
<span class="icon">+</span>
|
||
</button>
|
||
<div class="accordion-body">
|
||
<p>配合 Redis 或 Memcached,WP-CLI 可以帮助您管理对象缓存,极大提升动态页面加载速度。</p>
|
||
<div class="code-block-mini">
|
||
<span class="comment"># 查看缓存状态</span>
|
||
<span class="command">wp cache type</span>
|
||
<span class="comment"># 清除所有缓存</span>
|
||
<span class="command">wp cache flush</span>
|
||
<span class="comment"># 获取特定缓存键值 (调试用)</span>
|
||
<span class="command">wp cache get my_key my_group</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="accordion-item">
|
||
<button class="accordion-header">
|
||
<span>多站点 (Multisite) 批量操作</span>
|
||
<span class="icon">+</span>
|
||
</button>
|
||
<div class="accordion-body">
|
||
<p>在 WordPress 多站点网络中,逐个站点执行命令非常繁琐。结合 <code>xargs</code> 可以实现一行代码管理整个网络。</p>
|
||
<div class="code-block-mini">
|
||
<span class="comment"># 对网络中的所有站点激活 Akismet 插件</span>
|
||
<span class="command">wp site list --field=url | xargs -n1 -I % wp plugin activate akismet --url=%</span>
|
||
</div>
|
||
<div class="code-block-mini">
|
||
<span class="comment"># 批量更新所有子站点的数据库结构</span>
|
||
<span class="command">wp site list --field=url | xargs -n1 -I % wp core update-db --url=%</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="accordion-item">
|
||
<button class="accordion-header">
|
||
<span>性能分析 (Profiling)</span>
|
||
<span class="icon">+</span>
|
||
</button>
|
||
<div class="accordion-body">
|
||
<p>使用 <code>profile</code> 扩展包,您可以深入分析 WordPress 启动过程中的性能瓶颈,精确到毫秒级的钩子 (Hook) 执行时间。</p>
|
||
<div class="code-block-mini">
|
||
<span class="comment"># 1. 安装扩展包</span>
|
||
<span class="command">wp package install wp-cli/profile-command</span>
|
||
<span class="comment"># 2. 分析页面加载的各个阶段</span>
|
||
<span class="command">wp profile stage --all</span>
|
||
<span class="comment"># 3. 找出最慢的 10 个钩子</span>
|
||
<span class="command">wp profile hook --all --spotlight --count=10</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="accordion-item">
|
||
<button class="accordion-header">
|
||
<span>CI/CD 集成 (GitHub Actions)</span>
|
||
<span class="icon">+</span>
|
||
</button>
|
||
<div class="accordion-body">
|
||
<p>将 WP-CLI 集成到自动化部署流程中。以下是一个 GitHub Actions 的示例,用于在部署前检查代码标准。</p>
|
||
<div class="code-block-yml">
|
||
<div class="yml-title">.github/workflows/main.yml</div>
|
||
<pre><code>name: WP Check
|
||
on: [push]
|
||
jobs:
|
||
check:
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- uses: actions/checkout@v2
|
||
- name: Setup PHP
|
||
uses: shivammathur/setup-php@v2
|
||
with:
|
||
php-version: '8.0'
|
||
tools: wp-cli
|
||
- name: Install WP
|
||
run: |
|
||
wp core download
|
||
wp config create --dbname=test --dbuser=root --dbpass=root
|
||
- name: Verify Checksums
|
||
run: wp core verify-checksums</code></pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="accordion-item">
|
||
<button class="accordion-header">
|
||
<span>自定义命令 (Custom Command)</span>
|
||
<span class="icon">+</span>
|
||
</button>
|
||
<div class="accordion-body">
|
||
<p>只需几行 PHP 代码,就能让 WP-CLI 为你所用。创建一个简单的命令来输出 "Hello World"。</p>
|
||
<div class="code-block-sh">
|
||
<pre><code>// command.php
|
||
if ( defined( 'WP_CLI' ) && WP_CLI ) {
|
||
$command = function( $args, $assoc_args ) {
|
||
$name = $assoc_args['name'] ?? 'World';
|
||
WP_CLI::success( "Hello, $name!" );
|
||
};
|
||
WP_CLI::add_command( 'hello', $command );
|
||
}
|
||
|
||
# 运行方式:
|
||
# wp --require=command.php hello --name=Zen</code></pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section id="cases" class="cases-section">
|
||
<div class="section-title-vertical">
|
||
<h2>例</h2>
|
||
<span class="subtitle-vertical">实战之演练</span>
|
||
</div>
|
||
<div class="cases-content">
|
||
<p class="cases-intro">
|
||
理论终须实践检验。以下是两个真实的运维场景,展示 WP-CLI 如何化繁为简,解决棘手问题。
|
||
</p>
|
||
|
||
<div class="tabs">
|
||
<button class="tab-btn active" data-group="cases" data-tab="rescue">救援 (Rescue)</button>
|
||
<button class="tab-btn" data-group="cases" data-tab="migrate">迁移 (Migrate)</button>
|
||
<button class="tab-btn" data-group="cases" data-tab="audit">审计 (Audit)</button>
|
||
</div>
|
||
|
||
<div id="rescue-content" class="tab-content active" data-group="cases">
|
||
<div class="case-card">
|
||
<div class="case-header">
|
||
<h3>场景一:网站被黑,快速恢复</h3>
|
||
<span class="case-tag danger">紧急</span>
|
||
</div>
|
||
<p class="case-desc">某天早上,你发现网站被植入了恶意代码,且无法登录后台。此时 WP-CLI 是你的救命稻草。</p>
|
||
<div class="step-list">
|
||
<div class="case-step">
|
||
<span class="step-icon">1</span>
|
||
<div class="step-text">
|
||
<strong>验证核心文件完整性</strong>
|
||
<p>快速找出被篡改的核心文件。</p>
|
||
<div class="code-block-mini">
|
||
<span class="command">wp core verify-checksums</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="case-step">
|
||
<span class="step-icon">2</span>
|
||
<div class="step-text">
|
||
<strong>强制重装核心</strong>
|
||
<p>不删除 `wp-content`,仅覆盖核心文件,清除后门。</p>
|
||
<div class="code-block-mini">
|
||
<span class="command">wp core download --force --skip-content</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="case-step">
|
||
<span class="step-icon">3</span>
|
||
<div class="step-text">
|
||
<strong>检查未授权用户</strong>
|
||
<p>列出管理员,发现可疑账号立即删除。</p>
|
||
<div class="code-block-mini">
|
||
<span class="command">wp user list --role=administrator</span>
|
||
<span class="command">wp user delete hacker --reassign=1</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="migrate-content" class="tab-content" data-group="cases">
|
||
<div class="case-card">
|
||
<div class="case-header">
|
||
<h3>场景二:数万篇文章批量修改</h3>
|
||
<span class="case-tag success">优化</span>
|
||
</div>
|
||
<p class="case-desc">你需要将所有文章中的旧域名 "old-site.com" 替换为 "new-site.com",且不能破坏序列化数据。</p>
|
||
<div class="step-list">
|
||
<div class="case-step">
|
||
<span class="step-icon">1</span>
|
||
<div class="step-text">
|
||
<strong>预演 (Dry Run)</strong>
|
||
<p>先看看会影响多少行数据,确保心中有数。</p>
|
||
<div class="code-block-mini">
|
||
<span class="command">wp search-replace 'old-site.com' 'new-site.com' --dry-run</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="case-step">
|
||
<span class="step-icon">2</span>
|
||
<div class="step-text">
|
||
<strong>执行替换并导出备份</strong>
|
||
<p>为了安全,建议先导出 SQL,再执行替换。</p>
|
||
<div class="code-block-mini">
|
||
<span class="command">wp db export before_replace.sql</span>
|
||
<span class="command">wp search-replace 'old-site.com' 'new-site.com'</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="case-step">
|
||
<span class="step-icon">3</span>
|
||
<div class="step-text">
|
||
<strong>清理缓存</strong>
|
||
<p>确保前台立即生效。</p>
|
||
<div class="code-block-mini">
|
||
<span class="command">wp cache flush</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="audit-content" class="tab-content" data-group="cases">
|
||
<div class="case-card">
|
||
<div class="case-header">
|
||
<h3>场景三:站点健康与安全审计</h3>
|
||
<span class="case-tag">日常</span>
|
||
</div>
|
||
<p class="case-desc">未雨绸缪胜过亡羊补牢。建立一套自动化的审计流程,定期检查站点是否存在潜在风险。</p>
|
||
<div class="step-list">
|
||
<div class="case-step">
|
||
<span class="step-icon">1</span>
|
||
<div class="step-text">
|
||
<strong>检查长期未更新的插件</strong>
|
||
<p>过期的插件往往是安全漏洞的重灾区。</p>
|
||
<div class="code-block-mini">
|
||
<span class="command">wp plugin list --update=available</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="case-step">
|
||
<span class="step-icon">2</span>
|
||
<div class="step-text">
|
||
<strong>验证所有核心文件</strong>
|
||
<p>确保没有文件被偷偷修改。</p>
|
||
<div class="code-block-mini">
|
||
<span class="command">wp core verify-checksums</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="case-step">
|
||
<span class="step-icon">3</span>
|
||
<div class="step-text">
|
||
<strong>列出所有管理员</strong>
|
||
<p>定期审查拥有最高权限的账户列表。</p>
|
||
<div class="code-block-mini">
|
||
<span class="command">wp user list --role=administrator --fields=ID,user_login,user_email,registered</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section id="faq" class="faq-section">
|
||
<div class="section-title-vertical">
|
||
<h2>解</h2>
|
||
<span class="subtitle-vertical">疑惑之微光</span>
|
||
</div>
|
||
<div class="faq-content">
|
||
<div class="faq-item">
|
||
<button class="faq-question">
|
||
<span>运行命令时提示 "Allow memory size of... exhausted"</span>
|
||
<span class="icon">+</span>
|
||
</button>
|
||
<div class="faq-answer">
|
||
<p>这是 PHP 内存限制导致的。您可以临时增加内存限制运行命令:</p>
|
||
<div class="code-block-mini">
|
||
<span class="command">php -d memory_limit=512M $(which wp) package list</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="faq-item">
|
||
<button class="faq-question">
|
||
<span>提示 "Error: YIKES! It looks like you're running this as root"</span>
|
||
<span class="icon">+</span>
|
||
</button>
|
||
<div class="faq-answer">
|
||
<p>出于安全考虑,不建议以 root 身份运行 WP-CLI。如果必须这样做,请添加 <code>--allow-root</code> 参数:</p>
|
||
<div class="code-block-mini">
|
||
<span class="command">wp plugin list --allow-root</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="faq-item">
|
||
<button class="faq-question">
|
||
<span>如何调试 "白屏" 或未知报错?</span>
|
||
<span class="icon">+</span>
|
||
</button>
|
||
<div class="faq-answer">
|
||
<p>您可以使用 <code>--debug</code> 参数查看详细的执行日志。如果怀疑是插件冲突,可以添加 <code>--skip-plugins</code> 参数暂时禁用所有插件运行命令。</p>
|
||
<div class="code-block-mini">
|
||
<span class="command">wp plugin list --debug</span>
|
||
<span class="command">wp theme list --skip-plugins --skip-themes</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="faq-item">
|
||
<button class="faq-question">
|
||
<span>search-replace 操作是否安全?</span>
|
||
<span class="icon">+</span>
|
||
</button>
|
||
<div class="faq-answer">
|
||
<p>非常安全。WP-CLI 能够智能处理 PHP 序列化数据(Serialized Data),这是直接使用 SQL 语句无法做到的。建议在操作前使用 <code>--dry-run</code> 进行预演。</p>
|
||
<div class="code-block-mini">
|
||
<span class="command">wp search-replace 'http://' 'https://' --dry-run</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="faq-item">
|
||
<button class="faq-question">
|
||
<span>如何更新 WP-CLI 本身?</span>
|
||
<span class="icon">+</span>
|
||
</button>
|
||
<div class="faq-answer">
|
||
<p>WP-CLI 提供了自更新命令,您可以一键升级到最新稳定版:</p>
|
||
<div class="code-block-mini">
|
||
<span class="command">wp cli update</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="faq-item">
|
||
<button class="faq-question">
|
||
<span>如何管理多个 WordPress 版本的 PHP 环境?</span>
|
||
<span class="icon">+</span>
|
||
</button>
|
||
<div class="faq-answer">
|
||
<p>您可以直接使用指定版本的 PHP 可执行文件来运行 WP-CLI Phar 包:</p>
|
||
<div class="code-block-mini">
|
||
<span class="command">/usr/bin/php7.4 wp-cli.phar plugin list</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="faq-item">
|
||
<button class="faq-question">
|
||
<span>遇到 "Error establishing a database connection"</span>
|
||
<span class="icon">+</span>
|
||
</button>
|
||
<div class="faq-answer">
|
||
<p>请首先检查 <code>wp-config.php</code> 中的数据库凭据是否正确。您也可以尝试使用 <code>wp db check</code> 命令来诊断数据库连接问题。</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section id="extend" class="extend">
|
||
<div class="section-title-vertical">
|
||
<h2>广</h2>
|
||
<span class="subtitle-vertical">生态之延伸</span>
|
||
</div>
|
||
<div class="extend-content">
|
||
<p class="extend-intro">WP-CLI 的力量不仅于此。通过包管理器,您可以安装社区贡献的命令,甚至编写自己的扩展。</p>
|
||
|
||
<div class="tabs">
|
||
<button class="tab-btn active" data-group="extend" data-tab="tools">工具 (Tools)</button>
|
||
<button class="tab-btn" data-group="extend" data-tab="dev">开发 (Dev)</button>
|
||
</div>
|
||
|
||
<div id="tools-content" class="tab-content active" data-group="extend">
|
||
<div class="package-grid">
|
||
<div class="card-ai">
|
||
<div class="card-icon-zen">诊</div>
|
||
<h3>wp doctor</h3>
|
||
<p>为您的 WordPress 进行全面体检,发现潜在配置问题。</p>
|
||
<div class="code-block-mini">
|
||
<span class="command">wp package install wp-cli/doctor-command</span>
|
||
</div>
|
||
</div>
|
||
<div class="card-ai">
|
||
<div class="card-icon-zen">剖</div>
|
||
<h3>wp profile</h3>
|
||
<p>剖析页面加载过程,精准定位性能瓶颈(慢查询、钩子耗时)。</p>
|
||
<div class="code-block-mini">
|
||
<span class="command">wp package install wp-cli/profile-command</span>
|
||
</div>
|
||
</div>
|
||
<div class="card-ai">
|
||
<div class="card-icon-zen">互</div>
|
||
<h3>wp shell</h3>
|
||
<p>内置的 REPL 环境,像 Python Shell 一样实时执行 PHP 代码。</p>
|
||
<div class="code-block-mini">
|
||
<span class="command">wp shell</span>
|
||
</div>
|
||
</div>
|
||
<div class="card-ai">
|
||
<div class="card-icon-zen">译</div>
|
||
<h3>wp i18n</h3>
|
||
<p>国际化工具集。生成 POT 文件、转换 PO/MO 文件。</p>
|
||
<div class="code-block-mini">
|
||
<span class="command">wp i18n make-pot . languages/plugin.pot</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="dev-content" class="tab-content" data-group="extend">
|
||
<div class="package-grid">
|
||
<div class="card-ai">
|
||
<div class="card-icon-zen">造</div>
|
||
<h3>脚手架 (Scaffold)</h3>
|
||
<p>快速生成标准化的 WP-CLI 命令包结构,开始您的扩展开发之旅。</p>
|
||
<div class="code-block-mini">
|
||
<span class="command">wp scaffold package my-command</span>
|
||
</div>
|
||
</div>
|
||
<div class="card-ai">
|
||
<div class="card-icon-zen">测</div>
|
||
<h3>单元测试</h3>
|
||
<p>为您的插件或主题生成 PHPUnit 测试文件。</p>
|
||
<div class="code-block-mini">
|
||
<span class="command">wp scaffold plugin-tests my-plugin</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="community-link">
|
||
<a href="https://wp-cli.org/package-index/" target="_blank" class="btn-text">
|
||
<span class="text">浏览更多扩展包</span>
|
||
<span class="icon">→</span>
|
||
</a>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section id="requirements" class="requirements">
|
||
<div class="zen-circle">
|
||
<span class="req-title">需</span>
|
||
</div>
|
||
<div class="req-grid">
|
||
<div class="req-item">
|
||
<span class="req-label">PHP</span>
|
||
<span class="req-value">5.6+</span>
|
||
</div>
|
||
<div class="req-divider"></div>
|
||
<div class="req-item">
|
||
<span class="req-label">WordPress</span>
|
||
<span class="req-value">3.7+</span>
|
||
</div>
|
||
<div class="req-divider"></div>
|
||
<div class="req-item">
|
||
<span class="req-label">System</span>
|
||
<span class="req-value">UNIX-like</span>
|
||
</div>
|
||
</div>
|
||
<p class="req-note">亦可随风潜入夜:<code>composer require wp-cli/wp-cli-bundle</code></p>
|
||
</section>
|
||
</main>
|
||
|
||
<footer class="site-footer">
|
||
<div class="footer-grid">
|
||
<!-- Brand / Slogan -->
|
||
<div class="footer-brand">
|
||
<div class="footer-logo">
|
||
<img src="./wp-cli-logo.png" alt="WP-CLI Logo">
|
||
</div>
|
||
<p class="footer-desc">无需浏览器,指尖流转代码。<br>掌控 WordPress 之一切。</p>
|
||
<div class="zen-mark-large">文派</div>
|
||
</div>
|
||
|
||
<!-- Navigation Links -->
|
||
<div class="footer-nav">
|
||
<div class="nav-group">
|
||
<h4>探索</h4>
|
||
<a href="#install">安装指南</a>
|
||
<a href="#waza">命令技巧</a>
|
||
<a href="#ai">智能助手</a>
|
||
<a href="#config">高级配置</a>
|
||
</div>
|
||
<div class="nav-group">
|
||
<h4>资源</h4>
|
||
<a href="https://make.wordpress.org/cli/handbook/" target="_blank">官方手册</a>
|
||
<a href="https://developer.wordpress.org/cli/commands/" target="_blank">命令参考</a>
|
||
<a href="https://wp-cli.org/package-index/" target="_blank">扩展包库</a>
|
||
</div>
|
||
<div class="nav-group">
|
||
<h4>社区</h4>
|
||
<a href="https://feicode.com/wp-cli" target="_blank">菲码源库 ↗</a>
|
||
<a href="https://wptea.com/" target="_blank">文派茶馆 ↗</a>
|
||
<a href="https://meta.cyberforums.com/" target="_blank">赛博论坛 ↗</a>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Newsletter / Action -->
|
||
<div class="footer-action">
|
||
<h4>关注我们</h4>
|
||
<p>获取最新 WP-CLI 技巧与 WordPress 资讯。</p>
|
||
<div class="footer-qr-container">
|
||
<div class="footer-qr">
|
||
<img src="./wp_wx.png" alt="文派公众号" class="qr-img">
|
||
<span class="qr-caption">文派公众号</span>
|
||
</div>
|
||
<div class="footer-qr">
|
||
<img src="./wxd_wx.png" alt="薇晓朵公众号" class="qr-img">
|
||
<span class="qr-caption">薇晓朵公众号</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="footer-bottom">
|
||
<div class="copyright">
|
||
© 2025 WP-CLI. 文派(广州)科技有限公司.
|
||
</div>
|
||
<div class="footer-meta">
|
||
<a href="https://wenpai.org/about/privacy/" target="_blank">隐私政策</a>
|
||
<span class="separator">•</span>
|
||
<a href="https://wenpai.org/" target="_blank">WenPai.org</a>
|
||
</div>
|
||
</div>
|
||
</footer>
|
||
</div>
|
||
<button id="back-to-top" class="btn-icon fixed-btn" aria-label="返回顶部">
|
||
<span> ↑ </span>
|
||
</button>
|
||
<script src="./script.js"></script>
|
||
</body>
|
||
</html>
|