> The sixteen other products. */ public static function products(): array { return array( 'clickclue' => array( 'name' => 'ClickClue', 'category' => __( 'Session replay', 'logged-ai' ), 'description' => __( 'Review consenting visitors’ recorded journeys and investigate where they get stuck.', 'logged-ai' ), 'url' => 'https://plugins.shop/clickclue/', 'featured' => true, 'why' => __( 'See where consenting visitors get stuck while you review what changed on your site.', 'logged-ai' ), 'availability' => __( 'Free edition available', 'logged-ai' ), 'availability_detail' => '', 'preview' => false, 'woocommerce' => '', ), 'redirectnest' => array( 'name' => 'RedirectNest', 'category' => __( 'Links & navigation', 'logged-ai' ), 'description' => __( 'Manage redirects and review broken-link problems.', 'logged-ai' ), 'url' => 'https://plugins.shop/redirectnest/', 'featured' => true, 'why' => __( 'Review broken links and redirects when page addresses change.', 'logged-ai' ), 'availability' => __( 'Free edition available', 'logged-ai' ), 'availability_detail' => '', 'preview' => false, 'woocommerce' => '', ), 'antivirus' => array( 'name' => 'Antivirus.ai', 'category' => __( 'WordPress security', 'logged-ai' ), 'description' => __( 'Review local security findings and decide what to investigate or repair.', 'logged-ai' ), 'url' => 'https://plugins.shop/antivirus/', 'featured' => true, 'why' => __( 'Review local security findings alongside your record of site changes.', 'logged-ai' ), 'availability' => __( 'Free edition available', 'logged-ai' ), 'availability_detail' => '', 'preview' => false, 'woocommerce' => '', ), 'campaignbars' => array( 'name' => 'CampaignBars', 'category' => __( 'Announcements & offers', 'logged-ai' ), 'description' => __( 'Publish targeted announcements, countdowns and copyable coupons without editing your theme.', 'logged-ai' ), 'url' => 'https://plugins.shop/campaignbars/', 'featured' => false, 'why' => '', 'availability' => __( 'Free edition available', 'logged-ai' ), 'availability_detail' => __( 'Pro plans available', 'logged-ai' ), 'preview' => false, 'woocommerce' => __( 'Optional WooCommerce workflows', 'logged-ai' ), ), 'cartdini' => array( 'name' => 'Cartdini', 'category' => __( 'Checkout fields', 'logged-ai' ), 'description' => __( 'Ask checkout questions and keep the answers with each order.', 'logged-ai' ), 'url' => 'https://plugins.shop/cartdini/', 'featured' => false, 'why' => '', 'availability' => __( 'Free edition available', 'logged-ai' ), 'availability_detail' => '', 'preview' => false, 'woocommerce' => __( 'Requires WooCommerce', 'logged-ai' ), ), 'catalogfaq' => array( 'name' => 'Catalog FAQ', 'category' => __( 'Reusable answers', 'logged-ai' ), 'description' => __( 'Write answers once and reuse them across pages, products and FAQ groups.', 'logged-ai' ), 'url' => 'https://plugins.shop/catalogfaq/', 'featured' => false, 'why' => '', 'availability' => __( 'Preview · Free available', 'logged-ai' ), 'availability_detail' => __( 'Paid plans not open', 'logged-ai' ), 'preview' => true, 'woocommerce' => __( 'Optional WooCommerce workflows', 'logged-ai' ), ), 'customfields' => array( 'name' => 'CustomFields', 'category' => __( 'Structured content', 'logged-ai' ), 'description' => __( 'Structure your content with reusable fields, repeaters and display tools.', 'logged-ai' ), 'url' => 'https://plugins.shop/customfields/', 'featured' => false, 'why' => '', 'availability' => __( 'Free edition available', 'logged-ai' ), 'availability_detail' => '', 'preview' => false, 'woocommerce' => '', ), 'frictions' => array( 'name' => 'Frictions', 'category' => __( 'Checkout investigations', 'logged-ai' ), 'description' => __( 'Investigate WooCommerce checkout errors with privacy-conscious replay.', 'logged-ai' ), 'url' => 'https://plugins.shop/frictions/', 'featured' => false, 'why' => '', 'availability' => __( 'Free edition available', 'logged-ai' ), 'availability_detail' => '', 'preview' => false, 'woocommerce' => __( 'Requires WooCommerce', 'logged-ai' ), ), 'killerconversions' => array( 'name' => 'KillerConversions', 'category' => __( 'Forms & enquiries', 'logged-ai' ), 'description' => __( 'Build enquiry forms and keep the entries in WordPress.', 'logged-ai' ), 'url' => 'https://plugins.shop/killerconversions/', 'featured' => false, 'why' => '', 'availability' => __( 'Free edition available', 'logged-ai' ), 'availability_detail' => '', 'preview' => false, 'woocommerce' => '', ), 'newsletterplatform' => array( 'name' => 'Newsletter Platform', 'category' => __( 'Newsletters & welcome emails', 'logged-ai' ), 'description' => __( 'Create newsletters and welcome emails in WordPress using your own mail provider.', 'logged-ai' ), 'url' => 'https://plugins.shop/newsletterplatform/', 'featured' => false, 'why' => '', 'availability' => __( 'Free edition available', 'logged-ai' ), 'availability_detail' => '', 'preview' => false, 'woocommerce' => __( 'Optional WooCommerce workflows', 'logged-ai' ), ), 'orderfloor' => array( 'name' => 'OrderFloor', 'category' => __( 'Order rules', 'logged-ai' ), 'description' => __( 'Set order minimums, quantity limits and pack sizes.', 'logged-ai' ), 'url' => 'https://plugins.shop/orderfloor/', 'featured' => false, 'why' => '', 'availability' => __( 'Free edition available', 'logged-ai' ), 'availability_detail' => '', 'preview' => false, 'woocommerce' => __( 'Requires WooCommerce', 'logged-ai' ), ), 'orderworth' => array( 'name' => 'OrderWorth', 'category' => __( 'Costs & contribution', 'logged-ai' ), 'description' => __( 'Review order contribution after recorded costs, expenses and refunds.', 'logged-ai' ), 'url' => 'https://plugins.shop/orderworth/', 'featured' => false, 'why' => '', 'availability' => __( 'Free edition available', 'logged-ai' ), 'availability_detail' => '', 'preview' => false, 'woocommerce' => __( 'Requires WooCommerce', 'logged-ai' ), ), 'stockcontrols' => array( 'name' => 'StockControls', 'category' => __( 'Inventory & purchasing', 'logged-ai' ), 'description' => __( 'Review stock changes, receive purchase orders and plan replenishment.', 'logged-ai' ), 'url' => 'https://plugins.shop/stockcontrols/', 'featured' => false, 'why' => '', 'availability' => __( 'Free edition available', 'logged-ai' ), 'availability_detail' => '', 'preview' => false, 'woocommerce' => __( 'Requires WooCommerce', 'logged-ai' ), ), 'tocgenius' => array( 'name' => 'TOC Genius', 'category' => __( 'Article navigation', 'logged-ai' ), 'description' => __( 'Help readers navigate long articles with clear contents and stable section links.', 'logged-ai' ), 'url' => 'https://plugins.shop/tocgenius/', 'featured' => false, 'why' => '', 'availability' => __( 'Preview · Free + Pro downloads', 'logged-ai' ), 'availability_detail' => __( 'Directory review pending', 'logged-ai' ), 'preview' => true, 'woocommerce' => '', ), 'wakemycart' => array( 'name' => 'WakeMyCart', 'category' => __( 'Cart follow-up', 'logged-ai' ), 'description' => __( 'Remind consenting shoppers about unfinished carts.', 'logged-ai' ), 'url' => 'https://plugins.shop/wakemycart/', 'featured' => false, 'why' => '', 'availability' => __( 'Free edition available', 'logged-ai' ), 'availability_detail' => '', 'preview' => false, 'woocommerce' => __( 'Requires WooCommerce', 'logged-ai' ), ), 'wishlistgenius' => array( 'name' => 'WishlistGenius', 'category' => __( 'Wishlists & saved products', 'logged-ai' ), 'description' => __( 'Let shoppers save products, share a wishlist and return when they are ready.', 'logged-ai' ), 'url' => 'https://plugins.shop/wishlistgenius/', 'featured' => false, 'why' => '', 'availability' => __( 'Free edition available', 'logged-ai' ), 'availability_detail' => '', 'preview' => false, 'woocommerce' => __( 'Requires WooCommerce', 'logged-ai' ), ), ); } /** Authorize before rendering the read-only collection. */ public static function page(): void { $scope = Scope::current( 'logged_ai_manage_settings' ); if ( is_wp_error( $scope ) ) { wp_die( esc_html__( 'Workspace access denied.', 'logged-ai' ), '', array( 'response' => 403 ) ); } nocache_headers(); $products = self::products(); $featured = array_filter( $products, static fn( array $product ): bool => $product['featured'] ); $remaining = array_filter( $products, static fn( array $product ): bool => ! $product['featured'] ); ?>

$product ) { self::card( $slug, $product ); } ?>

$product ) { self::card( $slug, $product ); } ?>