[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fNVwDVsg1Zx4bjXHPfX9psR3Ut2v0cAN9aANiM6XrLMc":3},{"slug":4,"name":5,"version":6,"author":7,"author_profile":8,"description":9,"short_description":10,"active_installs":11,"downloaded":12,"rating":13,"num_ratings":14,"last_updated":15,"tested_up_to":16,"requires_at_least":17,"requires_php":18,"tags":19,"homepage":24,"download_link":25,"security_score":26,"vuln_count":27,"unpatched_count":27,"last_vuln_date":28,"fetched_at":29,"vulnerabilities":30,"developer":31,"crawl_stats":28,"alternatives":36,"analysis":134,"fingerprints":937},"tennisthor","Tennis booking system, Sport tournament management – TennisThor","1.2.1","TennisThor","https:\u002F\u002Fprofiles.wordpress.org\u002Ftennisthor\u002F","\u003Cp>Tennisthor plugin comes with different functionality for sports booking system and sport tournament management.\u003C\u002Fp>\n\u003Cp>This is how it works:\u003Cbr \u002F>\n– Install plugin in wordpress admin\u003Cbr \u002F>\n– set some configuration for club\u003Cbr \u002F>\n– register your club in admin\u003Cbr \u002F>\n– create tournament under club for specific sport in admin\u003Cbr \u002F>\n– create group tournament & schema tournament in admin\u003Cbr \u002F>\n– create schedule for tournament in admin\u003C\u002Fp>\n\u003Cp>Users\u002Fplayers can register through frontend, after normal registration they can register them to any tournament from tournament list page & admin will create schedule for tournament so that user\u002Fplayer can see tournament schedule in frontend with many detail of tournament in tournament detail page. User\u002Fplayer can see result of their game & other players game of his tournament after finish game.\u003C\u002Fp>\n\u003Ch4>Features and Benefits\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Facility booking\u003C\u002Fli>\n\u003Cli>Clients\u003C\u002Fli>\n\u003Cli>Messages & Email\u003C\u002Fli>\n\u003Cli>Clients club cards\u003C\u002Fli>\n\u003Cli>Clubs\u003C\u002Fli>\n\u003Cli>Courts\u002FFacility – 15,30,45,60,120 minutes time line, permanent training reservation, abonament reservation\u003C\u002Fli>\n\u003Cli>Staff\u003C\u002Fli>\n\u003Cli>Permission for staff\u003C\u002Fli>\n\u003Cli>Reports\u003C\u002Fli>\n\u003Cli>Tournaments management. Groups or Elimination Tournaments\u003C\u002Fli>\n\u003Cli>Players Ratings\u003C\u002Fli>\n\u003Cli>Teams\u003C\u002Fli>\n\u003Cli>Tournament schedule\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fplugin.bgtenniscenter.com\u002F\" rel=\"nofollow ugc\">Demo Reservation\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>Login as Customer\u003Cbr \u002F>\nEmail: demo_user@tennisthor.com\u003Cbr \u002F>\nPassword: 732353\u003C\u002Fp>\n\u003Cp>Login as Club Owner\u003Cbr \u002F>\nEmail: demo_admin@tennisthor.com\u003Cbr \u002F>\nPassword: Demo345KK\u003C\u002Fp>\n\u003Cp>Configurations\u003Cbr \u002F>\n– Set menu in admin > Appearance > menu according to page created by our plugin automatically for tournaments etc…\u003Cbr \u002F>\n– Go to Configuration page in plugin enter email & password to authenticate for use of this plugin.\u003Cbr \u002F>\n– Select club from dropdown in Configuration page itself.\u003Cbr \u002F>\n– Admin can create tournaments, courts & other required functionality from admin plugin menu “TennisThor”\u003C\u002Fp>\n\u003Ch4>Available Languages\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>English ( en_US )\u003C\u002Fli>\n\u003Cli>Deutsche ( de_DE )\u003C\u002Fli>\n\u003Cli>Bulgarian ( bg_BG )\u003C\u002Fli>\n\u003Cli>Français ( fr_FR ) – We used google translate, please email us if you see texts that have not been translated correctly\u003C\u002Fli>\n\u003Cli>Český ( cz_CZ )- We used google translate, please email us if you see texts that have not been translated correctly\u003C\u002Fli>\n\u003Cli>Italiana ( it_IT )- We used google translate, please email us if you see texts that have not been translated correctly\u003C\u002Fli>\n\u003Cli>Española ( es_ES )- We used google translate, please email us if you see texts that have not been translated correctly\u003C\u002Fli>\n\u003Cli>Русский ( ru_RU )- We used google translate, please email us if you see texts that have not been translated correctly\u003C\u002Fli>\n\u003Cli>Other languages – please email us if you want to use another language\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Sport Presets Included\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Handball\u003C\u002Fli>\n\u003Cli>Ice Hockey\u003C\u002Fli>\n\u003Cli>Lacrosse\u003C\u002Fli>\n\u003Cli>Netball\u003C\u002Fli>\n\u003Cli>Paddle\u003C\u002Fli>\n\u003Cli>Snooker\u003C\u002Fli>\n\u003Cli>Softball\u003C\u002Fli>\n\u003Cli>Squash\u003C\u002Fli>\n\u003Cli>Table Tennis\u003C\u002Fli>\n\u003Cli>Tennis\u003C\u002Fli>\n\u003Cli>Volleyball\u003C\u002Fli>\n\u003Cli>Water Polo\u003C\u002Fli>\n\u003C\u002Ful>\n","Tennis court bookings for tennis courts & other sports such as table tennis, football etc. Facility booking system. Sport tournament management so &hellip;",20,3849,100,2,"2024-05-11T05:20:00.000Z","6.5.8","5.9.3","7.4",[20,21,22,4,23],"sports","tennis","tennis-booking","tournaments","http:\u002F\u002Fwordpress.org\u002Fplugins\u002Ftennisthor\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Ftennisthor.1.2.1.zip",92,0,null,"2026-03-15T15:16:48.613Z",[],{"slug":4,"display_name":7,"profile_url":8,"plugin_count":32,"total_installs":11,"avg_security_score":26,"avg_patch_time_days":33,"trust_score":34,"computed_at":35},1,30,88,"2026-04-05T02:31:44.256Z",[37,59,78,95,111],{"slug":38,"name":39,"version":40,"author":41,"author_profile":42,"description":43,"short_description":44,"active_installs":45,"downloaded":46,"rating":13,"num_ratings":47,"last_updated":48,"tested_up_to":49,"requires_at_least":50,"requires_php":51,"tags":52,"homepage":57,"download_link":58,"security_score":13,"vuln_count":27,"unpatched_count":27,"last_vuln_date":28,"fetched_at":29},"cyberpress","CyberPress","2.5.7","nK","https:\u002F\u002Fprofiles.wordpress.org\u002Fnko\u002F","\u003Cp>Manage eSport teams, players, matches and tournaments. Included individual players and teams profiles. Pages with information about matches and tournaments.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Online Demo \u003Ca href=\"https:\u002F\u002Fgetcyberpress.com\u002F\" rel=\"nofollow ugc\">https:\u002F\u002Fgetcyberpress.com\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Features\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>Tournaments\u003C\u002Fli>\n\u003Cli>Matches\u003C\u002Fli>\n\u003Cli>Teams\u003C\u002Fli>\n\u003Cli>Players\u003C\u002Fli>\n\u003Cli>Games\u003C\u002Fli>\n\u003C\u002Ful>\n","Manage eSport Tournaments, Matches, Teams and Players.",200,16892,4,"2026-01-11T12:26:00.000Z","6.9.4","6.3","7.2",[53,54,55,56,23],"esports","games","matches","teams","https:\u002F\u002Fgetcyberpress.com\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fcyberpress.2.5.7.zip",{"slug":60,"name":61,"version":62,"author":63,"author_profile":64,"description":65,"short_description":66,"active_installs":13,"downloaded":67,"rating":27,"num_ratings":27,"last_updated":68,"tested_up_to":69,"requires_at_least":70,"requires_php":71,"tags":72,"homepage":76,"download_link":77,"security_score":26,"vuln_count":27,"unpatched_count":27,"last_vuln_date":28,"fetched_at":29},"football-standings","Sport livescores: foootball and basketball results, fixtures and standings","1.0.1","footstandings","https:\u002F\u002Fprofiles.wordpress.org\u002Ffootstandings\u002F","\u003Cp>Introducing Sport LiveScores, the ultimate WordPress plugin for every sports enthusiast and website owner! This powerful, free plugin brings real-time football and basketball score updates directly to your WordPress site. With Sport LiveScores, stay updated with all the action from the sports world without the hassle of ads or subscription fees.\u003C\u002Fp>\n\u003Cp>Key Features:\u003C\u002Fp>\n\u003Col>\n\u003Cli>Comprehensive Coverage: Sport LiveScores offers extensive coverage of football and basketball games, ensuring you don’t miss any action. It includes:\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cul>\n\u003Cli>Today’s Games: Get scores and updates on all the football and basketball games happening today.\u003C\u002Fli>\n\u003Cli>Live Games: Stay on top of live matches as they happen.\u003C\u002Fli>\n\u003Cli>Tomorrow’s Games: Preview upcoming games scheduled for the next day.\u003C\u002Fli>\n\u003Cli>Yesterday’s Games: Review scores and highlights from yesterday’s matches.\u003C\u002Fli>\n\u003Cli>Tournament Tracking: Access scores and updates from over 3000 tournaments, including major events like Euro-2024, the English Premier League (EPL), the UEFA Champions League, the NBA, and even the Olympic Games.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Col>\n\u003Cli>\n\u003Cp>User-Friendly Interface: The plugin is fully responsive, providing an optimal viewing experience across all devices. Whether your audience is on desktop, tablet, or mobile, Sport LiveScores adjusts seamlessly.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>Timezone Autodetection: Sport LiveScores intelligently detects the user’s timezone, displaying the match times and event data accurately for their specific location. No more timezone confusion for your international audience!\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>Multi-Language Support: Break language barriers with Sport LiveScores’s support for 21 languages, making your website accessible to a global audience.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>Customization at Your Fingertips: Tailor the look and feel of Sport LiveScores to match your website’s theme. The plugin allows you to customize colors, fonts, and layout, offering a consistent user experience.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>No Ads, Absolutely Free: Enjoy all the features of Sport LiveScores without any advertisements. This plugin is completely free, providing a clean and uninterrupted experience for both you and your users.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>Sport LiveScores is more than just a plugin – it’s a comprehensive solution for integrating live sports scores into your WordPress site. Whether you’re a sports blogger, a fan site, or a news portal, Sport LiveScores enriches your content, engages your audience, and elevates your website’s appeal.\u003C\u002Fp>\n\u003Cp>Get Sport LiveScores now and transform your WordPress site into a dynamic sports hub!\u003C\u002Fp>\n\u003Cp>Sport LiveScores utilizes the external service 777score.com to obtain up-to-date information about the schedule and results of football matches. 777score.com is a recognized source of sports information trusted by the sports community. This service provides a wide range of information about football, including various leagues, tournaments, and championships from around the world.\u003C\u002Fp>\n\u003Cp>The functioning of the 777score.com service is based on delivering real-time data about selected matches, including the match start time, its status, incidents, and the score. Users have the ability to view detailed information about matches, such as goal lists, received cards, and other key events, without the need to refresh the page. This means that data is automatically updated without requiring page reload.\u003C\u002Fp>\n","Add auto-updated live scores information about more than 3000 football and basketball tournaments and standings with ease!",9359,"2024-09-02T10:41:00.000Z","6.6.5","4.1","",[73,74,20,75,23],"basketball","football","team","http:\u002F\u002Fwordpress.org\u002Fextend\u002Fplugins\u002Ffootball-standings\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Ffootball-standings.1.0.1.zip",{"slug":79,"name":80,"version":81,"author":82,"author_profile":83,"description":84,"short_description":85,"active_installs":27,"downloaded":86,"rating":13,"num_ratings":32,"last_updated":87,"tested_up_to":49,"requires_at_least":88,"requires_php":51,"tags":89,"homepage":93,"download_link":94,"security_score":13,"vuln_count":27,"unpatched_count":27,"last_vuln_date":28,"fetched_at":29},"court-booking-system","Court Booking System","3.0.0","michelebru","https:\u002F\u002Fprofiles.wordpress.org\u002Fmichelebru\u002F","\u003Cp>\u003Cstrong>Court Booking System\u003C\u002Fstrong> is a comprehensive WordPress plugin designed for tennis clubs, padel centers, and multi-sport facilities. Manage court bookings, instructors, and revenue all from your WordPress dashboard.\u003C\u002Fp>\n\u003Ch4>Key Features\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\u003Cstrong>Flexible Court Configuration\u003C\u002Fstrong> – Support for 1-100 courts\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Three Booking Types\u003C\u002Fstrong> – Regular matches, lessons with instructors, and tournaments\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Instructor Management\u003C\u002Fstrong> – Add instructors with revenue sharing percentages\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Revenue Tracking\u003C\u002Fstrong> – Detailed reports by booking type and instructor\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Mobile-Friendly Frontend\u003C\u002Fstrong> – Public calendar optimized for smartphones\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Customizable Operating Hours\u003C\u002Fstrong> – Set opening and closing times\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Payment Tracking\u003C\u002Fstrong> – Track individual player payments with quick toggle\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Multiple Participants\u003C\u002Fstrong> – Up to 4 players per booking with optional phone numbers\u003C\u002Fli>\n\u003Cli>\u003Cstrong>US Dollar Currency\u003C\u002Fstrong> – All bookings in USD\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Auto-Refresh\u003C\u002Fstrong> – Frontend calendar updates every 100 seconds\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Perfect For\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Tennis clubs\u003C\u002Fli>\n\u003Cli>Padel centers\u003C\u002Fli>\n\u003Cli>Racquet sports facilities\u003C\u002Fli>\n\u003Cli>Multi-court sports complexes\u003C\u002Fli>\n\u003Cli>Recreation centers\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Booking Types\u003C\u002Fh4>\n\u003Col>\n\u003Cli>\u003Cstrong>Regular Match\u003C\u002Fstrong> – 2-4 players (tennis singles\u002Fdoubles or padel)\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Lesson\u003C\u002Fstrong> – 1-4 participants with assigned instructor\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Tournament\u002FExhibition\u003C\u002Fstrong> – Special events with optional revenue tracking\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch4>Frontend Calendar\u003C\u002Fh4>\n\u003Cp>Display court availability to visitors using the shortcode:\u003Cbr \u002F>\n    [padel_booking]\u003C\u002Fp>\n\u003Cp>Features:\u003Cbr \u002F>\n* Real-time availability display\u003Cbr \u002F>\n* Color-coded booking types\u003Cbr \u002F>\n* Date selector\u003Cbr \u002F>\n* Auto-refresh every 100 seconds\u003Cbr \u002F>\n* Responsive mobile design\u003Cbr \u002F>\n* Customizable booking message\u003C\u002Fp>\n\u003Ch4>Backend Management\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Intuitive booking interface\u003C\u002Fli>\n\u003Cli>Quick payment status toggle\u003C\u002Fli>\n\u003Cli>Daily revenue totals\u003C\u002Fli>\n\u003Cli>Booking search and filters\u003C\u002Fli>\n\u003Cli>Edit and delete bookings\u003C\u002Fli>\n\u003Cli>Instructor revenue reports\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Reports\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Revenue by booking type\u003C\u002Fli>\n\u003Cli>Revenue by instructor\u003C\u002Fli>\n\u003Cli>Total bookings count\u003C\u002Fli>\n\u003Cli>Customizable date ranges\u003C\u002Fli>\n\u003Cli>Export-ready data\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Support\u003C\u002Fh3>\n\u003Cp>For support, feature requests, or bug reports:\u003Cbr \u002F>\n* Visit: https:\u002F\u002Ffreecmsplugins.com\u003Cbr \u002F>\n* Documentation: Available on plugin website\u003C\u002Fp>\n\u003Ch3>Credits\u003C\u002Fh3>\n\u003Cp>Developed by Michele BRUNO\u003Cbr \u002F>\nWebsite: https:\u002F\u002Ffreecmsplugins.com\u003C\u002Fp>\n\u003Ch3>Privacy Policy\u003C\u002Fh3>\n\u003Cp>This plugin does not collect, store, or transmit any personal data outside your WordPress installation. All booking information is stored in your WordPress database.\u003C\u002Fp>\n\u003Ch3>License\u003C\u002Fh3>\n\u003Cp>This plugin is licensed under the GPL v2 or later.\u003C\u002Fp>\n","Complete booking system for tennis and padel courts with flexible time slots, instructor management, and revenue tracking.",147,"2026-02-22T10:31:00.000Z","5.0",[90,91,92,20,21],"booking","court","padel","https:\u002F\u002Ffreecmsplugins.com\u002Fcourt-booking-system","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fcourt-booking-system.3.0.0.zip",{"slug":96,"name":97,"version":98,"author":99,"author_profile":100,"description":101,"short_description":102,"active_installs":27,"downloaded":103,"rating":27,"num_ratings":27,"last_updated":71,"tested_up_to":104,"requires_at_least":105,"requires_php":18,"tags":106,"homepage":108,"download_link":109,"security_score":13,"vuln_count":27,"unpatched_count":27,"last_vuln_date":28,"fetched_at":110},"sports-court-designer","Sports Court Designer","1.7.1","hayksaakian","https:\u002F\u002Fprofiles.wordpress.org\u002Fhayksaakian\u002F","\u003Cp>Sports Court Designer is a free, open-source WordPress plugin that allows construction companies to embed an interactive sports court designer on their website. Clients can preview different color combinations for tennis, basketball, and pickleball courts in real-time.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Perfect for:\u003C\u002Fstrong>\u003Cbr \u002F>\n* Court construction companies\u003Cbr \u002F>\n* Sports facility contractors\u003Cbr \u002F>\n* Athletic surface installers\u003Cbr \u002F>\n* Recreation center planners\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Key Features:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Three Court Types\u003C\u002Fstrong> – Tennis, Basketball, and Pickleball courts\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Real-time Color Preview\u003C\u002Fstrong> – Instant visual feedback as colors are selected\u003C\u002Fli>\n\u003Cli>\u003Cstrong>17 Professional Colors\u003C\u002Fstrong> – Industry-standard court colors including LEED-certified options\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Company Branding\u003C\u002Fstrong> – Add your company logo to all court designs\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Download Designs\u003C\u002Fstrong> – Clients can save court designs as PNG images\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Responsive Design\u003C\u002Fstrong> – Works perfectly on desktop, tablet, and mobile devices\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Multiple Integration Methods\u003C\u002Fstrong> – Use via shortcode or Gutenberg block\u003C\u002Fli>\n\u003Cli>\u003Cstrong>No External Dependencies\u003C\u002Fstrong> – All rendering done client-side for fast performance\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Available Colors Include:\u003C\u002Fstrong>\u003Cbr \u002F>\n* Ice Blue, Light Blue, Blue\u003Cbr \u002F>\n* Light Green, Forest Green, Dark Green\u003Cbr \u002F>\n* Tournament Purple, Black, Maroon\u003Cbr \u002F>\n* Red, Brite Red, Orange, Yellow\u003Cbr \u002F>\n* Sandstone, Beige, Dove Gray\u003Cbr \u002F>\n* Brown (ColorPlus fusion blend)\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Customizable Court Areas:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>\u003Cem>Tennis Courts:\u003C\u002Fem>\u003Cbr \u002F>\n* Court (inner play area)\u003Cbr \u002F>\n* Border (outer area)\u003C\u002Fp>\n\u003Cp>\u003Cem>Basketball Courts:\u003C\u002Fem>\u003Cbr \u002F>\n* Court surface\u003Cbr \u002F>\n* Border\u003Cbr \u002F>\n* 3-Point Area\u003Cbr \u002F>\n* Key (paint area)\u003Cbr \u002F>\n* Top of Key\u003Cbr \u002F>\n* Center Court Circle\u003C\u002Fp>\n\u003Cp>\u003Cem>Pickleball Courts:\u003C\u002Fem>\u003Cbr \u002F>\n* Court\u003Cbr \u002F>\n* Border\u003Cbr \u002F>\n* Non-Volley Zone (kitchen)\u003C\u002Fp>\n\u003Ch3>Usage\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>Via Shortcode:\u003C\u002Fstrong>\u003Cbr \u002F>\n    [court_designer type=”tennis”]\u003Cbr \u002F>\n    [court_designer type=”basketball”]\u003Cbr \u002F>\n    [court_designer type=”pickleball”]\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Via Gutenberg Block:\u003C\u002Fstrong>\u003Cbr \u002F>\n1. In the block editor, search for “Sports Court Designer”\u003Cbr \u002F>\n2. Add the block to your page\u003Cbr \u002F>\n3. Select the court type in the block settings\u003C\u002Fp>\n\u003Ch3>License\u003C\u002Fh3>\n\u003Cp>This plugin is licensed under the GPL v2 or later.\u003C\u002Fp>\n\u003Ch3>Credits\u003C\u002Fh3>\n\u003Cp>Developed by Hayk Saakian\u003C\u002Fp>\n","Interactive sports court designer for tennis, basketball, pickleball, and combo courts with customizable colors for construction companies.",357,"6.8.5","5.8",[73,91,107,20,21],"pickleball","https:\u002F\u002Fgithub.com\u002FHaykSaakian\u002Fwp-court-designer","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fsports-court-designer.1.7.1.zip","2026-03-15T10:48:56.248Z",{"slug":112,"name":113,"version":114,"author":115,"author_profile":116,"description":117,"short_description":118,"active_installs":119,"downloaded":120,"rating":121,"num_ratings":122,"last_updated":123,"tested_up_to":49,"requires_at_least":124,"requires_php":71,"tags":125,"homepage":130,"download_link":131,"security_score":26,"vuln_count":132,"unpatched_count":27,"last_vuln_date":133,"fetched_at":29},"sportspress","SportsPress – Sports Club & League Manager","2.7.29","ThemeBoy","https:\u002F\u002Fprofiles.wordpress.org\u002Fthemeboy\u002F","\u003Ch4>Create a Professional Sports Website\u003C\u002Fh4>\n\u003Cp>Transform your WordPress blog into a fully configurable team, club, or league website. Features a suite of sports tools including fixtures, results, automated standings, players rankings, and individual profiles for clubs, players, and staff.\u003C\u002Fp>\n\u003Cspan class=\"embed-youtube\" style=\"text-align:center; display: block;\">\u003Ciframe loading=\"lazy\" class=\"youtube-player\" width=\"750\" height=\"422\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002FKQyga_C5a6M?version=3&rel=1&showsearch=0&showinfo=1&iv_load_policy=1&fs=1&hl=en-US&autohide=2&wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\">\u003C\u002Fiframe>\u003C\u002Fspan>\n\u003Ch4>Industry Reviews\u003C\u002Fh4>\n\u003Cblockquote>\n\u003Cp>“\u003Cem>Best WordPress Sports plugins: With premade templates for different sports, SportsPress pretty much covers the range of what almost everyone needs. It’s highly reviewed, and does exactly what it says it will do.\u003C\u002Fem>” — \u003Ca href=\"https:\u002F\u002Fwww.elegantthemes.com\u002Fblog\u002Fresources\u002F5-best-wordpress-sports-plugins\" rel=\"nofollow ugc\">Elegant Themes\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>“\u003Cem>Script of the Day: While the WordPress repository holds various team and sports-related plugins, few of them come close to what you can achieve with SportsPress.\u003C\u002Fem>” — \u003Ca href=\"http:\u002F\u002Fnews.softpedia.com\u002Fnews\u002FScript-of-the-Day-SportsPress-409247.shtml\" rel=\"nofollow ugc\">Softpedia\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>“\u003Cem>SportsPress is probably one of the most complete WordPress sports plugins out there. If you have a sports website and you’re looking to showcase your team, or even your entire league, then give this plugin a try.\u003C\u002Fem>” — \u003Ca href=\"https:\u002F\u002Fwww.hostgator.com\u002Fblog\u002Fbest-wordpress-plugins-themes-sports-websites\u002F\" rel=\"nofollow ugc\">HostGator\u003C\u002Fa>\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch4>Features\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Equation Builder\u003C\u002Fli>\n\u003Cli>Club Profiles with Player List\u003C\u002Fli>\n\u003Cli>Automated League Standings with Club Logos\u003C\u002Fli>\n\u003Cli>Events (Fixtures & Results) with Player Performance\u003C\u002Fli>\n\u003Cli>Events Calendar\u003C\u002Fli>\n\u003Cli>Player Profiles & Statistics\u003C\u002Fli>\n\u003Cli>Player Lists\u003C\u002Fli>\n\u003Cli>Staff Profiles\u003C\u002Fli>\n\u003Cli>Select Current Club and Previous Clubs\u003C\u002Fli>\n\u003Cli>Season Archives\u003C\u002Fli>\n\u003Cli>Venue Information & Maps\u003C\u002Fli>\n\u003Cli>Statistics & League Table Columns Configuration\u003C\u002Fli>\n\u003Cli>Sport Presets\u003C\u002Fli>\n\u003Cli>Switch Between Club vs Club and Player vs Player Mode.\u003C\u002Fli>\n\u003Cli>Import Events, Clubs, Players, and Staff from CSV Files\u003C\u002Fli>\n\u003Cli>Easy Shortcodes Menu in Editor\u003C\u002Fli>\n\u003Cli>Events Integrate with iCal\u003C\u002Fli>\n\u003Cli>Certified compatibility with \u003Ca href=\"http:\u002F\u002Fwpml.org\u002Fplugin\u002Fsportspress\u002F\" rel=\"nofollow ugc\">WPML\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>More details about each feature are available on the \u003Ca href=\"http:\u002F\u002Ftboy.co\u002Fpro\" rel=\"nofollow ugc\">SportsPress Website\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch4>Free Extensions\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fsportspress-for-baseball\u002F\" rel=\"ugc\">SportsPress for Baseball\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fsportspress-for-basketball\u002F\" rel=\"ugc\">SportsPress for Basketball\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fsportspress-for-cricket\u002F\" rel=\"ugc\">SportsPress for Cricket\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fsportspress-for-soccer\u002F\" rel=\"ugc\">SportsPress for Football (Soccer)\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fsportspress-for-golf\u002F\" rel=\"ugc\">SportsPress for Golf\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fsportspress-for-volleyball\u002F\" rel=\"ugc\">SportsPress for Volleyball\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>SportsPress Pro\u003C\u002Fh4>\n\u003Cp>Looking for more advanced sports functionality? Upgrade to \u003Ca href=\"http:\u002F\u002Ftboy.co\u002Fpro\" rel=\"nofollow ugc\">SportsPress Pro\u003C\u002Fa> to get access to more advanced features for your team, club, or league website.\u003C\u002Fp>\n\u003Ch4>Available Languages\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>English – English ( en_US )\u003C\u002Fli>\n\u003Cli>Arabic – العربية ( ar )\u003C\u002Fli>\n\u003Cli>Armenian – Հայերեն ( hy )\u003C\u002Fli>\n\u003Cli>Bulgarian – Български ( bg_BG )\u003C\u002Fli>\n\u003Cli>Chinese (China) – 中文 ( zh_CN )\u003C\u002Fli>\n\u003Cli>Croatian – Hrvatski ( hr )\u003C\u002Fli>\n\u003Cli>Czech – Čeština ( cs_CZ )\u003C\u002Fli>\n\u003Cli>Danish – Dansk ( da_DK )\u003C\u002Fli>\n\u003Cli>Dutch – Nederlands ( nl_NL )\u003C\u002Fli>\n\u003Cli>French – Français ( fr_FR )\u003C\u002Fli>\n\u003Cli>Finnish – Suomi ( fi )\u003C\u002Fli>\n\u003Cli>German – Deutsch ( de_DE )\u003C\u002Fli>\n\u003Cli>Greek – Ελληνικά ( el_GR )\u003C\u002Fli>\n\u003Cli>Hungarian – Magyar ( hu_HU )\u003C\u002Fli>\n\u003Cli>Italian – Italiano ( it_IT )\u003C\u002Fli>\n\u003Cli>Japanese – 日本語 ( ja )\u003C\u002Fli>\n\u003Cli>Korean – 한국어 ( ko_KR )\u003C\u002Fli>\n\u003Cli>Macedonian – македонски ( mk_MK )\u003C\u002Fli>\n\u003Cli>Norwegian Bokmål – Norsk bokmål ( nb_NO )\u003C\u002Fli>\n\u003Cli>Persian – فارسی ( fa_IR )\u003C\u002Fli>\n\u003Cli>Polish – Polski ( pl_PL )\u003C\u002Fli>\n\u003Cli>Portuguese (Brazil) – Português do Brasil ( pt_BR )\u003C\u002Fli>\n\u003Cli>Portuguese (Portugal) – Português ( pt_PT )\u003C\u002Fli>\n\u003Cli>Romanian – Română ( ro_RO )\u003C\u002Fli>\n\u003Cli>Russian – Русский ( ru_RU )\u003C\u002Fli>\n\u003Cli>Slovak – Slovenčina ( sk_SK )\u003C\u002Fli>\n\u003Cli>Slovenian – Slovenija ( sl_SI )\u003C\u002Fli>\n\u003Cli>Spanish – Español ( es_ES )\u003C\u002Fli>\n\u003Cli>Swedish – Svenska ( sv_SE )\u003C\u002Fli>\n\u003Cli>Tagalog – Tagalog ( tl )\u003C\u002Fli>\n\u003Cli>Tamil – தமிழ் ( ta_IN )\u003C\u002Fli>\n\u003Cli>Thai – ไทย ( th )\u003C\u002Fli>\n\u003Cli>Turkish – Türkçe ( tr_TR )\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Sport Presets Included\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>American Football\u003C\u002Fli>\n\u003Cli>Association Football (Soccer)\u003C\u002Fli>\n\u003Cli>Australian Rules Football\u003C\u002Fli>\n\u003Cli>Baseball\u003C\u002Fli>\n\u003Cli>Basketball\u003C\u002Fli>\n\u003Cli>Cricket\u003C\u002Fli>\n\u003Cli>Darts\u003C\u002Fli>\n\u003Cli>Golf\u003C\u002Fli>\n\u003Cli>Handball\u003C\u002Fli>\n\u003Cli>Ice Hockey\u003C\u002Fli>\n\u003Cli>Lacrosse\u003C\u002Fli>\n\u003Cli>Netball\u003C\u002Fli>\n\u003Cli>Rugby League\u003C\u002Fli>\n\u003Cli>Rugby Union\u003C\u002Fli>\n\u003Cli>Snooker\u003C\u002Fli>\n\u003Cli>Softball\u003C\u002Fli>\n\u003Cli>Squash\u003C\u002Fli>\n\u003Cli>Table Tennis\u003C\u002Fli>\n\u003Cli>Tennis\u003C\u002Fli>\n\u003Cli>Volleyball\u003C\u002Fli>\n\u003Cli>Water Polo\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Esports Presets\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Counter-Strike: Global Offensive\u003C\u002Fli>\n\u003Cli>Dota 2\u003C\u002Fli>\n\u003Cli>League of Legends\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>SportsPress Themes for Clubs\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\u003Ca href=\"http:\u002F\u002Ftboy.co\u002Fcourtside\" rel=\"nofollow ugc\">Courtside\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"http:\u002F\u002Ftboy.co\u002Femblem\" rel=\"nofollow ugc\">Emblem\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"http:\u002F\u002Ftboy.co\u002Ffc\" rel=\"nofollow ugc\">Football Club\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"http:\u002F\u002Ftboy.co\u002Fmarquee\" rel=\"nofollow ugc\">Marquee\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"http:\u002F\u002Ftboy.co\u002Fpremier\" rel=\"nofollow ugc\">Premier\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"http:\u002F\u002Ftboy.co\u002Frp\" rel=\"nofollow ugc\">Rookie Plus\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"http:\u002F\u002Ftboy.co\u002Fvarsity\" rel=\"nofollow ugc\">Varsity\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Get Involved\u003C\u002Fh4>\n\u003Cp>Feel free to share your suggestions with us so we can continue to develop awesome sports club features for you guys!\u003C\u002Fp>\n\u003Cp>Developers can contribute via the \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FThemeBoy\u002FSportsPress\u002Fblob\u002Fmaster\u002FCONTRIBUTING.md\" rel=\"nofollow ugc\">SportsPress GitHub Repository\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>Translators can contribute to SportsPress translations through \u003Ca href=\"https:\u002F\u002Ftranslate.wordpress.org\u002Fprojects\u002Fwp-plugins\u002Fsportspress\" rel=\"nofollow ugc\">GlotPress\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch4>Stay Current\u003C\u002Fh4>\n\u003Cp>To keep up with the latest updates and new features, be sure to do the following:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Visit the \u003Ca href=\"http:\u002F\u002Ftboy.co\u002Fpro\" rel=\"nofollow ugc\">SportsPress Pro homepage\u003C\u002Fa>.\u003C\u002Fli>\n\u003Cli>Subscribe to our \u003Ca href=\"http:\u002F\u002Ftboy.co\u002Fyoutube\" rel=\"nofollow ugc\">YouTube channel\u003C\u002Fa>.\u003C\u002Fli>\n\u003Cli>Follow ThemeBoy on \u003Ca href=\"http:\u002F\u002Ftboy.co\u002Ffacebook\" rel=\"nofollow ugc\">Facebook\u003C\u002Fa> & \u003Ca href=\"http:\u002F\u002Ftboy.co\u002Ftwitter\" rel=\"nofollow ugc\">Twitter\u003C\u002Fa>.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Please Rate, Vote, and Enjoy!\u003C\u002Fh4>\n\u003Cp>Your feedback is much appreciated and makes all the difference in improving SportsPress.\u003C\u002Fp>\n","SportsPress is an extendable all-in-one sports data plugin that helps sports clubs set up and manage a league or club site quickly and easily.",10000,952747,94,368,"2026-02-12T05:49:00.000Z","3.8",[126,127,128,129,20],"club","event","fixtures","league","http:\u002F\u002Fthemeboy.com\u002Fsportspress\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fsportspress.2.7.29.zip",6,"2026-02-03 19:45:14",{"attackSurface":135,"codeSignals":286,"taintFlows":700,"riskAssessment":923,"analyzedAt":936},{"hooks":136,"ajaxHandlers":254,"restRoutes":255,"shortcodes":256,"cronEvents":284,"entryPointCount":285,"unprotectedCount":27},[137,143,148,150,154,157,161,163,167,170,174,177,181,184,188,190,193,195,199,202,206,209,213,215,219,221,225,228,232,235,239,241,246,250],{"type":138,"name":139,"callback":140,"file":141,"line":142},"action","admin_menu","tennisthor_plugin_admin_menu","admin\\index.php",3,{"type":138,"name":144,"callback":145,"file":146,"line":147},"admin_post_nopriv_tennisthor_logout_hook","the_logout_hook_callback","include\\login.php",5,{"type":138,"name":149,"callback":145,"file":146,"line":132},"admin_post_tennisthor_logout_hook",{"type":138,"name":151,"callback":152,"file":146,"line":153},"admin_post_nopriv_tennisthor_login_hook","tennisthor_login_hook_callback",55,{"type":138,"name":155,"callback":152,"file":146,"line":156},"admin_post_tennisthor_login_hook",56,{"type":138,"name":158,"callback":159,"file":160,"line":142},"admin_post_nopriv_tennisthor_email_verify_hook","tennisthor_email_verify_hook_callback","include\\register.php",{"type":138,"name":162,"callback":159,"file":160,"line":47},"admin_post_tennisthor_email_verify_hook",{"type":138,"name":164,"callback":165,"file":160,"line":166},"admin_post_nopriv_tennisthor_email_valid_hook","tennisthor_email_valid_hook_callback",47,{"type":138,"name":168,"callback":165,"file":160,"line":169},"admin_post_tennisthor_email_valid_hook",48,{"type":138,"name":171,"callback":172,"file":160,"line":173},"admin_post_nopriv_tennisthor_search_city_hook","tennisthor_search_city_hook_callback",75,{"type":138,"name":175,"callback":172,"file":160,"line":176},"admin_post_tennisthor_search_city_hook",76,{"type":138,"name":178,"callback":179,"file":160,"line":180},"admin_post_nopriv_tennisthor_register_hook","the_register_hook_callback",102,{"type":138,"name":182,"callback":179,"file":160,"line":183},"admin_post_tennisthor_register_hook",103,{"type":138,"name":185,"callback":186,"file":187,"line":147},"admin_post_nopriv_tennisthor_get_booking_url_hook","tennisthor_get_booking_url_hook_callback","include\\reservation-timeline.php",{"type":138,"name":189,"callback":186,"file":187,"line":132},"admin_post_tennisthor_get_booking_url_hook",{"type":138,"name":191,"callback":192,"file":187,"line":166},"admin_post_nopriv_tennisthor_load_timeline_calendar_hook","tennisthor_load_timeline_calendar_hook_callback",{"type":138,"name":194,"callback":192,"file":187,"line":169},"admin_post_tennisthor_load_timeline_calendar_hook",{"type":138,"name":196,"callback":197,"file":187,"line":198},"admin_post_nopriv_tennisthor_res_reload_courts_hook","the_res_reload_courts_hook_callback",78,{"type":138,"name":200,"callback":197,"file":187,"line":201},"admin_post_tennisthor_res_reload_courts_hook",79,{"type":138,"name":203,"callback":204,"file":187,"line":205},"admin_post_nopriv_tennisthor_res_reload_events_hook","the_res_reload_events_hook_callback",109,{"type":138,"name":207,"callback":204,"file":187,"line":208},"admin_post_tennisthor_res_reload_events_hook",110,{"type":138,"name":210,"callback":211,"file":212,"line":142},"admin_post_nopriv_tennisthor_chat_hook","the_tennisthor_chat_hook_callback","include\\tournament-detail.php",{"type":138,"name":214,"callback":211,"file":212,"line":47},"admin_post_tennisthor_chat_hook",{"type":138,"name":216,"callback":217,"file":212,"line":218},"admin_post_nopriv_tennisthor_sch_reload_courts_hook","the_sch_reload_courts_hook_callback",54,{"type":138,"name":220,"callback":217,"file":212,"line":153},"admin_post_tennisthor_sch_reload_courts_hook",{"type":138,"name":222,"callback":223,"file":212,"line":224},"admin_post_nopriv_tennisthor_sch_reload_games_hook","the_sch_reload_games_hook_callback",84,{"type":138,"name":226,"callback":223,"file":212,"line":227},"admin_post_tennisthor_sch_reload_games_hook",85,{"type":138,"name":229,"callback":230,"file":212,"line":231},"admin_post_nopriv_tennisthor_tournament_detail_hook","the_tennisthor_tournament_detail_hook_callback",116,{"type":138,"name":233,"callback":230,"file":212,"line":234},"admin_post_tennisthor_tournament_detail_hook",117,{"type":138,"name":236,"callback":237,"file":238,"line":142},"admin_post_nopriv_tennisthor_tournaments_hook","the_tennisthor_tournaments_hook_callback","include\\tournaments.php",{"type":138,"name":240,"callback":237,"file":238,"line":47},"admin_post_tennisthor_tournaments_hook",{"type":138,"name":242,"callback":243,"priority":32,"file":244,"line":245},"init","tennisthor_session","tennisthor.php",13,{"type":138,"name":247,"callback":248,"file":244,"line":249},"admin_notices","tennisthor_general_admin_notice",217,{"type":138,"name":251,"callback":252,"file":244,"line":253},"wp_head","tennisthor_header_scripts",226,[],[],[257,261,265,269,273,277,281],{"tag":258,"callback":259,"file":146,"line":260},"tennisthor_login","tennisthor_login_shortcode",108,{"tag":262,"callback":263,"file":264,"line":14},"tennisthor_rating","tennisthor_rating_shortcode","include\\rating.php",{"tag":266,"callback":267,"file":160,"line":268},"tennisthor_register","tennisthor_register_shortcode",158,{"tag":270,"callback":271,"file":187,"line":272},"tennisthor_reservation_timeline","tennisthor_reservation_timeline_shortcode",152,{"tag":274,"callback":275,"file":276,"line":14},"tennisthor_thor_power_rating","tennisthor_thor_power_rating_shortcode","include\\thor_power_rating.php",{"tag":278,"callback":279,"file":212,"line":280},"tennisthor_tournament_detail","tennisthor_tournament_detail_shortcode",130,{"tag":282,"callback":283,"file":238,"line":166},"tennisthor_tournaments","tennisthor_tournaments_shortcode",[],7,{"dangerousFunctions":287,"sqlUsage":288,"outputEscaping":290,"fileOperations":27,"externalRequests":299,"nonceChecks":27,"capabilityChecks":27,"bundledLibraries":696},[],{"prepared":27,"raw":27,"locations":289},[],{"escaped":291,"rawEcho":292,"locations":293},131,254,[294,298,300,301,302,303,305,307,308,310,311,313,315,317,319,321,323,324,325,327,329,331,333,335,337,338,339,341,343,345,346,348,350,352,354,356,358,360,362,363,365,366,368,369,371,372,374,376,378,380,382,384,386,388,390,392,394,396,397,399,401,403,405,407,409,411,413,415,417,419,421,423,424,426,427,428,430,432,433,434,436,437,438,439,441,443,445,447,449,451,453,455,457,459,461,463,465,466,468,470,472,474,476,477,478,479,481,482,483,484,486,487,489,490,492,493,494,495,496,497,499,500,502,503,505,506,508,509,511,512,513,514,515,516,517,518,520,522,524,525,527,529,531,532,534,535,537,539,540,542,543,545,547,549,551,553,554,555,557,559,561,563,565,567,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,588,589,591,592,593,594,596,597,600,602,604,605,606,607,609,610,612,614,616,618,620,621,622,623,625,626,627,628,629,630,632,634,635,636,637,639,641,643,645,647,649,650,652,654,656,657,658,660,661,663,665,666,667,669,671,672,673,674,675,677,678,679,681,682,683,685,687,688,689,690,691,692,694],{"file":295,"line":296,"context":297},"admin\\functions.php",24,"raw output",{"file":295,"line":299,"context":297},25,{"file":295,"line":299,"context":297},{"file":295,"line":299,"context":297},{"file":295,"line":153,"context":297},{"file":141,"line":304,"context":297},124,{"file":141,"line":306,"context":297},203,{"file":141,"line":306,"context":297},{"file":141,"line":309,"context":297},216,{"file":141,"line":249,"context":297},{"file":312,"line":285,"context":297},"include\\functions.php",{"file":146,"line":314,"context":297},146,{"file":146,"line":316,"context":297},157,{"file":160,"line":318,"context":297},69,{"file":160,"line":320,"context":297},97,{"file":160,"line":322,"context":297},219,{"file":160,"line":322,"context":297},{"file":160,"line":322,"context":297},{"file":160,"line":326,"context":297},225,{"file":160,"line":328,"context":297},227,{"file":160,"line":330,"context":297},234,{"file":160,"line":332,"context":297},237,{"file":160,"line":334,"context":297},240,{"file":160,"line":336,"context":297},244,{"file":160,"line":292,"context":297},{"file":160,"line":292,"context":297},{"file":160,"line":340,"context":297},261,{"file":160,"line":342,"context":297},267,{"file":160,"line":344,"context":297},274,{"file":160,"line":344,"context":297},{"file":160,"line":347,"context":297},281,{"file":160,"line":349,"context":297},284,{"file":160,"line":351,"context":297},285,{"file":160,"line":353,"context":297},290,{"file":160,"line":355,"context":297},294,{"file":160,"line":357,"context":297},298,{"file":160,"line":359,"context":297},301,{"file":160,"line":361,"context":297},322,{"file":160,"line":361,"context":297},{"file":160,"line":364,"context":297},331,{"file":160,"line":364,"context":297},{"file":160,"line":367,"context":297},337,{"file":160,"line":367,"context":297},{"file":160,"line":370,"context":297},343,{"file":160,"line":370,"context":297},{"file":160,"line":373,"context":297},348,{"file":160,"line":375,"context":297},350,{"file":160,"line":377,"context":297},351,{"file":160,"line":379,"context":297},352,{"file":160,"line":381,"context":297},353,{"file":160,"line":383,"context":297},358,{"file":160,"line":385,"context":297},360,{"file":160,"line":387,"context":297},365,{"file":160,"line":389,"context":297},367,{"file":160,"line":391,"context":297},371,{"file":160,"line":393,"context":297},377,{"file":160,"line":395,"context":297},378,{"file":160,"line":395,"context":297},{"file":160,"line":398,"context":297},385,{"file":160,"line":400,"context":297},386,{"file":160,"line":402,"context":297},387,{"file":160,"line":404,"context":297},388,{"file":160,"line":406,"context":297},389,{"file":160,"line":408,"context":297},390,{"file":160,"line":410,"context":297},391,{"file":160,"line":412,"context":297},392,{"file":160,"line":414,"context":297},393,{"file":187,"line":416,"context":297},42,{"file":187,"line":418,"context":297},73,{"file":187,"line":420,"context":297},104,{"file":187,"line":422,"context":297},145,{"file":187,"line":328,"context":297},{"file":187,"line":425,"context":297},248,{"file":187,"line":425,"context":297},{"file":187,"line":425,"context":297},{"file":187,"line":429,"context":297},253,{"file":187,"line":431,"context":297},270,{"file":187,"line":431,"context":297},{"file":187,"line":431,"context":297},{"file":187,"line":435,"context":297},276,{"file":187,"line":353,"context":297},{"file":187,"line":353,"context":297},{"file":187,"line":353,"context":297},{"file":187,"line":440,"context":297},296,{"file":187,"line":442,"context":297},297,{"file":187,"line":444,"context":297},316,{"file":187,"line":446,"context":297},318,{"file":187,"line":448,"context":297},321,{"file":187,"line":450,"context":297},325,{"file":187,"line":452,"context":297},327,{"file":187,"line":454,"context":297},330,{"file":187,"line":456,"context":297},334,{"file":187,"line":458,"context":297},339,{"file":187,"line":460,"context":297},340,{"file":187,"line":462,"context":297},341,{"file":187,"line":464,"context":297},342,{"file":187,"line":370,"context":297},{"file":187,"line":467,"context":297},344,{"file":187,"line":469,"context":297},345,{"file":187,"line":471,"context":297},346,{"file":187,"line":473,"context":297},347,{"file":187,"line":475,"context":297},349,{"file":187,"line":375,"context":297},{"file":187,"line":379,"context":297},{"file":187,"line":383,"context":297},{"file":212,"line":480,"context":297},32,{"file":212,"line":169,"context":297},{"file":212,"line":198,"context":297},{"file":212,"line":208,"context":297},{"file":212,"line":485,"context":297},251,{"file":212,"line":485,"context":297},{"file":212,"line":488,"context":297},260,{"file":212,"line":488,"context":297},{"file":212,"line":491,"context":297},268,{"file":212,"line":491,"context":297},{"file":212,"line":435,"context":297},{"file":212,"line":435,"context":297},{"file":212,"line":349,"context":297},{"file":212,"line":349,"context":297},{"file":212,"line":498,"context":297},292,{"file":212,"line":498,"context":297},{"file":212,"line":501,"context":297},300,{"file":212,"line":501,"context":297},{"file":212,"line":504,"context":297},309,{"file":212,"line":504,"context":297},{"file":212,"line":507,"context":297},319,{"file":212,"line":507,"context":297},{"file":212,"line":510,"context":297},329,{"file":212,"line":510,"context":297},{"file":212,"line":367,"context":297},{"file":212,"line":367,"context":297},{"file":212,"line":469,"context":297},{"file":212,"line":469,"context":297},{"file":212,"line":381,"context":297},{"file":212,"line":381,"context":297},{"file":238,"line":519,"context":297},37,{"file":238,"line":521,"context":297},86,{"file":238,"line":523,"context":297},87,{"file":238,"line":34,"context":297},{"file":238,"line":526,"context":297},89,{"file":238,"line":528,"context":297},90,{"file":238,"line":530,"context":297},91,{"file":238,"line":26,"context":297},{"file":238,"line":533,"context":297},93,{"file":238,"line":121,"context":297},{"file":238,"line":536,"context":297},95,{"file":238,"line":538,"context":297},96,{"file":238,"line":320,"context":297},{"file":238,"line":541,"context":297},121,{"file":238,"line":304,"context":297},{"file":238,"line":544,"context":297},125,{"file":238,"line":546,"context":297},126,{"file":238,"line":548,"context":297},127,{"file":238,"line":550,"context":297},128,{"file":238,"line":552,"context":297},129,{"file":238,"line":280,"context":297},{"file":238,"line":291,"context":297},{"file":238,"line":556,"context":297},132,{"file":238,"line":558,"context":297},133,{"file":238,"line":560,"context":297},134,{"file":238,"line":562,"context":297},135,{"file":238,"line":564,"context":297},136,{"file":238,"line":566,"context":297},137,{"file":568,"line":569,"context":297},"include\\tour_detail\\chatroom.php",15,{"file":568,"line":569,"context":297},{"file":568,"line":569,"context":297},{"file":568,"line":33,"context":297},{"file":568,"line":33,"context":297},{"file":568,"line":480,"context":297},{"file":568,"line":526,"context":297},{"file":568,"line":526,"context":297},{"file":568,"line":528,"context":297},{"file":568,"line":530,"context":297},{"file":568,"line":533,"context":297},{"file":568,"line":121,"context":297},{"file":568,"line":536,"context":297},{"file":568,"line":536,"context":297},{"file":568,"line":538,"context":297},{"file":568,"line":538,"context":297},{"file":568,"line":320,"context":297},{"file":568,"line":587,"context":297},98,{"file":568,"line":587,"context":297},{"file":568,"line":590,"context":297},99,{"file":568,"line":590,"context":297},{"file":568,"line":13,"context":297},{"file":568,"line":13,"context":297},{"file":568,"line":595,"context":297},101,{"file":568,"line":180,"context":297},{"file":598,"line":599,"context":297},"include\\tour_detail\\gallery.php",9,{"file":601,"line":14,"context":297},"include\\tour_detail\\groups.php",{"file":603,"line":47,"context":297},"include\\tour_detail\\info.php",{"file":603,"line":147,"context":297},{"file":603,"line":132,"context":297},{"file":603,"line":285,"context":297},{"file":603,"line":608,"context":297},8,{"file":603,"line":599,"context":297},{"file":603,"line":611,"context":297},10,{"file":603,"line":613,"context":297},11,{"file":603,"line":615,"context":297},12,{"file":603,"line":617,"context":297},35,{"file":603,"line":619,"context":297},36,{"file":603,"line":519,"context":297},{"file":603,"line":153,"context":297},{"file":603,"line":156,"context":297},{"file":603,"line":624,"context":297},57,{"file":603,"line":526,"context":297},{"file":603,"line":526,"context":297},{"file":603,"line":587,"context":297},{"file":603,"line":180,"context":297},{"file":603,"line":208,"context":297},{"file":603,"line":631,"context":297},118,{"file":603,"line":633,"context":297},122,{"file":603,"line":546,"context":297},{"file":603,"line":280,"context":297},{"file":603,"line":560,"context":297},{"file":603,"line":638,"context":297},138,{"file":603,"line":640,"context":297},139,{"file":603,"line":642,"context":297},150,{"file":603,"line":644,"context":297},151,{"file":603,"line":646,"context":297},153,{"file":603,"line":648,"context":297},154,{"file":603,"line":268,"context":297},{"file":603,"line":651,"context":297},161,{"file":603,"line":653,"context":297},162,{"file":655,"line":613,"context":297},"include\\tour_detail\\players.php",{"file":655,"line":615,"context":297},{"file":655,"line":245,"context":297},{"file":655,"line":659,"context":297},14,{"file":655,"line":569,"context":297},{"file":655,"line":662,"context":297},16,{"file":655,"line":664,"context":297},29,{"file":655,"line":664,"context":297},{"file":655,"line":480,"context":297},{"file":655,"line":668,"context":297},52,{"file":655,"line":670,"context":297},53,{"file":655,"line":218,"context":297},{"file":655,"line":153,"context":297},{"file":655,"line":156,"context":297},{"file":655,"line":624,"context":297},{"file":655,"line":676,"context":297},70,{"file":655,"line":676,"context":297},{"file":655,"line":418,"context":297},{"file":680,"line":132,"context":297},"include\\tour_detail\\points.php",{"file":680,"line":285,"context":297},{"file":680,"line":608,"context":297},{"file":684,"line":14,"context":297},"include\\tour_detail\\pyramid.php",{"file":686,"line":611,"context":297},"include\\tour_detail\\schedule.php",{"file":686,"line":613,"context":297},{"file":686,"line":615,"context":297},{"file":686,"line":245,"context":297},{"file":686,"line":659,"context":297},{"file":686,"line":569,"context":297},{"file":693,"line":14,"context":297},"include\\tour_detail\\schema.php",{"file":244,"line":695,"context":297},211,[697],{"name":698,"version":28,"knownCves":699},"DataTables",[],[701,738,754,766,779,791,805,818,827,835,843,856,865,875,887,900,910],{"entryPoint":702,"graph":703,"unsanitizedCount":147,"severity":737},"tennisthor_setting (admin\\index.php:77)",{"nodes":704,"edges":731},[705,710,715,718,720,723,727],{"id":706,"type":707,"label":708,"file":141,"line":709},"n0","source","$_POST (x2)",83,{"id":711,"type":712,"label":713,"file":141,"line":530,"wp_function":714},"n1","sink","update_option() [Settings Manipulation]","update_option",{"id":716,"type":707,"label":717,"file":141,"line":260},"n2","$_POST['tennisthor_club']",{"id":719,"type":712,"label":713,"file":141,"line":260,"wp_function":714},"n3",{"id":721,"type":707,"label":722,"file":141,"line":536},"n4","$_GET['page'] (x2)",{"id":724,"type":725,"label":726,"file":141,"line":536},"n5","transform","→ tnthor_admin_redirect()",{"id":728,"type":712,"label":729,"file":295,"line":153,"wp_function":730},"n6","echo() [XSS]","echo",[732,734,735,736],{"from":706,"to":711,"sanitized":733},false,{"from":716,"to":719,"sanitized":733},{"from":721,"to":724,"sanitized":733},{"from":724,"to":728,"sanitized":733},"medium",{"entryPoint":739,"graph":740,"unsanitizedCount":147,"severity":737},"\u003Cindex> (admin\\index.php:0)",{"nodes":741,"edges":749},[742,743,744,745,746,747,748],{"id":706,"type":707,"label":708,"file":141,"line":709},{"id":711,"type":712,"label":713,"file":141,"line":530,"wp_function":714},{"id":716,"type":707,"label":717,"file":141,"line":260},{"id":719,"type":712,"label":713,"file":141,"line":260,"wp_function":714},{"id":721,"type":707,"label":722,"file":141,"line":536},{"id":724,"type":725,"label":726,"file":141,"line":536},{"id":728,"type":712,"label":729,"file":295,"line":153,"wp_function":730},[750,751,752,753],{"from":706,"to":711,"sanitized":733},{"from":716,"to":719,"sanitized":733},{"from":721,"to":724,"sanitized":733},{"from":724,"to":728,"sanitized":733},{"entryPoint":755,"graph":756,"unsanitizedCount":32,"severity":737},"the_logout_hook_callback (include\\login.php:33)",{"nodes":757,"edges":764},[758,761],{"id":706,"type":707,"label":759,"file":146,"line":760},"$_POST['_wp_http_referer']",50,{"id":711,"type":712,"label":762,"file":146,"line":760,"wp_function":763},"wp_redirect() [Open Redirect]","wp_redirect",[765],{"from":706,"to":711,"sanitized":733},{"entryPoint":767,"graph":768,"unsanitizedCount":14,"severity":737},"tennisthor_login_hook_callback (include\\login.php:61)",{"nodes":769,"edges":776},[770,773,774,775],{"id":706,"type":707,"label":771,"file":146,"line":772},"$_POST",66,{"id":711,"type":712,"label":762,"file":146,"line":418,"wp_function":763},{"id":716,"type":707,"label":759,"file":146,"line":13},{"id":719,"type":712,"label":762,"file":146,"line":13,"wp_function":763},[777,778],{"from":706,"to":711,"sanitized":733},{"from":716,"to":719,"sanitized":733},{"entryPoint":780,"graph":781,"unsanitizedCount":142,"severity":737},"\u003Clogin> (include\\login.php:0)",{"nodes":782,"edges":788},[783,785,786,787],{"id":706,"type":707,"label":784,"file":146,"line":760},"$_POST['_wp_http_referer'] (x2)",{"id":711,"type":712,"label":762,"file":146,"line":760,"wp_function":763},{"id":716,"type":707,"label":771,"file":146,"line":772},{"id":719,"type":712,"label":762,"file":146,"line":418,"wp_function":763},[789,790],{"from":706,"to":711,"sanitized":733},{"from":716,"to":719,"sanitized":733},{"entryPoint":792,"graph":793,"unsanitizedCount":14,"severity":737},"tennisthor_search_city_hook_callback (include\\register.php:79)",{"nodes":794,"edges":802},[795,797,800,801],{"id":706,"type":707,"label":796,"file":160,"line":528},"$_POST['cityText']",{"id":711,"type":712,"label":798,"file":160,"line":528,"wp_function":799},"wp_remote_post() [SSRF]","wp_remote_post",{"id":716,"type":707,"label":771,"file":160,"line":528},{"id":719,"type":712,"label":729,"file":160,"line":320,"wp_function":730},[803,804],{"from":706,"to":711,"sanitized":733},{"from":716,"to":719,"sanitized":733},{"entryPoint":806,"graph":807,"unsanitizedCount":817,"severity":737},"\u003Cregister> (include\\register.php:0)",{"nodes":808,"edges":814},[809,810,811,813],{"id":706,"type":707,"label":796,"file":160,"line":528},{"id":711,"type":712,"label":798,"file":160,"line":528,"wp_function":799},{"id":716,"type":707,"label":812,"file":160,"line":528},"$_POST (x42)",{"id":719,"type":712,"label":729,"file":160,"line":320,"wp_function":730},[815,816],{"from":706,"to":711,"sanitized":733},{"from":716,"to":719,"sanitized":733},43,{"entryPoint":819,"graph":820,"unsanitizedCount":32,"severity":737},"tennisthor_load_timeline_calendar_hook_callback (include\\reservation-timeline.php:51)",{"nodes":821,"edges":825},[822,824],{"id":706,"type":707,"label":771,"file":187,"line":823},65,{"id":711,"type":712,"label":729,"file":187,"line":418,"wp_function":730},[826],{"from":706,"to":711,"sanitized":733},{"entryPoint":828,"graph":829,"unsanitizedCount":32,"severity":737},"the_res_reload_courts_hook_callback (include\\reservation-timeline.php:82)",{"nodes":830,"edges":833},[831,832],{"id":706,"type":707,"label":771,"file":187,"line":538},{"id":711,"type":712,"label":729,"file":187,"line":420,"wp_function":730},[834],{"from":706,"to":711,"sanitized":733},{"entryPoint":836,"graph":837,"unsanitizedCount":32,"severity":737},"the_res_reload_events_hook_callback (include\\reservation-timeline.php:113)",{"nodes":838,"edges":841},[839,840],{"id":706,"type":707,"label":771,"file":187,"line":550},{"id":711,"type":712,"label":729,"file":187,"line":422,"wp_function":730},[842],{"from":706,"to":711,"sanitized":733},{"entryPoint":844,"graph":845,"unsanitizedCount":14,"severity":737},"the_tennisthor_chat_hook_callback (include\\tournament-detail.php:7)",{"nodes":846,"edges":853},[847,848,849,852],{"id":706,"type":707,"label":771,"file":212,"line":299},{"id":711,"type":712,"label":729,"file":212,"line":480,"wp_function":730},{"id":716,"type":707,"label":850,"file":212,"line":851},"$_GET",41,{"id":719,"type":712,"label":729,"file":212,"line":169,"wp_function":730},[854,855],{"from":706,"to":711,"sanitized":733},{"from":716,"to":719,"sanitized":733},{"entryPoint":857,"graph":858,"unsanitizedCount":32,"severity":737},"the_sch_reload_courts_hook_callback (include\\tournament-detail.php:58)",{"nodes":859,"edges":863},[860,862],{"id":706,"type":707,"label":771,"file":212,"line":861},71,{"id":711,"type":712,"label":729,"file":212,"line":198,"wp_function":730},[864],{"from":706,"to":711,"sanitized":733},{"entryPoint":866,"graph":867,"unsanitizedCount":245,"severity":737},"tennisthor_tournament_detail_shortcode (include\\tournament-detail.php:133)",{"nodes":868,"edges":873},[869,872],{"id":706,"type":707,"label":870,"file":212,"line":871},"$_GET (x13)",165,{"id":711,"type":712,"label":729,"file":212,"line":485,"wp_function":730},[874],{"from":706,"to":711,"sanitized":733},{"entryPoint":876,"graph":877,"unsanitizedCount":14,"severity":737},"the_tennisthor_tournaments_hook_callback (include\\tournaments.php:8)",{"nodes":878,"edges":884},[879,881,882,883],{"id":706,"type":707,"label":771,"file":238,"line":880},22,{"id":711,"type":712,"label":798,"file":238,"line":664,"wp_function":799},{"id":716,"type":707,"label":771,"file":238,"line":880},{"id":719,"type":712,"label":729,"file":238,"line":519,"wp_function":730},[885,886],{"from":706,"to":711,"sanitized":733},{"from":716,"to":719,"sanitized":733},{"entryPoint":888,"graph":889,"unsanitizedCount":899,"severity":737},"\u003Ctournaments> (include\\tournaments.php:0)",{"nodes":890,"edges":896},[891,892,893,895],{"id":706,"type":707,"label":771,"file":238,"line":880},{"id":711,"type":712,"label":798,"file":238,"line":664,"wp_function":799},{"id":716,"type":707,"label":894,"file":238,"line":880},"$_POST (x27)",{"id":719,"type":712,"label":729,"file":238,"line":519,"wp_function":730},[897,898],{"from":706,"to":711,"sanitized":733},{"from":716,"to":719,"sanitized":733},28,{"entryPoint":901,"graph":902,"unsanitizedCount":296,"severity":909},"\u003Creservation-timeline> (include\\reservation-timeline.php:0)",{"nodes":903,"edges":907},[904,906],{"id":706,"type":707,"label":905,"file":187,"line":823},"$_POST (x24)",{"id":711,"type":712,"label":729,"file":187,"line":418,"wp_function":730},[908],{"from":706,"to":711,"sanitized":733},"low",{"entryPoint":911,"graph":912,"unsanitizedCount":33,"severity":909},"\u003Ctournament-detail> (include\\tournament-detail.php:0)",{"nodes":913,"edges":920},[914,916,917,919],{"id":706,"type":707,"label":915,"file":212,"line":299},"$_POST (x16)",{"id":711,"type":712,"label":729,"file":212,"line":480,"wp_function":730},{"id":716,"type":707,"label":918,"file":212,"line":851},"$_GET (x14)",{"id":719,"type":712,"label":729,"file":212,"line":169,"wp_function":730},[921,922],{"from":706,"to":711,"sanitized":733},{"from":716,"to":719,"sanitized":733},{"summary":924,"deductions":925},"The \"tennisthor\" plugin v1.2.1 exhibits a generally good security posture in several key areas. The complete absence of known CVEs and a clean vulnerability history across all severity levels is a strong indicator of diligent development and maintenance. Furthermore, the plugin exclusively utilizes prepared statements for SQL queries, mitigating the risk of SQL injection vulnerabilities. The static analysis also reveals no dangerous functions or file operations, which are common vectors for exploitation.\n\nHowever, the analysis highlights several areas of concern. A significant portion of the plugin's output (66%) is not properly escaped, presenting a risk of Cross-Site Scripting (XSS) vulnerabilities. While no critical or high-severity taint flows were identified, all 17 analyzed flows involved unsanitized paths, suggesting a potential for unexpected behavior or vulnerabilities if input is not strictly controlled, especially given the lack of explicit capability checks and nonce checks on its entry points. The presence of the DataTables library, without version information, also introduces a potential risk if it's an outdated or vulnerable version.\n\nIn conclusion, the \"tennisthor\" plugin has a solid foundation regarding SQL and core dangerous function usage. The primary security weakness lies in its handling of output escaping and the potential risks associated with unsanitized input paths. While the vulnerability history is excellent, the unescaped output and unsanitized flows warrant attention to prevent potential XSS attacks and ensure more robust input validation.",[926,928,930,932,934],{"reason":927,"points":569},"High percentage of unescaped output",{"reason":929,"points":611},"All analyzed flows have unsanitized paths",{"reason":931,"points":147},"No nonce checks on entry points",{"reason":933,"points":147},"No capability checks on entry points",{"reason":935,"points":142},"Bundled library without version info","2026-03-16T22:51:46.583Z",{"wat":938,"direct":945},{"assetPaths":939,"generatorPatterns":942,"scriptPaths":943,"versionParams":944},[940,941],"\u002Fwp-content\u002Fplugins\u002Ftennisthor\u002Fassets\u002Fcss\u002Fbootstrap-social.css","\u002Fwp-content\u002Fplugins\u002Ftennisthor\u002Fassets\u002Fcss\u002Fstyle.css",[],[],[],{"cssClasses":946,"htmlComments":947,"htmlAttributes":948,"restEndpoints":949,"jsGlobals":950,"shortcodeOutput":951},[],[],[],[],[],[952,953,954,955,956,957,958],"[tennisthor_tournaments]","[tennisthor_tournament_detail]","[tennisthor_reservation_timeline]","[tennisthor_rating]","[tennisthor_thor_power_rating]","[tennisthor_login]","[tennisthor_register]"]