| @@ -150,13 +150,31 @@ | ||
| 150 | 150 | * @param array $items Non-empty FAQ items. |
| 151 | 151 | * @return void |
| 152 | 152 | */ |
| 153 | 153 | private function maybe_render_schema(array $settings, array $items): void { |
| 154 | + | |
| 155 | + // The Schema master switch and the matrix's per-content-type switch. | |
| 156 | + // This widget echoes its own <script> rather than registering with | |
| 157 | + // Schema_Graph, so gating the graph never reached it and it kept | |
| 158 | + // publishing with Schema switched off (#688). | |
| 159 | + if (class_exists('ThinkRank\\Frontend\\Schema_Graph') | |
| 160 | + && !\ThinkRank\Frontend\Schema_Graph::output_allowed()) { | |
| 161 | + return; | |
| 162 | + } | |
| 154 | 163 | if ('yes' !== ($settings['output_schema'] ?? 'yes')) { |
| 155 | 164 | return; |
| 156 | 165 | } |
| 157 | 166 | |
| 158 | 167 | if (\Elementor\Plugin::$instance->editor->is_edit_mode()) { |
| 168 | + return; | |
| 169 | + } | |
| 170 | + | |
| 171 | + // The request's schema graph already merged this widget's questions into | |
| 172 | + // its single FAQPage; emitting again would duplicate it (#355). | |
| 173 | + if ( | |
| 174 | + class_exists('ThinkRank\\Frontend\\Schema_Graph') | |
| 175 | + && \ThinkRank\Frontend\Schema_Graph::instance()->absorbed_content_faq() | |
| 176 | + ) { | |
| 159 | 177 | return; |
| 160 | 178 | } |
| 161 | 179 | |
| 162 | 180 | $entities = []; |