add_action('wp_head', 'valent_universal_faq_json_ld'); function valent_universal_faq_json_ld() { if (!is_singular()) { return; } global $post; $faq_items = []; // 1. Elementor FAQ widget $elementor_data = get_post_meta($post->ID, '_elementor_data', true); if ($elementor_data) { $blocks = json_decode($elementor_data, true); if ($blocks) { valent_find_faq_blocks($blocks, $faq_items); } } // 2. AIOSEO FAQ block (meta) $aioseo_faq = get_post_meta($post->ID, '_aioseo_faqs', true); if ($aioseo_faq && is_array($aioseo_faq)) { foreach ($aioseo_faq as $faq) { if (!empty($faq['question']) && !empty($faq['answer'])) { $faq_items[] = [ "@type" => "Question", "name" => wp_strip_all_tags($faq['question']), "acceptedAnswer" => [ "@type" => "Answer", "text" => wp_strip_all_tags($faq['answer']) ] ]; } } } // 3. Proste FAQ w treści (Gutenberg, klasyczny edytor) if (empty($faq_items)) { $content = apply_filters('the_content', $post->post_content); $faq_items = array_merge($faq_items, valent_find_faq_in_content($content)); } if (empty($faq_items)) { return; } $faq_schema = [ "@context" => "https://schema.org", "@type" => "FAQPage", "mainEntity" => $faq_items ]; $json_ld = wp_json_encode($faq_schema, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); // Wypisujemy JSON-LD w head - bez dodatkowych białych znaków echo "\n"; return; // ważne, aby zakończyć funkcję } // Funkcja do wykrywania FAQ w Elementor function valent_find_faq_blocks($blocks, &$faq_items) { foreach ($blocks as $block) { if (isset($block['widgetType']) && $block['widgetType'] === 'faq') { if (isset($block['settings']['faqs']) && is_array($block['settings']['faqs'])) { foreach ($block['settings']['faqs'] as $faq) { if (!empty($faq['title']) && !empty($faq['description'])) { $faq_items[] = [ "@type" => "Question", "name" => wp_strip_all_tags($faq['title']), "acceptedAnswer" => [ "@type" => "Answer", "text" => wp_strip_all_tags($faq['description']) ] ]; } } } } if (isset($block['elements']) && is_array($block['elements'])) { valent_find_faq_blocks($block['elements'], $faq_items); } } } // Funkcja do wykrywania prostych FAQ w treści (np. nagłówki h2-h4 i paragrafy) function valent_find_faq_in_content($content) { $faq_items = []; if (empty($content)) return $faq_items; $pattern = '/]*>\s*(Jak|Czy|Co|Dlaczego|Kiedy|Ile|Jaki|Który|Gdzie|Która|Które|Którego|Której|Którym|Których|Jakiego|Jakiej|Jakim|Jakich)\b.*?<\/h[2-4]>\s*]*>(.*?)<\/p>/si'; if (preg_match_all($pattern, $content, $matches, PREG_SET_ORDER)) { foreach ($matches as $match) { $question = trim(strip_tags($match[0])); $answer = trim(strip_tags($match[2])); if ($question !== '' && $answer !== '') { $faq_items[] = [ "@type" => "Question", "name" => $question, "acceptedAnswer" => [ "@type" => "Answer", "text" => $answer ] ]; } } } return $faq_items; }

Profesjonalne wsparcie w remontach i aranżacji wnętrz

Ganek a weranda

Ganek a Weranda: Poznaj Różnice i Stwórz Idealną Strefę Wejściową!
W „Ganek a weranda” rozwiejemy wszelkie wątpliwości i wyjaśnimy, co odróżnia te dwa popularne elementy architektoniczne. Dowiesz się, jakie funkcje pełnią ganek i weranda, jakie materiały najlepiej sprawdzą się przy ich budowie i wykończeniu, a także jak je stylowo zaaranżować, aby stały się wizytówką Twojego domu. Odkryj inspiracje na stworzenie przytulnej i funkcjonalnej strefy wejściowej, która zachwyci gości i umili powroty do domu.

Zainspiruj się naszymi artykułami, które prezentują różnorodne style aranżacji ganków i werand i podpowiadają, jak dopasować je do charakteru Twojego domu. Potrzebujesz profesjonalnego wsparcia w zaprojektowaniu idealnej strefy wejściowej? Nasi eksperci od projektowania wnętrz Kraków pomogą Ci stworzyć przestrzeń, która będzie nie tylko piękna, ale również funkcjonalna i komfortowa. Stwórz zapraszające pierwsze wrażenie!

Przewijanie do góry