=== 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.