=== Articla Pro/Lite Bulk Publisher ===
Contributors: articla79
Tags: ai content, bulk publishing, openai, seo, anti-spam
Requires at least: 6.0
Tested up to: 6.8
Stable tag: Pro 0.7.4 / Lite 0.7.6
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
One-click AI bulk generator for drafts with citations, categories, blacklist, and compliance checks.
== External services ==
This plugin connects to external APIs to generate content and optionally fetch images.
1. OpenAI API — used to generate draft content and outlines when you click "Generate".
- Data sent: your prompts (topic, outline, settings) and minimal context needed to form the request.
- When: only when you explicitly start a generation.
- Service: OpenAI. Terms: https://openai.com/policies/terms Privacy: https://openai.com/policies/privacy-policy
2. Pexels API — used to search for a representative, license-free image when you enable image fetching.
- Data sent: your search keywords to retrieve an image.
- When: only when image search is enabled for a given post.
- Service: Pexels. Terms: https://www.pexels.com/terms-of-service/ Privacy: https://www.pexels.com/privacy-policy/
3. Articla.ai License Verification (PRO only) — used to validate your PRO license key.
- Data sent: license key, your WordPress site URL, and plugin version.
- When: when you submit/verify your license and during periodic checks.
- Service: Articla.ai. Terms: https://www.articla.ai/terms.txt
== Plans ==
Lite: up to 5 posts per batch, model locked to `o4-mini`, fixed interval (input disabled).
PRO (license verified): unlocks unlimited posts per batch, custom interval, and the model selector.
== Compatibility ==
* WordPress: 6.0 to 6.6 (tested)
* PHP: 7.4+ (checked on activation)
* Editor: Classic and Block Editor (posts are created as standard `post`)
== Installation ==
1. Upload the ZIP in **Plugins -> Add New -> Upload Plugin**, then **Activate**.
Or unzip and place `articla-pro-bulk-publisher/` into `/wp-content/plugins/`.
2. Go to **Articla Bulk -> Settings** to configure keys and defaults.
3. Go to **Articla Bulk -> Bulk Generate** to paste CSV rows and start your batch.
== Quick Start ==
1. In **Settings**, paste your **OpenAI API Key** and optionally your **Pexels API Key**.
2. (Optional) Enter your **PRO license** to unlock unlimited batch size and model selector.
3. In **Bulk Generate**, paste CSV rows (one per post), pick categories, and click **Start Processing**.
== API Keys ==
* **OpenAI API Key** - Create at https://platform.openai.com/api-keys and paste into **Articla settings**.
* **Pexels API Key** - Create at https://www.pexels.com/api/new/ to enable featured images.
== License (PRO) ==
* Enter your license in **Articla settings -> License Key**.
* The plugin verifies the license with the configured verification endpoint. Verification is briefly cached; each bulk run enforces a fresh check.
* If verification fails or is missing, Lite limits apply (5 posts/batch, fixed interval, model locked).
== Field Reference (Settings) ==
* **OpenAI API Key** - Required to generate content.
* **OpenAI Model** - Lite: locked to `o4-mini`. PRO: choose from the dropdown.
* **Language** - Hint for the content language.
* **Min post words** - Minimum words required for QC (e.g., 600).
* **Max post words** - Upper bound; drafts longer than this are trimmed before saving.
* **Min H2/H3** - Minimum count of headings (`
` or `
`).
* **Min Citations** - Minimum citation count required by QC.
* **Publish when QC passes** - Auto-publish only if QC criteria are met; otherwise save as draft.
* **Compliance Mode** - If enabled, drafts that fail QC get temporary `noindex,nofollow` until you approve them.
* **Blacklist (comma-separated)** - Words/phrases to avoid; matches are replaced by an em-dash.
== Bulk Generator (How to Use) ==
Paste CSV lines - one line per post. Columns:
title, keywords(optional), sources(semicolon-separated URLs), outline(H2s separated by |), image_query(optional)
**Example**
3-Day Marrakech Itinerary: Food Souks & Desert Day Trip,marrakech itinerary;medina;souk;jemaa el-fna;atlas mountains,https://visitmorocco.com/en;https://whc.unesco.org/en/list/331/;https://www.lonelyplanet.com/morocco/marrakesh,Before
You Go: Safety Money & Dress|Day 1: Medina Highlights & Souks|Day 2: Gardens Museums & Hammam|Day 3: Atlas or Agafay Day Trip|Where to Eat & Bargaining Etiquette|Transport & Budget Tips|Cultural Etiquette & Friday Hours|Conclusion,Marrakech medina
* **title** - required.
* **keywords** - optional; semicolon-separated tokens also used for tags and internal-link suggestions.
* **sources** - optional but recommended; semicolon-separated URLs used for in-text citations and the References section.
* **outline** - optional; H2 sections separated by `|`.
* **image_query** - optional; Pexels search query. Defaults to the title.
== Citations ==
* The model is instructed to cite only your **provided sources** (no invented URLs), add inline markers (e.g., `[1]`), and include a final **References** section.
* The plugin appends a References list when missing and counts citations from:
1) `` with `/
` and `
` items,
2) `
References
` directly followed by `/
`,
3) Fallback unique inline `[n]` markers in body text.
== Images (Pexels) ==
* If a Pexels key is present, the first search result is downloaded to Media and set as the featured image.
* If no image tag exists in the content, a `` with caption and attribution is inserted at the top.
* The attachment alt text is set to the post title.
== SEO (Yoast) ==
If Yoast SEO is active, the plugin fills: SEO Title (~60 chars), Meta Description (~155 chars from the first paragraph), Focus Keyphrase (first keyword), and Primary Category (first selected category).
== Export WXR ==
**Articla Bulk -> Export WXR** exports posts generated by this plugin (identified via `_albp_generated_by = 'ALBP'`) to a WordPress WXR `.xml` file for import elsewhere.
== Tips & Best Practices ==
* Set **Min/Max words** to your editorial target; enable **Publish when QC passes** to auto-publish good drafts.
* Provide at least 2-3 high-quality source URLs to improve citations.
* Keep the **Blacklist** updated to avoid disallowed topics/phrases.
* For consistent images, use a specific **image_query** (e.g., 'Marrakech medina at sunset').
== Troubleshooting ==
* **OpenAI error / missing key** - Add a valid key in **Articla settings**.
* **Citations show 0** - Ensure your CSV includes valid URLs; the plugin can auto-append References but needs actual sources to link.
* **No image** - Add a Pexels key and a meaningful `image_query`.
* **License invalid** - The plugin will fall back to Lite limits. Enter a valid license to enable PRO features.
* **Formatting looks off** - Ensure the model is returning HTML (the generator also converts a subset of Markdown to HTML as a fallback).
== Privacy & Security ==
* Content is sanitized via `wp_kses_post`.
* Affiliate links detected in the content are tagged with `rel="sponsored nofollow ugc"`.
* PRO features are enforced by license verification on each bulk run; the UI alone cannot unlock PRO.