# RDG Corp / SH Games Plugin for WordPress

Tags: sh games, sh, game
Requires at least: 6.0
Tested up to: 6.0
Requires PHP: 8.1
Stable tag: 1.1.48
License: GPLv3 or later
License URI: http://www.gnu.org/licenses/gpl-3.0.html

# Changelog
-   1.1.48 (2026-04-19)
  * DEV-1147-sh-games-check-previews-updatings
    - Fixed `backfillTeamLogos()` to detect and replace `default_picture.jpg` placeholder URLs that the API returns when a team's logo is not yet available. Previously the backfill only triggered when `shg_home_image`/`shg_visitor_image`/`shg_home_local_url`/`shg_visitor_local_url` were empty, so posts created during the API's "no logo yet" window kept the placeholder forever (e.g. post 400858 Cleveland Cavaliers vs Toronto-Raptors had `shg_visitor_image=default_picture.jpg` even after the API received the real Toronto-Raptors logo). Added private `isPlaceholderOrEmpty()` helper that treats URLs containing `default_picture` as empty for backfill purposes, and prevents overwriting real URLs with placeholders. Affects published posts on subsequent pulls when the API has obtained the real logo.
-   1.1.47 (2026-04-16)
  * DEV-1147-sh-games-check-previews-updatings
    - Added `noindex` meta for old game preview posts: posts with more than 7 hours since publication are marked as `noindex` to prevent search engines from indexing stale game content. Implemented via `rank_math/frontend/robots` filter for sites using Rank Math, with a `wp_head` fallback that outputs a raw `<meta name="robots" content="noindex, follow">` tag when Rank Math is not active. Both hooks registered in `add_hooks()`.
-   1.1.46 (2026-04-15)
  * DEV-1147-sh-games-check-previews-updatings
    - Added transient-based lock (`shg_pull_running`, 30 min TTL) at the entry point of `Sportshub_Games_CLI::pull()` to prevent concurrent cron + manual executions from creating duplicate posts. On 2026-04-15 this race produced 46 external_ids with duplicates (some with 9 copies) before being cleaned up manually. Lock release is handled via `register_shutdown_function` so it fires on normal return, exceptions, and fatal errors; the TTL is a safety net if the process is killed before the shutdown handler runs.
    - Added past-game filter in the Members source pull loop: games whose `date` is strictly before today (server local time) are skipped. The `previews-v2` API occasionally returns historical games (observed: January 2026 and August 2025 games returned on 2026-04-15) even when `start_date=today` is requested. Filtering client-side prevents creating new posts with today's `post_date` for games that already happened.
-   1.1.45 (2026-04-14)
  * DEV-1147-sh-games-check-previews-updatings
-   1.1.44 (2026-04-14)
  * DEV-1147-sh-games-check-previews-updatings
    - Enhanced `backfillTeamLogos()` and `updateBlockGameData()` to also backfill missing meta fields (`shg_home_team`, `shg_visitor_team`, `shg_game_date`, `shg_sport_name`, etc.), `post_parent`, and `previews_categories` taxonomy on existing posts with empty values
-   1.1.43 (2026-04-14)
  * DEV-1147-sh-games-check-previews-updatings
    - Removed `leagues` parameter from previews-v2 API requests; the API returns all available previews for the given sports without league filtering, avoiding mismatched or negative league IDs that caused empty responses
    - Fixed `post_parent` assignment: preserved original `shg_sports_main_games` mapping before the sh-mapping conversion and passed the correct parent post ID through each request, so previews are linked to the right parent (e.g. NHL, NBA, MLB)
    - Added taxonomy inheritance: new posts now inherit `previews_categories` from their parent post on insert, ensuring they appear on the correct sport/league archive pages
    - Added null-safety checks on image upload calls (`shg_home_image`, `shg_visitor_image`, pick images) to prevent warnings when the API returns empty image fields
    - Added `backfillTeamLogos()` method to populate missing team logo meta on published posts without overwriting other content
-   1.1.42 (2026-03-16)
  * DEV-1073-sh-games-new-endpoint-support-team-logo-field
     - Added support for `previews-v2` endpoint with updated JSON schema
     - Replaced `away_team` references with `visitor_team` (backward-compatible fallback to `away_team`)
     - Normalized `recap` field: supports both v2 string format and v1 array `[{body: "..."}]`
     - Added `parse_odds_data_v2()` method for flat odds object format (v2); auto-detects v1 vs v2 at runtime
     - Added `id_sport` fallback from `picks[0].id_sport` when missing at game level
     - Lowered `picks_game` field threshold from 7 to 4 to accommodate reduced pick fields in v2
-   1.1.37 (2025-11-26)
  * DEV-937-sh-game-handle-empty-request
     - Fixed undefined array key warning for 'shg_game_top_handicapper_api_image' in class-sportshub-games-cli.php
     - Fixed deprecated explode() warning when passing null in getNameFile() in class-sportshub-games-helpers.php
     - Added validation checks before accessing potentially missing array keys
-   1.1.36 (2025-11-26)
  * DEV-937-sh-game-handle-empty-request
     - Fixed exe_request() to validate HTTP status codes, empty responses, and proper cURL error handling
-   1.1.35 (2025-11-26)
  * DEV-937-sh-game-handle-empty-request
     - Fixed exe_request() to validate HTTP status codes, empty responses, and proper cURL error handling
-   1.1.34 (2025-11-03)
  * DEV-881-sas-change-previews-top-bar-to-h
     - Change top bar links block to hide as default.
-   1.1.33 (2025-08-21)
  * DEV-747-sh-games-php-warnings-due-to-undefined-array
      - Check if the key exists.
-   1.1.31 (2025-05-28)
  * DEV-684-new-endpoint-for-previews-creation.
      - The location from which the logs file folder is created is modified.
-   1.1.30 (2025-04-28)
  * DEV-629-multiple-requests-in-sh-game.
      - Multiple requests are made when executing the command to create psots games.
-   1.1.29 (2025-03-19)
  * DEV-588-sh-games-game-url-undefined-warning.
      - Check for the existence of a variable game url.
-   1.1.28 (2025-03-07)
  * DEV-558-sh-games-fix-cls-issue-remove-link-in-empty-url.
      - Fix picks count link when game url is empty.
-   1.1.27 (2025-03-05)
  * DEV-558-sh-games-fix-cls-issue.
      - Load styles in header, display picks count.
-   1.1.26 (2025-02-19)
  * DEV-529-performance-assets-on-demand.
      - Loading of scripts and styles is optimized.
-   1.1.25 (2024-11-18)
  * DEV-469-implement-new-endpoint
      - New endpoint previews implemented.
-   1.1.24 (2024-11-18)
  * DEV-462-create-block-picks-games
      - shg picks game block is finished.
-   1.1.23 (2024-11-07)
  * DEV-461-feature-to-validate-content-in-posts
      - Allows you to enable or disable duplicate content validation.
-   1.1.22 (2024-10-30)
  * DEV-450-update-additional-content-in-games
      - Additional content in posts is validated
-   1.1.21 (2024-10-29)
  * DEV-456-safari-issue-on-mobile
      - Top handicapper block css updated
-   1.1.20 (2024-10-29)
  * DEV-455-handicapper-image-change
      - Added alt to cpt games images
-   1.1.19 (2024-10-15)
  * DEV-441-add-knup-preview
      - Knup content is added to posts
-   1.1.18 (2024-09-30)
  * DEV-434-rewrite-rules
      - Rules are overwritten in the cpt game.
-   1.1.17 (2024-09-23)
  * DEV-405-previews-hub-page-design
      - The sportshubGamesGetParentsGames method was created to return the post configuration.
-   1.1.16 (2024-09-06)
  * DEV-397-sh-games-prevent-duplicates
      - Prevent post duplication by checking the title and content.
-   1.1.15 (2024-09-05)
  * DEV-404-sh-games-custom-date-range
    - Add days range input in sh-games settings, update endpoint to request based on the range of date.
-   1.1.14 (2024-07-23)
  * DEV-354-previews-categories-and-tags
    - Fixed post status on game preview update.
-   1.1.13 (2024-05-23)
    * DEV-315-sh-games-fix-game-preview-status
        - Fixed post status on game preview update.
-   1.1.12 (2024-05-10)
    * DEV-283-sh-games-changes-on-logic
        - Changes on logic.
-   1.1.11 (2024-05-03)
    * DEV-275-fix-insert-auto-post
        - Insert auto post fixed.
-   1.1.10 (2024-04-10)
    * DEV-270-fix-cron-job-options
        - SH Games options form fixed.
-   1.1.9 (2024-04-10)
    * DEV-265-repair-access-to-manifest-file
        - Manifest file is accessed without http protocol.
-   1.1.8 (2024-04-04)
    * DEV-261-show-or-hide-sh-links-block
        - It is allowed to show or hide the sh game links block.
-   1.1.7 (2024-04-03)
    * DEV-259-assign-image-to-game
        - Featured preview image is assigned if it exists.
-   1.1.6 (2024-03-20)
    * DEV-103-sh-games-plugin-complete
        - The origin of sports and leagues was adjusted to mapping.
-   1.1.5 (2024-03-19)
    * DEV-103-sh-games-plugin-complete
        - Rankmath variables.
        - Custom game status.
-   1.1.4 (2024-03-12)
    * DEV-103-sh-games-plugin-complete
        - Added featured image and other changes.
-   1.1.3 (2024-03-12)
    * DEV-103-sh-games-plugin-complete
        - Title shadow color is customized.
-   1.1.2 (2024-03-12)
    * DEV-103-sh-games-plugin-complete
        - The implementation of SH Mapping is validated.
-   1.1.1 (2024-03-11)
    * DEV-103-sh-games-plugin-complete
        - The requested changes have been completed.
-   1.1.0 (2024-03-05)
    * DEV-103-sh-games-plugin-complete
        - Versions for simple and complete sh game are integrated.
-   1.0.18 (2023-10-16)
    * DEV-103-sh-games-plugin-simple-fix-slug
        - cpt slug defined in environment constants.
-   1.0.17 (2023-10-11)
    * resease/1.0.12
        - The origin of the date for the posts is modified.
-   1.0.16 (2023-10-10)
    * resease/1.0.12
        - Game menu name updated.
-   1.0.15 (2023-10-09)
    * resease/1.0.12
        - Fixed redis data reading and writing.
-   1.0.14 (2023-10-06)
    * resease/1.0.12
        - Image validation is fixed.
        - Date selection in request is fixed.
-   1.0.13 (2023-10-05)
    * resease/1.0.12
        - Title generation fixed.
        - CPT label name fix.
-   1.0.12 (2023-10-05)
    * DEV-103-sh-games-plugin-simple-fix
        - URL generation fixed.
-   1.0.11 (2023-10-04)
    * DEV-103-sh-games-plugin-simple
        - Simple version of the sh-games plugin is finalized.
-   1.0.10 (2023-08-24)
    * DEV-103-sh-games-plugin-request
        - It is allowed to assign game parts by sports.
-   1.0.9 (2023-08-11)
    * DEV-103-sh-games-plugin-request
        - Assignment of parents to categories is allowed.
-   1.0.8 (2023-08-11)
    * DEV-103-sh-games-plugin-request
        - Cleaned up query.
        - Validation adjustments were made.
-   1.0.7 (2023-08-10)
    * DEV-103-sh-games-plugin-request
        - CPT customization is allowed.
-   1.0.6 (2023-08-10)
    * DEV-103-sh-games-plugin-request
        - Multiple sports filter applied.
-   1.0.5 (2023-08-08)
    * DEV-103-sh-games-plugin
        - Form Automatic Games changed.
-   1.0.4 (2023-08-08)
    * DEV-103-sh-games-plugin
        - Form priority changed.
-   1.0.3 (2023-08-08)
    * DEV-103-sh-games-plugin
        - Update form key.
-   1.0.2 (2023-08-07)
    * DEV-103-sh-games-plugin
        - Create composer file.
-   1.0.1 (2023-08-07)
    * DEV-103-sh-games-plugin
        - Most of the features have been implemented.
        - Missing the final api and remove the slug from the CTP.
-   1.0.0 (2023-07-26)
    * DEV-103-sh-games-plugin
        - The base of the sh games plugin was initialized.
