Files
ostal.pl/wp-content/themes/ostal_WP/migrate-2707.php
2026-04-11 00:37:12 +02:00

273 lines
14 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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>";
}