', '', '') as $close) { $len = strlen($close); if (substr($trimmed, -$len) === $close) { return substr($trimmed, 0, -$len) . $markup . $close; } } return $html . $markup; } public static function surface_html() { if (self::$placed) { return ''; } if (!class_exists('AIEO_Semantic_Reco_Source') || !AIEO_Semantic_Reco_Source::available()) { return ''; } if (class_exists('AIEO_DMM_Product_Display') && !AIEO_DMM_Product_Display::reco_surface_visible(self::SURFACE)) { return ''; } self::$placed = true; return '
' . '' . '
'; } private static function is_reco_cluster($block) { if (empty($block['blockName']) || 'core/group' !== $block['blockName']) { return false; } $class = isset($block['attrs']['className']) ? (string) $block['attrs']['className'] : ''; $is = ('' !== $class && (false !== strpos($class, 'rooster-recos-cluster') || false !== strpos($class, 'ff-recommendations-cluster'))); return (bool) apply_filters('aieo_semantic_related_is_reco_cluster', $is, $block); } private static function is_main_region($block) { $name = isset($block['blockName']) ? (string) $block['blockName'] : ''; $is = ('core/post-content' === $name) || ('core/group' === $name && isset($block['attrs']['tagName']) && 'main' === $block['attrs']['tagName']); return (bool) apply_filters('aieo_semantic_related_is_main_region', $is, $block); } }