Bu eklenti, bir WordPress sitesinden REST API kullanarak kategoriler, yazılar, sayfalar ve etiketler dahil tüm içerikleri çeker ve hedef WordPress sitesine aktarır. Eski sitenizdeki içerikleri yeni sitenize kolayca taşımanızı sağlar. Eklenti, admin panelinde URL girme ve içerik çekme işlemlerini basitleştiren bir arayüz sunar. Tüm içeriği tek bir tıklama ile çekebilirsiniz!

Özellikler:

  • Kaynak siteden kategoriler, yazılar, sayfalar ve etiketler dahil tüm içerik türlerini hedef siteye aktarır.
  • İçerik aktarımı sırasında kategori ve etiket eşleştirmeleri yapılır, böylece yazılar yeni sitede de eski kategoriler ve etiketlerle ilişkilendirilir.
  • Yönetim panelinden kolayca URL girerek içerik çekme işlemi yapabilirsiniz.

Kullanım Talimatları:

  1. Eklentiyi Yükleyin ve Aktif Edin: wp-content/plugins klasörüne full_content_importer adında bir klasör oluşturun. Bu klasörün içine category-post-importer.php dosyasını ekleyin. WordPress yönetim panelinde "Eklentiler" bölümüne gidip eklentiyi aktif hale getirin.
  2. Tüm İçeriği Çekme: Yönetim panelinde "Tüm İçerik İçe Aktar" adlı bir menü göreceksiniz. Bu menüye tıklayın ve açılan sayfada:
    • Kaynak WordPress sitesinin ana URL’sini (örneğin, https://kaynak-site.com) ilgili alana girin.
    • "Çek" butonuna basarak içeriği aktarın. Tüm kategoriler, yazılar, sayfalar ve etiketler otomatik olarak sitenize aktarılacaktır.

Önemli Not:


Eklenti, REST API ile çalıştığı için kaynak sitede REST API erişiminin açık olması gerekmektedir.


<?php
/*
Plugin Name: Full Content Importer
Description: Kaynak WordPress sitesindeki tüm içerikleri (kategoriler, yazılar, sayfalar, etiketler) çekip hedef siteye ekler.
Version: 1.2
Author: Your Name
*/

// REST API aracılığıyla içerik çekme fonksiyonu
function import_full_content_from_source_site($source_site_url) {
    if (empty($source_site_url)) {
        return; // URL boşsa işlem yapılmaz
    }

    // 1. Kategorileri kaynaktan çek ve hedef siteye ekle
    $categories = json_decode(file_get_contents($source_site_url . '/categories'));
    $category_map = []; // Kategori ID eşleştirmesi

    if (is_array($categories)) {
        foreach ($categories as $category) {
            $term = wp_insert_term($category->name, 'category', array(
                'description' => $category->description,
                'slug'        => $category->slug
            ));

            if (!is_wp_error($term)) {
                $category_map[$category->id] = $term['term_id']; // Kaynak ve hedef kategori ID eşlemesi
            }
        }
    }

    // 2. Etiketleri kaynaktan çek ve hedef siteye ekle
    $tags = json_decode(file_get_contents($source_site_url . '/tags'));
    $tag_map = []; // Etiket ID eşleştirmesi

    if (is_array($tags)) {
        foreach ($tags as $tag) {
            $term = wp_insert_term($tag->name, 'post_tag', array(
                'description' => $tag->description,
                'slug'        => $tag->slug
            ));

            if (!is_wp_error($term)) {
                $tag_map[$tag->id] = $term['term_id']; // Kaynak ve hedef etiket ID eşlemesi
            }
        }
    }

    // 3. Yazıları kaynaktan çek ve hedef siteye ekle
    $posts = json_decode(file_get_contents($source_site_url . '/posts'));

    if (is_array($posts)) {
        foreach ($posts as $post) {
            // Kategori ve etiket ID'lerini yeni siteye uyarlama
            $post_categories = array_map(function($cat_id) use ($category_map) {
                return isset($category_map[$cat_id]) ? $category_map[$cat_id] : null;
            }, $post->categories);
            $post_categories = array_filter($post_categories); // Null olanları temizle

            $post_tags = array_map(function($tag_id) use ($tag_map) {
                return isset($tag_map[$tag_id]) ? $tag_map[$tag_id] : null;
            }, $post->tags);
            $post_tags = array_filter($post_tags);

            // Yazıyı hedef siteye ekle
            wp_insert_post(array(
                'post_title'   => $post->title->rendered,
                'post_content' => $post->content->rendered,
                'post_status'  => 'publish',
                'post_author'  => 1,
                'post_category'=> $post_categories,
                'tags_input'   => $post_tags,
            ));
        }
    }

    // 4. Sayfaları kaynaktan çek ve hedef siteye ekle
    $pages = json_decode(file_get_contents($source_site_url . '/pages'));

    if (is_array($pages)) {
        foreach ($pages as $page) {
            wp_insert_post(array(
                'post_title'   => $page->title->rendered,
                'post_content' => $page->content->rendered,
                'post_status'  => 'publish',
                'post_type'    => 'page',
                'post_author'  => 1
            ));
        }
    }
}

// Yönetim panelinde eklentiyi çalıştırmak için bir menü ekleyin
function full_content_importer_menu() {
    add_menu_page(
        'Tüm İçeriği İçe Aktar',
        'Tüm İçerik İçe Aktar',
        'manage_options',
        'full-content-importer',
        'full_content_importer_admin_page'
    );
}
add_action('admin_menu', 'full_content_importer_menu');

// Yönetim sayfası içeriği
function full_content_importer_admin_page() {
    echo '<h1>Tüm İçeriği İçe Aktar</h1>';
    echo '<form method="post" action="">';
    echo '<label for="source_site_url">Kaynak Site URL\'si:</label>';
    echo '<input type="text" id="source_site_url" name="source_site_url" value="' . (isset($_POST['source_site_url']) ? esc_attr($_POST['source_site_url']) : '') . '" size="50">';
    echo '<br><br>';
    echo '<input type="submit" name="import_content" value="Çek" class="button button-primary">';
    echo '</form>';

    // Eğer form gönderildiyse içerik çekme fonksiyonunu çağır
    if (isset($_POST['import_content']) && !empty($_POST['source_site_url'])) {
        $source_site_url = esc_url_raw($_POST['source_site_url']) . '/wp-json/wp/v2';

        // İçeriği çek
        import_full_content_from_source_site($source_site_url);

        echo '<div class="updated"><p>Tüm içerikler başarıyla içe aktarıldı.</p></div>';
    }
}
?>