=== Init Pulse For Discord – Webhooks, Roles, Instant ===
Contributors: brokensmile.2103
Tags: discord, webhook, notifications, publish, automation
Requires at least: 5.5
Tested up to: 7.0
Requires PHP: 7.4
Stable tag: 1.1
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Send WordPress post notifications to Discord via webhooks — role mentions, custom post types, and rich embeds.

== Description ==

**Init Pulse For Discord** sends automatic notifications to your Discord channel whenever a post is published or updated.

This plugin is part of the [Init Plugin Suite](https://en.inithtml.com/init-plugin-suite-minimalist-powerful-and-free-wordpress-plugins/) — a collection of minimalist, fast, and developer-focused tools for WordPress.

GitHub repository: [https://github.com/brokensmile2103/init-pulse-for-discord](https://github.com/brokensmile2103/init-pulse-for-discord)

Perfect for:

- Blog / community announcements  
- Internal editorial workflow  
- Discord-driven audiences  

Straightforward configuration:

- Paste your webhook URL  
- (Optional) Configure Discord role IDs inside **Categories** or **Tags**  
- Done — your server receives updates instantly  

Clean, minimal, and built for performance — no bloat, no external SDKs.

Key design goals:

- Minimal setup (Webhook + 1 settings page)
- No database clutter
- No JS/CSS overhead on frontend
- Role-aware mentions through taxonomies

== Features ==

- Auto-send notifications when content is **published**
- Optional notifications when content is **updated**
- **Custom Post Type support** — choose exactly which post types (posts, pages, products, or any custom type) should trigger a notification
- Role tagging based on Categories & Tags  
  → When a post is in that taxonomy, that role is mentioned
- **Rich Discord embeds** — title, description, accent color, footer, and timestamp (with a plain-text fallback mode)
- **Send Test Message** button on the settings screen — verify your webhook without publishing a post
- **Delivery Log** — a rolling snapshot of the most recent deliveries (success/error) for troubleshooting, stored lightly in `wp_options` with `autoload = no`
- Custom message template with placeholders:
  - `{title}` — post title
  - `{title_url}` — markdown title linking to URL
  - `{url}` — post URL
  - `{excerpt}` — trimmed excerpt
  - `{site_name}` — your site’s name
  - `{author}` — post author display name
  - `{categories}` — comma-separated category names
  - `{tags}` — comma-separated tag names
  - `{post_type}` — post type label
  - `{date}` — published date (site format)
- Optional featured image embed
- Retry logic & timeout controls
- No action removals — plays well with all other plugins
- Compact, modern codebase

== Usage ==

Navigate to:

**Settings → Init Pulse For Discord**

Available fields:

| Field | Purpose |
|-------|---------|
| Post Types | Which post types trigger a notification |
| Webhook URL | Where notifications are sent (with a Send Test Message button) |
| Username | Display name of your bot |
| Avatar URL | Custom bot avatar (optional) |
| Include Featured Image | Adds featured image as embed |
| Use Rich Embed | Toggle formatted embed vs. plain-text message |
| Embed Color | Accent color for the embed sidebar |
| Timeout / Retries | Reliability controls |
| Message Template | Markdown-ready content, used as the embed description or full message |

The settings screen also shows a **Delivery Log** with the outcome of your most recent notifications.

Role IDs can be configured in:

- Posts → Categories → Edit  
- Posts → Tags → Edit  

Example mention result:

<@&123456789012345678> New post published!

== Filters for Developers ==

`init_plugin_suite_pulse_for_discord_payload`  
Modify the final webhook payload before sending.  
Params: `array $payload`, `int $post_id`, `string $context`

Example:

add_filter('init_plugin_suite_pulse_for_discord_payload', function($payload) {
    $payload['content'] .= "\nCustom footer";
    return $payload;
});

== Installation ==

1. Upload the plugin folder to `/wp-content/plugins/`
2. Activate via **Plugins → Init Pulse For Discord**
3. Go to **Settings → Init Pulse For Discord** and paste your webhook URL
4. Optional: Assign Discord Role IDs to categories & tags

== Screenshots ==

1. Settings page with webhook + template fields
2. Delivery Log with recent webhook delivery history
3. Category/Tag edit screen with Role ID inputs

== Frequently Asked Questions ==

= Does it support Custom Post Types (CPT)? =  
Yes. Go to **Settings → Init Pulse For Discord → Post Types** and check any public post type you want to notify for (standard posts, pages, WooCommerce products, or any custom type).

= Can I test my webhook without publishing a post? =  
Yes — use the **Send Test Message** button next to the Webhook URL field. It sends a sample message using whatever is currently in the form, even before you save.

= Where can I see if a notification failed to send? =  
The **Delivery Log** section at the bottom of the settings screen shows the most recent deliveries with their status and error detail, if any.

= Can I send different messages for different categories? =  
Indirectly: assign different role IDs to categories/tags to tailor mentions.

= Can I use the webhook without role mentions? =  
Yes — simply leave the Role ID fields empty.

= Does this plugin override or remove publish hooks? =  
No. **It never removes actions or filters.**  
Everything is additive and safe-by-default.

== Changelog ==

= 1.1 – July 14, 2026 =
- Added: Custom Post Type support — select which post types trigger notifications
- Added: Rich Discord embeds (title, description, color, footer, timestamp) with a plain-text fallback toggle
- Added: "Send Test Message" button on the settings screen
- Added: Delivery Log — rolling snapshot of recent deliveries, stored with `autoload = no`
- Added: Extra template placeholders — `{author}`, `{categories}`, `{tags}`, `{post_type}`, `{date}`
- Changed: "Notify On" labels are now generic (no longer hardcoded to "post")
- No breaking changes — existing webhook, template, and role settings are preserved as-is

= 1.0 – November 12, 2025 =  
- Initial release  
- Publish/update notifications  
- Role-ID fields for categories & tags  
- Template placeholders: `{title}`, `{title_url}`, `{url}`, `{excerpt}`, `{site_name}`  
- Featured image embed support  
- Timeout + retry logic (includes 429 Retry-After handling)  
- Small, efficient, and avoids overriding core/hooks  

== License ==

This plugin is licensed under the GPLv2 or later.  
You are free to use, modify, and distribute it under the same license.
