【无标题】

本文原名《宝塔内如何导出文章数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>";
}

提示:完成任务后,应该把这脚本文件跟表格文件都删除掉。

相关推荐
Android系统攻城狮3 小时前
Android tinyalsa深度解析之pcm_close调用流程与实战(一百零四)
android·pcm·tinyalsa·音频进阶·音频性能实战·android hal
weixin_411191843 小时前
LifecycleEventObserver和DefaultLifecycleObserver使用
android
、BeYourself3 小时前
Intent :跳转与数据传递的正确打开方式
android·android-studio
灵感菇_4 小时前
Android 列表控件全面解析:ListView 与 RecyclerView
android·ui
2601_949809594 小时前
flutter_for_openharmony家庭相册app实战+照片详情实现
android·java·flutter
fundroid4 小时前
Kotlin 泛型进阶:in、out 与 reified 实战
android·开发语言·kotlin
Android系统攻城狮4 小时前
Android tinyalsa深度解析之pcm_open调用流程与实战(一百零三)
android·pcm·tinyalsa·音频进阶·音频性能实战·android hal
2501_944448004 小时前
Flutter for OpenHarmony衣橱管家App实战:意见反馈功能实现
android·javascript·flutter
风流倜傥唐伯虎4 小时前
./gradlew assembleDebug和gradle build区别
android·android studio