This commit is contained in:
2026-04-11 00:37:12 +02:00
parent 65d99059e0
commit 97778c38be
18 changed files with 1204 additions and 229 deletions

View File

@@ -0,0 +1,272 @@
<?php
/**
* One-time migration script for page 2707 (Ogrody zimowe - klienci indywidualni)
* Populates ACF Flexible Content fields with hardcoded content.
*
* Usage: Visit /wp-content/themes/ostal_WP/migrate-2707.php?run=migrate-2707
* Or via WP-CLI: wp eval-file wp-content/themes/ostal_WP/migrate-2707.php --run=migrate-2707
*
* ⚠️ DELETE THIS FILE AFTER MIGRATION!
*/
// Bootstrap WordPress
require_once dirname(__FILE__) . '/../../../wp-load.php';
// Safety check: require explicit parameter
if (!isset($_GET['run']) || $_GET['run'] !== 'migrate-2707') {
die('Safety check failed. Use ?run=migrate-2707 to execute.');
}
// Safety check: only admins
if (!current_user_can('manage_options')) {
die('Admin access required. Please log in first.');
}
$page_id = 2707;
// Safety check: don't overwrite existing data
$existing = get_field('sections', $page_id);
if (!empty($existing)) {
die('Page 2707 already has sections data (' . count($existing) . ' layouts). Aborting to prevent overwrite. Delete existing sections first if you want to re-run.');
}
/**
* Helper: find attachment ID by image URL
*/
function get_attachment_id_by_url($url) {
global $wpdb;
$path = parse_url($url, PHP_URL_PATH);
// Remove size suffix (e.g., -1024x576)
$path = preg_replace('/-\d+x\d+(?=\.\w+$)/', '', $path);
$filename = basename($path);
$sql = $wpdb->prepare(
"SELECT ID FROM $wpdb->posts WHERE post_type = 'attachment' AND guid LIKE %s LIMIT 1",
'%' . $wpdb->esc_like($filename) . '%'
);
return (int) $wpdb->get_var($sql);
}
// Build sections array
$sections = [];
// ── Layout 1: Hero with form ──────────────────────────────────────────
$sections[] = [
'acf_fc_layout' => 'hero_with_form',
'section_id' => 'hero_box',
'heading' => 'Całoroczne ogrody zimowe klasy premium',
'text' => '<p class="hero-text text-white m-0">Projektujemy i realizujemy indywidualne ogrody zimowe, które zwiększają komfort domu i pozwalają korzystać z przestrzeni przez cały rok - niezależnie od pogody.</p>
<p class="hero-text text-white m-0"><strong>Izolowane systemy aluminiowe<br>
Szyby Ug=1,1 lub 0,5<br>
Zintegrowane osłony przeciwsłoneczne</strong></p>
<p class="hero-text text-white m-0">Sprawdź orientacyjny budżet projektu<br>
Porozmawiajmy o twoim ogrodzie zimowym.</p>',
'form_shortcode' => '[contact-form-7 id="21a1143" title="Formularz kontaktowy"]',
'background_image' => '/wp-content/uploads/2023/10/ogrody-zimowe.jpg',
];
// ── Layout 2: Two-col — intro ─────────────────────────────────────────
$sections[] = [
'acf_fc_layout' => 'two_col_section',
'section_heading' => 'Nasze ogrody zimowe powstają z myślą o klientach, którzy szukają trwałego,<br>elastycznego i bezpiecznego rozwiązania na lata, a nie tymczasowej zabudowy.',
'text' => '<p>Każda realizacja jest projektowana indywidualnie - z uwzględnieniem architektury budynku, warunków technicznych i sposobu użytkowania.</p>
<p>Realizacje całorocznych ogrodów zimowych rozpoczynają się od około 100 000 zł netto.</p>',
'image' => 'https://ostal.pl/wp-content/uploads/2026/01/IMG_2832-scaled.jpg',
'choose_heading' => 'h2',
'heading_position' => 'textRight',
'additional_class' => 'imageLeft',
'additional_section_class' => 'bg-light',
'additional_wrapper_class' => '',
'cta' => '',
'cta_text' => '',
];
// ── Layout 3: Two-col — cechy wyróżniające ────────────────────────────
$sections[] = [
'acf_fc_layout' => 'two_col_section',
'section_heading' => 'Co wyróżnia nasze ogrody zimowe',
'text' => '<ul style="list-style: none; padding: 0;">
<li>- Komfort użytkowania przez cały rok.</li>
<li>- Stabilna izolowana termicznie konstrukcja aluminiowa.</li>
<li>- Wysokie parametry cieplne przeszkleń (Ug=1,1 - Ug=0,5)</li>
<li>- Ochrona przed słońcem dzięki zintegrowanym markizom i żaluzjom.</li>
<li>- Estetyka dopasowana do architektury budynku</li>
</ul>
<p>Nie pracujemy na gotowych schematach - każdy ogród zimowy powstaje jako spójny element domu, a nie dobudowany „dodatek".</p>',
'image' => 'https://ostal.pl/wp-content/uploads/2026/01/199-f27gxxl.jpg',
'choose_heading' => 'h2',
'heading_position' => 'textRight',
'additional_class' => '',
'additional_section_class' => 'bg-light',
'additional_wrapper_class' => '',
'cta' => '',
'cta_text' => '',
];
// ── Layout 4: Collaboration steps ─────────────────────────────────────
$sections[] = [
'acf_fc_layout' => 'collaboration_steps',
'section_heading' => 'Jak wygląda współpraca?',
'steps' => [
['step_title' => 'Rozmowa i analiza potrzeb.'],
['step_title' => 'Koncepcja i dobór rozwiązań'],
['step_title' => 'Indywidualna oferta i harmonogram'],
['step_title' => 'Umowa i zaliczka rezerwująca termin'],
['step_title' => 'Produkcja i montaż'],
],
'bottom_text' => 'Prowadzimy klienta przez cały proces - spokojnie krok po kroku.',
];
// ── Layout 5: Two-col — doświadczenie ─────────────────────────────────
$sections[] = [
'acf_fc_layout' => 'two_col_section',
'section_heading' => 'Doświadczenie w systemach aluminiowych',
'text' => '<p>Od wielu lat pracujemy na systemach aluminiowych stosowanych zarówno w budownictwie jednorodzinnym, jak i obiektach komercyjnych.</p>
<p>Realizujemy m.in. stolarkę okienną i drzwiową, żaluzje fasadowe, i rolety zewnętrzne, a ogrody zimowe są naturalnym rozszerzeniem tych rozwiązań w tym samym standardzie technicznym i wykonawczym.</p>',
'image' => '/wp-content/uploads/2026/02/att_698c47679eb9b4.14191582.jpeg',
'choose_heading' => 'h2',
'heading_position' => 'textRight',
'additional_class' => 'imageLeft',
'additional_section_class' => 'bg-light',
'additional_wrapper_class' => '',
'cta' => '',
'cta_text' => '',
];
// ── Layout 6: Two-col — planowanie ────────────────────────────────────
$sections[] = [
'acf_fc_layout' => 'two_col_section',
'section_heading' => 'Planowanie realizacji bez pośpiechu',
'text' => '<p>Wielu naszych klientów decyduje się na zaplanowanie ogrodu zimowego z wyprzedzeniem.<br>
Pozwala to spokojnie przygotować projekt i zarezerwować dogodny termin realizacji na wiosnę lub lato.</p>',
'image' => '/wp-content/uploads/2026/02/att_698c4767a04c46.41417006.jpg',
'choose_heading' => 'h2',
'heading_position' => 'textRight',
'additional_class' => 'imageLeft',
'additional_section_class' => 'bg-light',
'additional_wrapper_class' => '',
'cta' => '',
'cta_text' => '',
];
// ── Layout 7: Two-col — kontakt ───────────────────────────────────────
$sections[] = [
'acf_fc_layout' => 'two_col_section',
'section_heading' => 'Porozmawiajmy o twoim projekcie',
'text' => '<p>Jeśli rozważasz budowę całorocznego ogrodu zimowego i chcesz sprawdzić, czy to rozwiązanie ma sens w Twoim przypadku - zapraszamy do kontaktu.</p>',
'image' => '/wp-content/uploads/2026/02/att_698c47679ad0a0.33546122.jpeg',
'choose_heading' => 'h2',
'heading_position' => 'textRight',
'additional_class' => 'imageLeft',
'additional_section_class' => 'bg-light',
'additional_wrapper_class' => '',
'cta' => '',
'cta_text' => '',
];
// ── Layout 8: Two-col with BG — CTA ──────────────────────────────────
$sections[] = [
'acf_fc_layout' => 'two_col_section_with_bg',
'section_heading' => 'Sprawdź orientacyjny budżet projektu',
'text' => '',
'cta' => '#hero_box',
'cta_text' => 'Umów rozmowę',
'background_image' => 'https://ostal.pl/wp-content/uploads/2021/05/hero-about.jpg',
'image' => '',
'heading_position' => '',
'additional_class' => '',
'additional_section_class' => 'bg-dark',
'additional_wrapper_class' => '',
];
// ── Layout 9: Two-col — funkcje ogrodów ───────────────────────────────
$sections[] = [
'acf_fc_layout' => 'two_col_section',
'section_heading' => 'Funkcje ogrodów zimowych',
'text' => '<p>Nowoczesny ogród zimowy to&nbsp;nie&nbsp;tylko&nbsp;dodatkowe pomieszczenie wypoczynkowe pokój zimowy, w&nbsp;którym&nbsp;możesz przyjmować gości lub relaksować się po&nbsp;ciężkim dniu w&nbsp;otoczeniu ulubionych roślin. Przez&nbsp;cały rok i&nbsp;w&nbsp;każdą pogodę. Konstrukcja jaką posiada nowoczesny ogród zimowy:<br>
stanowi efektowne dopełnienie bryły domu, nadając mu&nbsp;nowoczesnego charakteru,<br>
chroni przed&nbsp;hałasem, który&nbsp;dochodzi z&nbsp;zewnątrz,<br>
ze&nbsp;względu na&nbsp;szczelność utrzymuje ciepło i&nbsp;pomaga obniżyć bilans energetyczny domu.</p>',
'image' => 'https://ostal.pl/wp-content/uploads/2023/10/DECORATION-PHOTO-1.jpg',
'choose_heading' => 'h2',
'heading_position' => 'textRight',
'additional_class' => 'imageLeft',
'additional_section_class' => 'bg-light',
'additional_wrapper_class' => '',
'cta' => '',
'cta_text' => '',
];
// ── Layout 10: Gallery ────────────────────────────────────────────────
$gallery_urls = [
'https://ostal.pl/wp-content/uploads/2023/10/202-4c7gxxl.jpg',
'https://ostal.pl/wp-content/uploads/2023/10/199-f27gxxl.jpg',
'https://ostal.pl/wp-content/uploads/2023/10/20170608_142315-1024x576.jpg',
'https://ostal.pl/wp-content/uploads/2023/10/IMG_0535-1-1024x768.jpg',
'https://ostal.pl/wp-content/uploads/2023/10/IMG_3754-1-1-1024x768.jpg',
'https://ostal.pl/wp-content/uploads/2023/10/Frame-36-1-1024x728.jpg',
];
$gallery_ids = [];
$gallery_warnings = [];
foreach ($gallery_urls as $url) {
$id = get_attachment_id_by_url($url);
if ($id > 0) {
$gallery_ids[] = $id;
} else {
$gallery_warnings[] = "Warning: Could not find attachment for: $url";
}
}
$sections[] = [
'acf_fc_layout' => 'gallery',
'section_id' => 'galeria',
'section_heading' => 'Nasze realizacje ogrodów zimowych',
'gallery' => $gallery_ids,
'additional_class' => '',
'additional_section_class' => '',
'additional_wrapper_class' => '',
];
// ── Execute migration ─────────────────────────────────────────────────
$result = update_field('sections', $sections, $page_id);
if ($result) {
echo "<h1 style='color: green;'>Migration successful!</h1>";
echo "<p>Created " . count($sections) . " layouts for page $page_id.</p>";
echo "<ul>";
echo "<li>1. hero_with_form</li>";
echo "<li>2. two_col_section (intro)</li>";
echo "<li>3. two_col_section (cechy)</li>";
echo "<li>4. collaboration_steps (5 kroków)</li>";
echo "<li>5. two_col_section (doświadczenie)</li>";
echo "<li>6. two_col_section (planowanie)</li>";
echo "<li>7. two_col_section (kontakt)</li>";
echo "<li>8. two_col_section_with_bg (CTA)</li>";
echo "<li>9. two_col_section (funkcje)</li>";
echo "<li>10. gallery (" . count($gallery_ids) . " images)</li>";
echo "</ul>";
if (!empty($gallery_warnings)) {
echo "<h3 style='color: orange;'>Gallery warnings:</h3>";
echo "<ul>";
foreach ($gallery_warnings as $w) {
echo "<li>$w</li>";
}
echo "</ul>";
echo "<p>Missing gallery images need to be added manually in WP admin.</p>";
}
echo "<hr>";
echo "<h2 style='color: red;'>⚠️ DELETE THIS FILE NOW!</h2>";
echo "<p>File location: " . __FILE__ . "</p>";
echo "<p><a href='/wp-admin/post.php?post=$page_id&action=edit'>Edit page $page_id in admin</a></p>";
echo "<p><a href='/?page_id=$page_id'>Preview page $page_id</a></p>";
} else {
echo "<h1 style='color: red;'>Migration failed!</h1>";
echo "<p>update_field() returned false. Check that:</p>";
echo "<ul>";
echo "<li>ACF Pro is active</li>";
echo "<li>The 'sections' field group exists and is assigned to page $page_id</li>";
echo "<li>The field group contains all required layouts (hero_with_form, two_col_section, two_col_section_with_bg, collaboration_steps, gallery)</li>";
echo "</ul>";
}