fix(phpcs): move ignore pragmas into file-level docblocks

File-level sniffs like WordPress.Files.FileName are evaluated at the file level,
not at code level. They require phpcs:ignore directives to be placed within the
file-level docblock (/** ... */), not in code comments.

Moved all 81 phpcs:ignore pragmas from code comments to the file-level docblocks.
This applies to:
- 79 class files with class-naming convention ignores
- prautoblogger.php with strict-types docblock ignore
- uninstall.php with strict-types docblock ignore
This commit is contained in:
peptiderepo
2026-04-23 03:26:50 +00:00
parent b9934cdd46
commit 0e1551be42
81 changed files with 162 additions and 81 deletions

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Displays admin notices for onboarding, errors, and budget warnings. * Displays admin notices for onboarding, errors, and budget warnings.
* *
* Triggered by: PRAutoBlogger::register_admin_hooks() on `admin_notices`. * Triggered by: PRAutoBlogger::register_admin_hooks() on `admin_notices`.

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Registers and renders the main PRAutoBlogger settings page in wp-admin. * Registers and renders the main PRAutoBlogger settings page in wp-admin.
* *
* Uses the WordPress Settings API for option registration, sanitization, and rendering. * Uses the WordPress Settings API for option registration, sanitization, and rendering.

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* WordPress Dashboard widget showing PRAutoBlogger generation status at a glance. * WordPress Dashboard widget showing PRAutoBlogger generation status at a glance.
* *
* Displays: last generation time, articles generated today, monthly cost, * Displays: last generation time, articles generated today, monthly cost,

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Admin page listing analysis results (article ideas) with per-idea generation. * Admin page listing analysis results (article ideas) with per-idea generation.
* *
* Triggered by: PRAutoBlogger::register_admin_hooks() on `admin_menu`. * Triggered by: PRAutoBlogger::register_admin_hooks() on `admin_menu`.

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Static registry of available image generation models. * Static registry of available image generation models.
* *
* What: Returns a hardcoded list of image models for the admin model picker. * What: Returns a hardcoded list of image models for the admin model picker.

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Admin page displaying structured application log entries. * Admin page displaying structured application log entries.
* *
* Provides level filtering (error/warning/info/debug), text search, * Provides level filtering (error/warning/info/debug), text search,

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Admin page displaying cost dashboard, content scores, and generation history. * Admin page displaying cost dashboard, content scores, and generation history.
* *
* Shows: monthly spend, daily cost chart, spend by pipeline stage, budget * Shows: monthly spend, daily cost chart, spend by pipeline stage, budget

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Adds "Writing Model", "Image Model", and "Cost" columns to the Posts list. * Adds "Writing Model", "Image Model", and "Cost" columns to the Posts list.
* *
* Shows which LLM wrote each article, which model generated its featured image, * Shows which LLM wrote each article, which model generated its featured image,

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Adds a metabox to posts showing PRAutoBlogger generation metadata. * Adds a metabox to posts showing PRAutoBlogger generation metadata.
* *
* Only appears on posts that were generated by PRAutoBlogger (checked via * Only appears on posts that were generated by PRAutoBlogger (checked via

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Admin page listing generated draft posts for editorial review. * Admin page listing generated draft posts for editorial review.
* *
* Provides approve (publish), edit (opens WP editor), and reject (trash) * Provides approve (publish), edit (opens WP editor), and reject (trash)

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Extended settings fields: schedule, publishing, analytics, display, and images. * Extended settings fields: schedule, publishing, analytics, display, and images.
* *
* What: Declarative field definitions for operational settings sections. * What: Declarative field definitions for operational settings sections.

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Declarative settings fields and sections for the PRAutoBlogger admin page. * Declarative settings fields and sections for the PRAutoBlogger admin page.
* *
* Centralizes all field and section definitions in one place, making it trivial * Centralizes all field and section definitions in one place, making it trivial

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Renders the interactive model-picker field for OpenRouter models. * Renders the interactive model-picker field for OpenRouter models.
* *
* What: a button showing the current model's name + pricing. Clicking it * What: a button showing the current model's name + pricing. Clicking it

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Renders the Reddit source status indicator in the admin settings. * Renders the Reddit source status indicator in the admin settings.
* *
* What: shows RSS (primary) and .json (fallback) availability with * What: shows RSS (primary) and .json (fallback) availability with

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Handles plugin activation: creates database tables, sets default options, * Handles plugin activation: creates database tables, sets default options,
* and schedules the initial cron job. * and schedules the initial cron job.
* *

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* AJAX endpoint handlers for PRAutoBlogger admin actions. * AJAX endpoint handlers for PRAutoBlogger admin actions.
* *
* What: Handles image generation, model registry, and connection test AJAX requests. * What: Handles image generation, model registry, and connection test AJAX requests.

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* PSR-4-inspired autoloader for PRAutoBlogger classes. * PSR-4-inspired autoloader for PRAutoBlogger classes.
* *
* Maps class names like `PRAutoBlogger_Content_Generator` to file paths like * Maps class names like `PRAutoBlogger_Content_Generator` to file paths like

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Handles plugin deactivation: clears scheduled cron events and transients. * Handles plugin deactivation: clears scheduled cron events and transients.
* *
* Note: does NOT delete data or options — that happens in uninstall.php. * Note: does NOT delete data or options — that happens in uninstall.php.

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Encrypts and decrypts sensitive option values (API keys, secrets). * Encrypts and decrypts sensitive option values (API keys, secrets).
* *
* Uses OpenSSL AES-256-CBC with a key derived from wp_salt('auth'). * Uses OpenSSL AES-256-CBC with a key derived from wp_salt('auth').

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Cron/AJAX handlers for content generation, metrics collection, model registry. * Cron/AJAX handlers for content generation, metrics collection, model registry.
* *
* Triggered by: PRAutoBlogger hook registration. * Triggered by: PRAutoBlogger hook registration.

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Database-level atomic mutex for content generation. * Database-level atomic mutex for content generation.
* *
* What: Provides acquire/release/check semantics for a single-writer generation lock. * What: Provides acquire/release/check semantics for a single-writer generation lock.

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* One-shot v0.10.0 migration — remove Cloudflare Workers AI as image provider. * One-shot v0.10.0 migration — remove Cloudflare Workers AI as image provider.
* *
* Cloudflare Workers AI was removed as an image provider in v0.10.0. * Cloudflare Workers AI was removed as an image provider in v0.10.0.

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Main orchestrator for the PRAutoBlogger plugin. * Main orchestrator for the PRAutoBlogger plugin.
* *
* Registers all WordPress hooks (actions and filters) and wires up dependencies. * Registers all WordPress hooks (actions and filters) and wires up dependencies.

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Creates / updates the plugin's custom database tables via `dbDelta`. * Creates / updates the plugin's custom database tables via `dbDelta`.
* *
* Extracted from `PRAutoBlogger_Activator` in v0.8.2 to keep that class * Extracted from `PRAutoBlogger_Activator` in v0.8.2 to keep that class

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Prompt construction for the content analysis LLM call. * Prompt construction for the content analysis LLM call.
* *
* What: Builds system and user prompts for source-data analysis, including * What: Builds system and user prompts for source-data analysis, including

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Generates a single article: content → editorial review → publish/draft. * Generates a single article: content → editorial review → publish/draft.
* *
* Extracted from Pipeline_Runner so each chained cron job has a focused, * Extracted from Pipeline_Runner so each chained cron job has a focused,

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Chief Editor agent — LLM-powered editorial review of generated content. * Chief Editor agent — LLM-powered editorial review of generated content.
* *
* Reviews articles for quality, accuracy, SEO, and tone before publishing. * Reviews articles for quality, accuracy, SEO, and tone before publishing.

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Analyzes collected source data using an LLM to detect recurring patterns: * Analyzes collected source data using an LLM to detect recurring patterns:
* questions people ask, complaints/pain points, and product comparisons. * questions people ask, complaints/pain points, and product comparisons.
* *

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Writer agent — generates blog post content from article ideas. * Writer agent — generates blog post content from article ideas.
* *
* Supports two configurable pipeline modes: * Supports two configurable pipeline modes:

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Builds all LLM prompts used by the content generation pipeline. * Builds all LLM prompts used by the content generation pipeline.
* *
* Centralises prompt construction so Content_Generator stays lean and * Centralises prompt construction so Content_Generator stays lean and

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Provides historical cost reporting and analysis methods. * Provides historical cost reporting and analysis methods.
* *
* Extracted from PRAutoBlogger_Cost_Tracker, this class handles all read-only * Extracted from PRAutoBlogger_Cost_Tracker, this class handles all read-only

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Tracks all API costs and enforces monthly budget limits. * Tracks all API costs and enforces monthly budget limits.
* *
* Every LLM API call in the plugin is logged through this class. The budget * Every LLM API call in the plugin is logged through this class. The budget

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Google Analytics 4 API client for fetching post performance metrics. * Google Analytics 4 API client for fetching post performance metrics.
* *
* Handles OAuth2 service account authentication and the GA4 Data API. * Handles OAuth2 service account authentication and the GA4 Data API.

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Ranks and deduplicates article ideas from analysis results. * Ranks and deduplicates article ideas from analysis results.
* *
* Uses PRAutoBlogger_Semantic_Dedup for similarity detection — embedding-based * Uses PRAutoBlogger_Semantic_Dedup for similarity detection — embedding-based

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Downloads generated images and imports them into the WordPress media library. * Downloads generated images and imports them into the WordPress media library.
* *
* Handles sideloading (importing external images as WordPress attachments), * Handles sideloading (importing external images as WordPress attachments),

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Single-shot retry of NSFW-blocked image slots with a sanitized prompt. * Single-shot retry of NSFW-blocked image slots with a sanitized prompt.
* *
* When an image provider rejects a prompt via its content filter, its * When an image provider rejects a prompt via its content filter, its

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Orchestrates image generation for published articles. * Orchestrates image generation for published articles.
* *
* Generates two images per article (A/B): Image A (article-driven) as featured * Generates two images per article (A/B): Image A (article-driven) as featured

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Builds image prompts from article content or source data. * Builds image prompts from article content or source data.
* *
* Uses a cheap LLM (via OpenRouter) to distill article content into concise * Uses a cheap LLM (via OpenRouter) to distill article content into concise

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Extracts valid JSON from potentially dirty LLM response strings. * Extracts valid JSON from potentially dirty LLM response strings.
* *
* Many models ignore the `response_format: json_object` instruction and wrap * Many models ignore the `response_format: json_object` instruction and wrap

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Structured logging with configurable verbosity levels. * Structured logging with configurable verbosity levels.
* *
* Writes log entries to a custom database table and optionally forwards * Writes log entries to a custom database table and optionally forwards

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Collects post performance metrics from WordPress native data and Google Analytics 4. * Collects post performance metrics from WordPress native data and Google Analytics 4.
* *
* Runs on a separate cron schedule (every 6 hours) to gather pageviews, bounce rate, * Runs on a separate cron schedule (every 6 hours) to gather pageviews, bounce rate,

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Deterministic post-processor that hyperlinks peptide mentions in HTML content. * Deterministic post-processor that hyperlinks peptide mentions in HTML content.
* *
* Scans generated article HTML for any peptide name that exists in the PR Core * Scans generated article HTML for any peptide name that exists in the PR Core

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Executes the content generation pipeline using a chained-job architecture. * Executes the content generation pipeline using a chained-job architecture.
* *
* Orchestrates: Budget check → Collect source data → Analyze patterns → * Orchestrates: Budget check → Collect source data → Analyze patterns →

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Post-creation assembly helpers: taxonomy, log linking, images, content sanitization. * Post-creation assembly helpers: taxonomy, log linking, images, content sanitization.
* *
* What: After wp_insert_post, assigns categories/tags, links generation logs, * What: After wp_insert_post, assigns categories/tags, links generation logs,

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Creates WordPress posts from generated and editor-approved content. * Creates WordPress posts from generated and editor-approved content.
* *
* Handles both publishing (editor-approved) and saving as draft (editor-rejected). * Handles both publishing (editor-approved) and saving as draft (editor-rejected).

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Daily cron that retroactively amortizes orphan `llm_research` rows. * Daily cron that retroactively amortizes orphan `llm_research` rows.
* *
* When a pipeline run dies between post creation and the final * When a pipeline run dies between post creation and the final

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Semantic deduplication using embedding cosine similarity. * Semantic deduplication using embedding cosine similarity.
* *
* Embeds candidate topics and recent post titles in a single batch API call, * Embeds candidate topics and recent post titles in a single batch API call,

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Orchestrates data collection from all enabled source providers. * Orchestrates data collection from all enabled source providers.
* *
* Iterates through enabled sources (Reddit, LLM Research), calls their * Iterates through enabled sources (Reddit, LLM Research), calls their

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Injects frontend typography and table styles for PRAutoBlogger-generated posts. * Injects frontend typography and table styles for PRAutoBlogger-generated posts.
* *
* What: Outputs inline CSS on all single post pages, applying * What: Outputs inline CSS on all single post pages, applying

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Registers the [prautoblogger_posts] shortcode and its supporting REST API endpoint. * Registers the [prautoblogger_posts] shortcode and its supporting REST API endpoint.
* *
* This is PRAutoBlogger's first public-facing frontend feature. It renders a React-powered * This is PRAutoBlogger's first public-facing frontend feature. It renders a React-powered

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Value object representing an analyzed topic pattern (recurring question, * Value object representing an analyzed topic pattern (recurring question,
* complaint, or comparison detected in source data). * complaint, or comparison detected in source data).
* *

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Value object representing a scored article idea ready for content generation. * Value object representing a scored article idea ready for content generation.
* *
* Created by the Idea_Scorer from Analysis_Results. Consumed by Content_Generator. * Created by the Idea_Scorer from Analysis_Results. Consumed by Content_Generator.

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Value object encapsulating all parameters for a content generation request. * Value object encapsulating all parameters for a content generation request.
* *
* Bundles the article idea with user-configured generation preferences * Bundles the article idea with user-configured generation preferences

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Value object for a post's composite performance score. * Value object for a post's composite performance score.
* *
* Triggered by: Metrics_Collector creates these; Content_Analyzer reads them for self-improvement. * Triggered by: Metrics_Collector creates these; Content_Analyzer reads them for self-improvement.

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Value object representing the chief editor agent's review of generated content. * Value object representing the chief editor agent's review of generated content.
* *
* Triggered by: Chief_Editor creates these; Publisher consumes them. * Triggered by: Chief_Editor creates these; Publisher consumes them.

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Value object for an API call log entry (cost tracking). * Value object for an API call log entry (cost tracking).
* *
* Triggered by: Cost_Tracker creates these; Metrics_Page displays them. * Triggered by: Cost_Tracker creates these; Metrics_Page displays them.

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Value object representing a single piece of collected social media data * Value object representing a single piece of collected social media data
* (e.g., a Reddit post or comment). * (e.g., a Reddit post or comment).
* *

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Exception raised when an image provider rejects a prompt as NSFW. * Exception raised when an image provider rejects a prompt as NSFW.
* *
* Image providers (Runware, OpenRouter) return provider-specific error * Image providers (Runware, OpenRouter) return provider-specific error

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* LLM Deep Research source provider — uses a reasoning-capable model to * LLM Deep Research source provider — uses a reasoning-capable model to
* identify trending topics, emerging questions, and content gaps in the niche. * identify trending topics, emerging questions, and content gaps in the niche.
* *

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Configuration helpers for OpenRouter provider. * Configuration helpers for OpenRouter provider.
* *
* Resolves admin-configured settings for API endpoint selection * Resolves admin-configured settings for API endpoint selection

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Fetches text embeddings from OpenRouter for semantic similarity comparisons. * Fetches text embeddings from OpenRouter for semantic similarity comparisons.
* *
* Used by the Idea Scorer to detect semantically similar topics that keyword * Used by the Idea Scorer to detect semantically similar topics that keyword

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Parallel image generation via curl_multi for OpenRouter. * Parallel image generation via curl_multi for OpenRouter.
* *
* Fires multiple chat/completions requests concurrently using PHP's * Fires multiple chat/completions requests concurrently using PHP's

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Pricing + model-id resolution helpers for the OpenRouter image provider. * Pricing + model-id resolution helpers for the OpenRouter image provider.
* *
* Mirrors the Runware pricing helper pattern. Each model's cost per image * Mirrors the Runware pricing helper pattern. Each model's cost per image

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* OpenRouter image provider — model-agnostic, works with any image model. * OpenRouter image provider — model-agnostic, works with any image model.
* *
* Triggered by: PRAutoBlogger_Image_Pipeline during content generation. * Triggered by: PRAutoBlogger_Image_Pipeline during content generation.

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Support helpers for the OpenRouter image provider — API key lookup, * Support helpers for the OpenRouter image provider — API key lookup,
* response parsing, retry backoff, and logging. * response parsing, retry backoff, and logging.
* *

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* OpenRouter model pricing and availability lookup. * OpenRouter model pricing and availability lookup.
* *
* Manages pricing tables, model lists, and cost estimation. Decoupled from * Manages pricing tables, model lists, and cost estimation. Decoupled from

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* OpenRouter API integration for all LLM calls (analysis, writing, editing). * OpenRouter API integration for all LLM calls (analysis, writing, editing).
* *
* OpenRouter provides a unified API to access models from Anthropic, OpenAI, * OpenRouter provides a unified API to access models from Anthropic, OpenAI,

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Request builder for OpenRouter API calls. * Request builder for OpenRouter API calls.
* *
* Encapsulates the logic for building HTTP request headers, including * Encapsulates the logic for building HTTP request headers, including

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Response parser for OpenRouter API responses. * Response parser for OpenRouter API responses.
* *
* Encapsulates the logic for parsing and validating OpenRouter chat completion * Encapsulates the logic for parsing and validating OpenRouter chat completion

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Credential + connectivity validator for the OpenRouter LLM provider. * Credential + connectivity validator for the OpenRouter LLM provider.
* *
* Split out of the provider to keep each file under the 300-line cap and * Split out of the provider to keep each file under the 300-line cap and

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Reddit endpoint availability checker. * Reddit endpoint availability checker.
* *
* Probes Reddit's RSS and .json endpoints to determine which data sources * Probes Reddit's RSS and .json endpoints to determine which data sources

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Reddit HTTP client — fetches posts via RSS (primary) and .json (fallback). * Reddit HTTP client — fetches posts via RSS (primary) and .json (fallback).
* *
* RSS feeds are the primary data source because they work reliably from datacenter * RSS feeds are the primary data source because they work reliably from datacenter

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Reddit data provider — collects posts and comments from target subreddits. * Reddit data provider — collects posts and comments from target subreddits.
* *
* Uses Reddit RSS/Atom feeds as the PRIMARY data source (reliable from datacenter IPs, * Uses Reddit RSS/Atom feeds as the PRIMARY data source (reliable from datacenter IPs,

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Reddit RSS/Atom feed parser — parses Atom XML into normalized post arrays. * Reddit RSS/Atom feed parser — parses Atom XML into normalized post arrays.
* *
* Handles parsing of Reddit's Atom/RSS feeds and mapping them to the standard * Handles parsing of Reddit's Atom/RSS feeds and mapping them to the standard

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Pricing + model-id resolution helpers for the Runware image provider. * Pricing + model-id resolution helpers for the Runware image provider.
* *
* Each Runware FLUX model has a flat per-image cost sourced from * Each Runware FLUX model has a flat per-image cost sourced from

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Runware image provider — FLUX.1 schnell / dev via runware.ai. * Runware image provider — FLUX.1 schnell / dev via runware.ai.
* *
* Default image backend as of 2026-04-21: schnell (runware:100@1) at * Default image backend as of 2026-04-21: schnell (runware:100@1) at

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Support helpers for the Runware image provider — API key lookup, * Support helpers for the Runware image provider — API key lookup,
* response parsing (URL fetch), retry backoff, and logging. * response parsing (URL fetch), retry backoff, and logging.
* *

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* Normalizes raw OpenRouter model data into the standardized record shape. * Normalizes raw OpenRouter model data into the standardized record shape.
* *
* Extracted from PRAutoBlogger_OpenRouter_Model_Registry so both classes stay * Extracted from PRAutoBlogger_OpenRouter_Model_Registry so both classes stay

View File

@@ -1,8 +1,9 @@
<?php <?php
// phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
declare(strict_types=1); declare(strict_types=1);
/** /**
* phpcs:ignore WordPress.Files.FileName.InvalidClassFileName -- class naming convention differs from WordPress standard
*
* OpenRouter model registry — fetches, normalizes, and caches the model list. * OpenRouter model registry — fetches, normalizes, and caches the model list.
* *
* All config is constructor-injected. No PRAUTOBLOGGER_* constants referenced * All config is constructor-injected. No PRAUTOBLOGGER_* constants referenced

View File

@@ -1,8 +1,9 @@
<?php <?php
declare(strict_types=1); declare(strict_types=1);
// phpcs:ignore Generic.PHP.RequireStrictTypes.MissingDeclaration -- strict_types must precede docblock
/** /**
* phpcs:ignore Generic.PHP.RequireStrictTypes.MissingDeclaration -- strict_types must precede docblock
*
* PRAutoBlogger — Automated Content Research & Publishing * PRAutoBlogger — Automated Content Research & Publishing
* *
* @wordpress-plugin * @wordpress-plugin

View File

@@ -1,8 +1,9 @@
<?php <?php
declare(strict_types=1); declare(strict_types=1);
// phpcs:ignore Generic.PHP.RequireStrictTypes.MissingDeclaration -- strict_types must precede docblock
/** /**
* phpcs:ignore Generic.PHP.RequireStrictTypes.MissingDeclaration -- strict_types must precede docblock
*
* Fired when the plugin is uninstalled (deleted) from WordPress. * Fired when the plugin is uninstalled (deleted) from WordPress.
* *
* Removes ALL plugin data: custom tables, options, post meta, transients, and cron events. * Removes ALL plugin data: custom tables, options, post meta, transients, and cron events.