本文原名《宝塔内如何导出文章数10W+的wordpress站标题及链接》
如果有这么一个需求,那就是不需要文章内容,但需要批量导出一个文章数量在10W+的wordpress网站所有的标题及链接,那又该怎么去操作呢?
使用这个专用脚本,可以把你网站里面所有的标题链接整合到一个表格里面,下载让你可以做数据处理使用。
下载的文件是csv格式,使用时需要将这个export-titles-links.php上传到网站根目录,并访问带密钥链接,程序会自动每次执行1000个链接,最终完成整个网站的数据整理。
1000的数量是为了服务器性能考虑而设定的,可以不用修改,每次只需要你点一下确定即可,执行完成后,会弹出下载框来,你可以直接下载,也可以在根目录找到wp_titles_links_complete.csv这个文件下载。
实测5W条网页的wp站导出后,表格约为4M。
php
<?php
/**
* WordPress 标题+链接导出脚本(宝塔专用)
* 功能:分批导出所有文章的标题和真实 Permalink 到 CSV 文件
* 作者:206207.xyz
* 使用方式:
* 1. 上传到 WordPress 根目录
* 2. 浏览器访问: https://yoursite.com/export-titles-links.php?key=你的密钥
*/
// 🔑 安全密钥(必须修改!建议用字母+数字+符号组合,至少12位)
$SECRET_KEY = 'wp_export_50k_2026_secure!';
// 📁 输出文件路径(在网站根目录生成)
$OUTPUT_FILE = __DIR__ . '/wp_titles_links_complete.csv';
// ⚙️ 配置
$PER_PAGE = 1000; // 每批处理1000篇文章(可根据服务器性能调整:500~2000)
// ──────────────────────── 安全验证 ────────────────────────
if (!isset($_GET['key']) || $_GET['key'] !== $SECRET_KEY) {
http_response_code(403);
die('❌ Access denied. Invalid security key.');
}
// ──────────────────────── 加载 WordPress ────────────────────────
if (!file_exists(__DIR__ . '/wp-load.php')) {
die('❌ wp-load.php not found. Please place this file in your WordPress root directory.');
}
require_once __DIR__ . '/wp-load.php';
// ──────────────────────── 分页逻辑 ────────────────────────
$page = max(1, (int)($_GET['page'] ?? 1));
$offset = ($page - 1) * $PER_PAGE;
$posts = get_posts([
'numberposts' => $PER_PAGE,
'offset' => $offset,
'post_type' => 'post',
'post_status' => 'publish',
'orderby' => 'ID',
'order' => 'ASC'
]);
// ──────────────────────── 写入文件 ────────────────────────
$fp = fopen($OUTPUT_FILE, $page === 1 ? 'w' : 'a');
if (!$fp) {
die('❌ Unable to write to output file. Check permissions.');
}
// 写入表头(仅第一页)
if ($page === 1) {
fputcsv($fp, ['Title', 'URL']);
}
// 写入当前批次数据
foreach ($posts as $post) {
// 清理标题中的换行符(避免 CSV 格式错乱)
$title = str_replace(["\r", "\n", "\t"], ' ', $post->post_title);
fputcsv($fp, [$title, get_permalink($post->ID)]);
}
fclose($fp);
// ──────────────────────── 完成 or 继续 ────────────────────────
if (empty($posts)) {
// 所有文章已导出完成
echo '<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>导出完成</title></head>
<body style="font-family: Arial; padding: 30px; background: #f5f5f5;">
<div style="max-width: 600px; margin: 0 auto; background: white; padding: 20px; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.1);">
<h2 style="color: #28a745;">✅ 导出成功!</h2>
<p>共导出 ' . (($page - 1) * $PER_PAGE) . ' 篇文章。</p>
<p><strong>📥 下载文件:</strong></p>
<a href="/wp_titles_links_complete.csv" download
style="display: inline-block; padding: 10px 20px; background: #007cba; color: white; text-decoration: none; border-radius: 4px;">
点击下载 CSV 文件
</a>
<p style="margin-top: 20px; color: #d9534f;">
⚠️ 重要:下载后请立即删除以下两个文件以确保安全!
<ul>
<li><code>export-titles-links.php</code></li>
<li><code>wp_titles_links_complete.csv</code></li>
</ul>
</p>
</div>
</body>
</html>';
exit;
} else {
// 自动跳转到下一页
$next_url = "?key=" . urlencode($SECRET_KEY) . "&page=" . ($page + 1);
echo "<script>
alert('✅ 第 {$page} 批完成(" . count($posts) . " 篇)\\n正在跳转到下一批...');
window.location.href = '{$next_url}';
</script>";
}
提示:完成任务后,应该把这脚本文件跟表格文件都删除掉。