<?php
// 独立执行脚本 - 直接加载 WordPress 并导入
// 访问: http://domain.com/run-import.php?key=go2024

if (!isset($_GET['key']) || $_GET['key'] !== 'go2024') {
    die('Access denied');
}

// 加载 WordPress
require_once(dirname(__FILE__) . '/wp-load.php');

// 检测当前域名并设置分类
$domain = $_SERVER['HTTP_HOST'];
$categories = [];

if (strpos($domain, 'alonzopichardo.com') !== false) {
    $categories = ['GP Services', 'Emergency Care', 'Prescriptions & Pharmacy', 
                   'Dental & Optical', 'Mental Health', 'Private Healthcare'];
} elseif (strpos($domain, 'blueup.shop') !== false) {
    $categories = ['Area Guides', 'Renting Process', 'Costs & Budgeting',
                   'Tenant Rights', 'Student Housing', 'Tips & Advice'];
} elseif (strpos($domain, 'dgbgtee.shop') !== false) {
    $categories = ['Company Guides', 'Interview Prep', 'Career Paths',
                   'Salaries & Benefits', 'Skills & Learning', 'Visa & Relocation'];
}

if (empty($categories)) {
    die('Unknown domain');
}

echo "<h1>Importing Articles</h1>";
echo "<h2>Site: $domain</h2>";
echo "<hr>";

$total = 0;
$base_date = strtotime('-60 days');

// 获取分类 ID
$all_cats = get_categories(['hide_empty' => false]);
$cat_map = [];
foreach ($all_cats as $cat) {
    $cat_map[$cat->name] = $cat->term_id;
}

foreach ($categories as $cat_name) {
    if (!isset($cat_map[$cat_name])) {
        echo "<p>⚠️ Category not found: $cat_name</p>";
        continue;
    }
    
    $cat_id = $cat_map[$cat_name];
    echo "<h3>$cat_name</h3>";
    
    for ($i = 1; $i <= 8; $i++) {
        $title = "Complete Guide to $cat_name: Everything You Need to Know (Part $i)";
        
        $content = "<h2>Introduction to $cat_name</h2>
<p>Welcome to our comprehensive guide on $cat_name. This detailed article provides essential information to help you understand everything you need to know about this important topic.</p>

<h2>Key Information</h2>
<p>Understanding $cat_name is crucial for success. Our expert team has researched extensively to bring you accurate information.</p>

<h3>Important Points</h3>
<ul>
<li>First essential concept about $cat_name</li>
<li>Second important element to understand</li>
<li>Third critical factor for success</li>
<li>Fourth vital component</li>
<li>Fifth key consideration</li>
</ul>

<h2>Detailed Analysis</h2>
<p>This section provides detailed information about $cat_name. Understanding these elements is essential for achieving success in this area.</p>

<h2>Practical Recommendations</h2>
<ol>
<li>Start with thorough research</li>
<li>Consult with qualified professionals</li>
<li>Keep detailed records</li>
<li>Stay informed about changes</li>
<li>Plan for the long term</li>
</ol>

<h2>Frequently Asked Questions</h2>
<h3>What is the most important thing to know?</h3>
<p>The most important thing is to understand the fundamentals thoroughly before making any decisions.</p>

<h3>How long does it typically take?</h3>
<p>The timeline varies but typically ranges from a few weeks to several months.</p>

<h2>Conclusion</h2>
<p>Understanding $cat_name is essential for success. Follow this guidance to achieve your goals.</p>" . str_repeat("<p>Additional detailed information about $cat_name to ensure sufficient content length. This paragraph provides more context and valuable insights for readers seeking comprehensive knowledge.</p>", 10);
        
        $days = rand(0, 60);
        $hours = rand(0, 23);
        $post_date = date('Y-m-d H:i:s', $base_date + ($days * 86400) + ($hours * 3600));
        
        $post_id = wp_insert_post([
            'post_title' => $title,
            'post_content' => $content,
            'post_status' => 'publish',
            'post_type' => 'post',
            'post_date' => $post_date,
            'post_date_gmt' => $post_date,
            'post_modified' => $post_date,
            'post_modified_gmt' => $post_date,
            'post_category' => [$cat_id]
        ]);
        
        if ($post_id && !is_wp_error($post_id)) {
            $total++;
            echo "✅ [$total] " . substr($title, 0, 60) . "...<br>";
            flush();
        } else {
            echo "❌ Failed: " . substr($title, 0, 60) . "<br>";
        }
    }
}

echo "<hr>";
echo "<h2>✅ Import Complete!</h2>";
echo "<p>Successfully created <strong>$total</strong> articles</p>";
echo "<p><a href='/' style='margin-right:10px;'>View Site</a> <a href='/wp-admin/'>Admin Dashboard</a></p>";
echo "<p style='color:#666;font-size:12px;'>You can now delete this file: run-import.php</p>";
?>
