AI Agent Import Guide - WordPress to Laravel

Datum izvoza: 24. Mart 2026
Izvor: WordPress 6.9.4 + Elementor Pro
Cilj: Laravel aplikacija (nova.lusar.hr)


🎯 ZADATAK ZA AI AGENTA

Tvoj zadatak je da importuješ sve stranice i sadržaj iz WordPress-a u novu Laravel aplikaciju. Sve potrebne podatke imaš u ovom docs/ folderu.


📁 ŠTA IMAŠ NA RASPOLAGANJU

1. Markdown Fajlovi sa Sadržajem

  • Lokacija: docs/pages/*.md (14 stranica)
  • Format: YAML front matter + Markdown body
  • Sadržaj: Kompletan tekst stranica izvučen iz Elementor-a

2. Slike

  • Lokacija: docs/media/ (812 fajlova, 41MB)
  • Sve slike: Kopirane iz WordPress uploads foldera
  • Lista: docs/all_images.json (266 slika bez videa)
  • Korištene: docs/images/ (samo 3 stvarno korištene u content-u)

3. Metadata Fajlovi

  • manifest.json - Kompletan pregled svih stranica, postova, slika
  • media_list.json - Lista svih media fajlova sa URL-ovima
  • all_images.json - Samo slike (bez videa)
  • INDEX.md - Pregled stranica po veličini i kategorijama

🔍 STRUKTURA MARKDOWN FAJLA

Svaki .md fajl u pages/ ili posts/ ima:

---
title: Naziv stranice
slug: url-slug
id: 87
status: publish
date: 2026-01-27 11:30:01
modified: 2026-01-27 11:30:29
uses_elementor: yes
featured_image: https://lusar.hr/wp-content/uploads/2026/01/image.png
---

# Glavni Naslov

## Podnaslov

Tekst sadržaja...

![Alt text](url-slike.jpg)

- Lista item 1
- Lista item 2

**Bold text** i *italic text*

[Link tekst](https://url.com)

📋 PLAN IMPORTA - STEP BY STEP

STEP 1: Analiza Postojeće Laravel Strukture

  1. Provjeri da li postoji model za stranice (Page model)
  2. Provjeri bazu podataka (migrations, tabele)
  3. Identifikuj gdje će se čuvati:
    • Stranice (pages tabela?)
    • Slike (storage/app/public/images)
    • Content (kao HTML ili Markdown?)

STEP 2: Kreiranje/Prilagođavanje Modela

Ako ne postoji, kreiraj Page model sa:

  • title (string)
  • slug (string, unique)
  • content (text/longtext)
  • excerpt (text, nullable)
  • featured_image (string, nullable)
  • meta_description (text, nullable)
  • status (enum: draft/published)
  • wordpress_id (integer, nullable) - za referencu
  • published_at (timestamp)
  • timestamps

STEP 3: Parser za Markdown Fajlove

Instaliraj potrebne pakete:

composer require spatie/yaml-front-matter
composer require league/commonmark

Kreiraj helper/service klasu za parsing:

use Spatie\YamlFrontMatter\YamlFrontMatter;
use League\CommonMark\CommonMarkConverter;

class WordPressImporter {
    public function parseMarkdownFile($filePath) {
        $object = YamlFrontMatter::parseFile($filePath);
        
        return [
            'title' => $object->matter('title'),
            'slug' => $object->matter('slug'),
            'wordpress_id' => $object->matter('id'),
            'status' => $object->matter('status'),
            'published_at' => $object->matter('date'),
            'content' => $object->body(),
            'uses_elementor' => $object->matter('uses_elementor'),
            'featured_image' => $object->matter('featured_image'),
        ];
    }
}

STEP 4: Konverzija Markdown u HTML

$converter = new CommonMarkConverter();
$html = $converter->convert($markdownContent);

STEP 5: Migracija Slika

Važno: WordPress URL-ovi moraju biti zamijenjeni Laravel URL-ovima

Plan:

  1. Kopiraj slike iz docs/media/ u storage/app/public/images/
  2. Kreiraj symlink: php artisan storage:link
  3. Ažuriraj URL-ove u content-u:
$content = str_replace(
    'https://lusar.hr/wp-content/uploads/',
    '/storage/images/',
    $content
);

Alternative: Možeš kreirati novi folder samo sa slikama koje su stvarno korištene:

  • Parse sve MD fajlove
  • Izvuci sve image URL-ove
  • Kopiraj samo te slike

STEP 6: Artisan Command za Import

Kreiraj command:

php artisan make:command ImportWordPressContent
// app/Console/Commands/ImportWordPressContent.php
class ImportWordPressContent extends Command
{
    protected $signature = 'import:wordpress';
    
    protected $description = 'Import WordPress pages from docs/pages/*.md';
    
    public function handle()
    {
        $docsPath = base_path('docs/pages');
        $files = File::glob($docsPath . '/*.md');
        
        $this->info("Found " . count($files) . " pages to import");
        
        foreach ($files as $file) {
            $data = $this->parseMarkdownFile($file);
            
            Page::updateOrCreate(
                ['slug' => $data['slug']],
                $data
            );
            
            $this->info("✓ Imported: " . $data['title']);
        }
        
        $this->info("Import complete!");
    }
}

STEP 7: Čišćenje Sadržaja

Elementor Placeholder Slike:

// Ukloni Elementor placeholder slike
$content = str_replace(
    'https://lusar.hr/wp-content/plugins/elementor/assets/images/placeholder.png',
    '',
    $content
);

// Ili zamijeni sa default slikom
$content = str_replace(
    'https://lusar.hr/wp-content/plugins/elementor/assets/images/placeholder.png',
    '/images/default-placeholder.jpg',
    $content
);

HTML cleanup:

  • Ukloni višestruke newline-ove
  • Ukloni prazne <p> tagove
  • Popravi broken linkove

🎯 PRIORITETI IMPORTA

Kritične stranice (importuj prvo):

  1. naslovna-2.md - Glavna landing stranica
  2. kontakt.md - Kontakt informacije
  3. usluge.md - Glavni opis usluga
  4. led-film.md - Proizvod 1
  5. smart-film.md - Proizvod 2
  6. ultratanki-prozirni-zaslon.md - Proizvod 3
  7. politika-privatnosti.md - Pravne
  8. opci-uvjeti-poslovanja.md - Pravne

Sekundarne stranice:

  • montaza.md
  • servis.md
  • pozivni-centar.md
  • partneri.md
  • drustvene-mreze.md

Preskoči:

  • naslovna.md (stara verzija, praktično prazna)
  • posts/ (default WordPress "Hello World" postovi)

⚠️ VAŽNE NAPOMENE

1. Duplikat Sadržaja

Neke stranice imaju duplikat sadržaja jer Elementor čuva podatke na dva mjesta. To je OK - parser će izvući sve.

2. Placeholder Slike

Većina stranica ima Elementor placeholder slike:

https://lusar.hr/wp-content/plugins/elementor/assets/images/placeholder.png

Ovo NISU prave slike - ukloni ih ili zamijeni.

3. Relativni vs Apsolutni URL-ovi

WordPress koristi apsolutne URL-ove sa domenom. U Laravelu koristi relativne:

Staro: https://lusar.hr/wp-content/uploads/2026/01/image.jpg
Novo:  /storage/images/image.jpg

4. Slug Collision

Ako već imaš stranice u Laravelu, pazi na slug konflikte.

5. SEO Metadata

Fajlovi NE sadrže SEO meta description. Trebaš ih kreirati ručno ili izvući excerpt iz content-a.


🧪 TESTIRANJE

Nakon importa:

  1. Provjeri sve stranice:

    php artisan tinker
    >>> Page::count()
    >>> Page::pluck('title', 'slug')
    
  2. Provjeri slike:

    • Otvori random stranicu
    • Provjeri da li se sve slike učitavaju
    • Provjeri console za 404 greške
  3. Provjeri linkove:

    • Interni linkovi
    • Eksterni linkovi
    • Email/telefon linkovi
  4. Responsive:

    • Provjeri na mobitelu
    • Provjeri Markdown formatting

📞 KONTAKT INFORMACIJE (iz WordPress-a)

Za referencu:

  • Telefon: +385 99 549 2621
  • Email: info@lusar.hr
  • Adresa: Ulica Kestenova 66, 31 000, Osijek

🛠️ HELPER KOMANDE

Listing svih stranica:

ls -lh docs/pages/

Grep za pronalaženje text-a:

grep -r "SMART FILM" docs/pages/

Brojanje slika:

find docs/media/ -type f -iname "*.jpg" -o -iname "*.png" | wc -l

Check JSON:

cat docs/manifest.json | head -50

📚 DODATNI RESURSI

  • INDEX.md - Kompletna lista stranica sa veličinama i kategorijama
  • README_HR.md - Detaljna dokumentacija na hrvatskom
  • manifest.json - JSON sa svim metapodacima
  • all_images.json - Lista samo slika (bez videa)

✅ CHECKLIST ZA IMPORT

  • Kreiraj/provjeri Page model
  • Kreiraj migration za pages tabelu
  • Instaliraj Markdown parsing pakete
  • Kreiraj WordPressImporter service class
  • Kreiraj Artisan command za import
  • Kopiraj slike u storage/app/public/images
  • Kreiraj storage symlink
  • Pokreni import za kritične stranice
  • Provjeri da li se stranice prikazuju
  • Ažuriraj image URL-ove
  • Ukloni placeholder slike
  • Import sekundarnih stranica
  • Test svih linkova
  • Provjeri responsive
  • Deploy na production

Uspješan import! 🚀