{"id":262074,"date":"2025-11-26T05:59:28","date_gmt":"2025-11-26T05:59:28","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/init-discord-hub\/"},"modified":"2026-08-03T18:54:03","modified_gmt":"2026-08-03T18:54:03","slug":"init-pulse-for-discord","status":"publish","type":"plugin","link":"https:\/\/azb.wordpress.org\/plugins\/init-pulse-for-discord\/","author":14479633,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2","stable_tag":"1.2","tested":"7.0.2","requires":"5.5","requires_php":"7.4","requires_plugins":null,"header_name":"Init Pulse For Discord","header_author":"Init HTML","header_description":"Send notifications to Discord via webhooks. Minimal, fast, and ready for extension.","assets_banners_color":"9536cd","last_updated":"2026-08-03 18:54:03","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/inithtml.com\/plugin\/init-pulse-for-discord\/","header_author_uri":"https:\/\/inithtml.com\/","rating":5,"author_block_rating":0,"active_installs":60,"downloads":792,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0":{"tag":"1.0","author":"brokensmile.2103","date":"2025-11-26 06:00:30"},"1.0.1":{"tag":"1.0.1","author":"brokensmile.2103","date":"2026-05-17 16:10:34"},"1.1":{"tag":"1.1","author":"brokensmile.2103","date":"2026-07-14 17:48:13"},"1.2":{"tag":"1.2","author":"brokensmile.2103","date":"2026-08-03 18:54:03"}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3403024,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3403024,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3403024,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3403024,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0","1.0.1","1.1","1.2"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3607844,"resolution":"1","location":"assets","locale":"","width":1048,"height":2242},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3607844,"resolution":"2","location":"assets","locale":"","width":944,"height":406},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3607844,"resolution":"3","location":"assets","locale":"","width":805,"height":763}},"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"}},"plugin_section":[],"plugin_tags":[569,23972,4906,2970,15439],"plugin_category":[],"plugin_contributors":[242666],"plugin_business_model":[],"class_list":["post-262074","plugin","type-plugin","status-publish","hentry","plugin_tags-automation","plugin_tags-discord","plugin_tags-notifications","plugin_tags-publish","plugin_tags-webhook","plugin_contributors-brokensmile2103-1","plugin_committers-brokensmile2103-1"],"banners":{"banner":"https:\/\/ps.w.org\/init-pulse-for-discord\/assets\/banner-772x250.png?rev=3403024","banner_2x":"https:\/\/ps.w.org\/init-pulse-for-discord\/assets\/banner-1544x500.png?rev=3403024","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/init-pulse-for-discord\/assets\/icon-128x128.png?rev=3403024","icon_2x":"https:\/\/ps.w.org\/init-pulse-for-discord\/assets\/icon-256x256.png?rev=3403024","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/init-pulse-for-discord\/assets\/screenshot-1.png?rev=3607844","caption":"Settings page with webhook + template fields"},{"src":"https:\/\/ps.w.org\/init-pulse-for-discord\/assets\/screenshot-2.png?rev=3607844","caption":"Delivery Log with recent webhook delivery history"},{"src":"https:\/\/ps.w.org\/init-pulse-for-discord\/assets\/screenshot-3.png?rev=3607844","caption":"Category\/Tag edit screen with Role ID inputs"}],"raw_content":"<!--section=description-->\n<p><strong>Init Pulse For Discord<\/strong> sends automatic notifications to your Discord channel whenever a post is published or updated.<\/p>\n\n<p>This plugin is part of the <a href=\"https:\/\/en.inithtml.com\/init-plugin-suite-minimalist-powerful-and-free-wordpress-plugins\/\">Init Plugin Suite<\/a> \u2014 a collection of minimalist, fast, and developer-focused tools for WordPress.<\/p>\n\n<p>GitHub repository: <a href=\"https:\/\/github.com\/brokensmile2103\/init-pulse-for-discord\">https:\/\/github.com\/brokensmile2103\/init-pulse-for-discord<\/a><\/p>\n\n<p>Perfect for:<\/p>\n\n<ul>\n<li>Blog \/ community announcements  <\/li>\n<li>Internal editorial workflow  <\/li>\n<li>Discord-driven audiences  <\/li>\n<\/ul>\n\n<p>Straightforward configuration:<\/p>\n\n<ul>\n<li>Paste your webhook URL  <\/li>\n<li>(Optional) Configure Discord role IDs inside <strong>Categories<\/strong> or <strong>Tags<\/strong>  <\/li>\n<li>Done \u2014 your server receives updates instantly  <\/li>\n<\/ul>\n\n<p>Clean, minimal, and built for performance \u2014 no bloat, no external SDKs.<\/p>\n\n<p>Key design goals:<\/p>\n\n<ul>\n<li>Minimal setup (Webhook + 1 settings page)<\/li>\n<li>No database clutter<\/li>\n<li>No JS\/CSS overhead on frontend<\/li>\n<li>Role-aware mentions through taxonomies<\/li>\n<\/ul>\n\n<h3>Features<\/h3>\n\n<ul>\n<li>Auto-send notifications when content is <strong>published<\/strong><\/li>\n<li>Optional notifications when content is <strong>updated<\/strong><\/li>\n<li><strong>Custom Post Type support<\/strong> \u2014 choose exactly which post types (posts, pages, products, or any custom type) should trigger a notification<\/li>\n<li>Role tagging based on Categories &amp; Tags<br \/>\n\u2192 When a post is in that taxonomy, that role is mentioned<\/li>\n<li><strong>Rich Discord embeds<\/strong> \u2014 title, description, accent color, footer, and timestamp (with a plain-text fallback mode)<\/li>\n<li><strong>Send Test Message<\/strong> button on the settings screen \u2014 verify your webhook without publishing a post<\/li>\n<li><strong>Delivery Log<\/strong> \u2014 a rolling snapshot of the most recent deliveries (success\/error) for troubleshooting, stored lightly in <code>wp_options<\/code> with <code>autoload = no<\/code><\/li>\n<li>Custom message template with placeholders:\n\n<ul>\n<li><code>{title}<\/code> \u2014 post title<\/li>\n<li><code>{title_url}<\/code> \u2014 markdown title linking to URL<\/li>\n<li><code>{url}<\/code> \u2014 post URL<\/li>\n<li><code>{excerpt}<\/code> \u2014 trimmed excerpt<\/li>\n<li><code>{site_name}<\/code> \u2014 your site\u2019s name<\/li>\n<li><code>{author}<\/code> \u2014 post author display name<\/li>\n<li><code>{categories}<\/code> \u2014 comma-separated category names<\/li>\n<li><code>{tags}<\/code> \u2014 comma-separated tag names<\/li>\n<li><code>{post_type}<\/code> \u2014 post type label<\/li>\n<li><code>{date}<\/code> \u2014 published date (site format)<\/li>\n<\/ul><\/li>\n<li>Optional featured image embed<\/li>\n<li>Retry logic &amp; timeout controls<\/li>\n<li>No action removals \u2014 plays well with all other plugins<\/li>\n<li>Compact, modern codebase<\/li>\n<li><strong>Hot Post Milestones<\/strong> <em>(optional, requires <a href=\"https:\/\/wordpress.org\/plugins\/init-view-count\/\">Init View Count<\/a>)<\/em> \u2014 automatically notify Discord when a post's total view count crosses a configured threshold (e.g. 1,000 \/ 10,000 \/ 100,000 views), with its own message template and <code>{views}<\/code>, <code>{views_short}<\/code>, <code>{milestone}<\/code> placeholders. Each milestone is sent once per post. Gracefully inactive (with a link to install it) when Init View Count isn't active \u2014 no errors, no broken settings.<\/li>\n<\/ul>\n\n<h3>Usage<\/h3>\n\n<p>Navigate to:<\/p>\n\n<p><strong>Settings \u2192 Init Pulse For Discord<\/strong><\/p>\n\n<p>Available fields:<\/p>\n\n\n\n\n  Field\n  Purpose\n\n\n\n\n  Post Types\n  Which post types trigger a notification\n\n\n  Webhook URL\n  Where notifications are sent (with a Send Test Message button)\n\n\n  Username\n  Display name of your bot\n\n\n  Avatar URL\n  Custom bot avatar (optional)\n\n\n  Include Featured Image\n  Adds featured image as embed\n\n\n  Use Rich Embed\n  Toggle formatted embed vs. plain-text message\n\n\n  Embed Color\n  Accent color for the embed sidebar\n\n\n  Timeout \/ Retries\n  Reliability controls\n\n\n  Message Template\n  Markdown-ready content, used as the embed description or full message\n\n\n  Notify on View Milestones\n  Enable Discord alerts when a post's view count crosses a threshold (requires Init View Count)\n\n\n  View Milestones\n  Comma-separated view counts (e.g. <code>1000, 5000, 10000<\/code>)\n\n\n  Milestone Message Template\n  Separate template for milestone alerts, with <code>{views}<\/code>, <code>{views_short}<\/code>, <code>{milestone}<\/code> placeholders\n\n\n\n\n<p>The settings screen also shows a <strong>Delivery Log<\/strong> with the outcome of your most recent notifications.<\/p>\n\n<p>Role IDs can be configured in:<\/p>\n\n<ul>\n<li>Posts \u2192 Categories \u2192 Edit  <\/li>\n<li>Posts \u2192 Tags \u2192 Edit  <\/li>\n<\/ul>\n\n<p>Example mention result:<\/p>\n\n<p>&lt;@&amp;123456789012345678&gt; New post published!<\/p>\n\n<h3>Filters for Developers<\/h3>\n\n<pre><code>init_plugin_suite_pulse_for_discord_payload  \n<\/code><\/pre>\n\n<p>Modify the final webhook payload before sending.<br \/>\nParams: <code>array $payload<\/code>, <code>int $post_id<\/code>, <code>string $context<\/code><\/p>\n\n<pre><code>init_plugin_suite_pulse_for_discord_milestone_payload  \n<\/code><\/pre>\n\n<p>Modify the webhook payload for a milestone notification before sending.<br \/>\nParams: <code>array $payload<\/code>, <code>int $post_id<\/code>, <code>int $views<\/code>, <code>int $milestone<\/code><\/p>\n\n<p>Example:<\/p>\n\n<p>add_filter('init_plugin_suite_pulse_for_discord_payload', function($payload) {\n    $payload['content'] .= \"\\nCustom footer\";\n    return $payload;\n});<\/p>\n\n<h3>License<\/h3>\n\n<p>This plugin is licensed under the GPLv2 or later.<br \/>\nYou are free to use, modify, and distribute it under the same license.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate via <strong>Plugins \u2192 Init Pulse For Discord<\/strong><\/li>\n<li>Go to <strong>Settings \u2192 Init Pulse For Discord<\/strong> and paste your webhook URL<\/li>\n<li>Optional: Assign Discord Role IDs to categories &amp; tags<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20support%20custom%20post%20types%20%28cpt%29%3F\"><h3>Does it support Custom Post Types (CPT)?<\/h3><\/dt>\n<dd><p>Yes. Go to <strong>Settings \u2192 Init Pulse For Discord \u2192 Post Types<\/strong> and check any public post type you want to notify for (standard posts, pages, WooCommerce products, or any custom type).<\/p><\/dd>\n<dt id=\"can%20i%20test%20my%20webhook%20without%20publishing%20a%20post%3F\"><h3>Can I test my webhook without publishing a post?<\/h3><\/dt>\n<dd><p>Yes \u2014 use the <strong>Send Test Message<\/strong> button next to the Webhook URL field. It sends a sample message using whatever is currently in the form, even before you save.<\/p><\/dd>\n<dt id=\"where%20can%20i%20see%20if%20a%20notification%20failed%20to%20send%3F\"><h3>Where can I see if a notification failed to send?<\/h3><\/dt>\n<dd><p>The <strong>Delivery Log<\/strong> section at the bottom of the settings screen shows the most recent deliveries with their status and error detail, if any.<\/p><\/dd>\n<dt id=\"can%20i%20send%20different%20messages%20for%20different%20categories%3F\"><h3>Can I send different messages for different categories?<\/h3><\/dt>\n<dd><p>Indirectly: assign different role IDs to categories\/tags to tailor mentions.<\/p><\/dd>\n<dt id=\"can%20i%20use%20the%20webhook%20without%20role%20mentions%3F\"><h3>Can I use the webhook without role mentions?<\/h3><\/dt>\n<dd><p>Yes \u2014 simply leave the Role ID fields empty.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20override%20or%20remove%20publish%20hooks%3F\"><h3>Does this plugin override or remove publish hooks?<\/h3><\/dt>\n<dd><p>No. <strong>It never removes actions or filters.<\/strong><br \/>\nEverything is additive and safe-by-default.<\/p><\/dd>\n<dt id=\"what%20is%20%22hot%20post%20milestones%22%20and%20do%20i%20need%20another%20plugin%20for%20it%3F\"><h3>What is \"Hot Post Milestones\" and do I need another plugin for it?<\/h3><\/dt>\n<dd><p>It's an optional feature that sends a Discord alert when a post's total view count crosses a threshold you configure (e.g. 1,000 views). It requires the free <a href=\"https:\/\/wordpress.org\/plugins\/init-view-count\/\">Init View Count<\/a> plugin to be active, since that's what actually counts the views. If Init View Count isn't installed, the setting is simply inactive (with a link to get it) \u2014 nothing breaks, and no other feature of Init Pulse For Discord is affected.<\/p><\/dd>\n<dt id=\"i%20installed%20init%20view%20count%20after%20configuring%20milestones%20%E2%80%94%20do%20i%20need%20to%20re-save%20settings%3F\"><h3>I installed Init View Count after configuring milestones \u2014 do I need to re-save settings?<\/h3><\/dt>\n<dd><p>No. The connection is checked automatically on every page load, so milestone notifications start working as soon as Init View Count is active \u2014 no re-save needed.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2 \u2013 August 4, 2026<\/h4>\n\n<ul>\n<li>Added: <strong>Hot Post Milestones<\/strong> \u2014 optional cross-plugin integration with Init View Count. Sends a Discord notification (with its own message template) when a tracked post's total view count crosses a configured threshold. Each milestone fires once per post.\n\n<ul>\n<li>Soft dependency only: detected via <code>defined('INIT_PLUGIN_SUITE_VIEW_COUNT_VERSION')<\/code> on <code>plugins_loaded<\/code> (priority 20), so plugin load order never matters and nothing errors if Init View Count is inactive or later deactivated.<\/li>\n<li>When Init View Count isn't active, the settings screen shows a notice with a link to it; fields remain configurable and take effect automatically once the plugin is installed.<\/li>\n<\/ul><\/li>\n<li>Added: <code>init_plugin_suite_pulse_for_discord_milestone_payload<\/code> filter for developers to customize the milestone webhook payload.<\/li>\n<\/ul>\n\n<h4>1.1 \u2013 July 14, 2026<\/h4>\n\n<ul>\n<li>Added: Custom Post Type support \u2014 select which post types trigger notifications<\/li>\n<li>Added: Rich Discord embeds (title, description, color, footer, timestamp) with a plain-text fallback toggle<\/li>\n<li>Added: \"Send Test Message\" button on the settings screen<\/li>\n<li>Added: Delivery Log \u2014 rolling snapshot of recent deliveries, stored with <code>autoload = no<\/code><\/li>\n<li>Added: Extra template placeholders \u2014 <code>{author}<\/code>, <code>{categories}<\/code>, <code>{tags}<\/code>, <code>{post_type}<\/code>, <code>{date}<\/code><\/li>\n<li>Changed: \"Notify On\" labels are now generic (no longer hardcoded to \"post\")<\/li>\n<li>No breaking changes \u2014 existing webhook, template, and role settings are preserved as-is<\/li>\n<\/ul>\n\n<h4>1.0 \u2013 November 12, 2025<\/h4>\n\n<ul>\n<li>Initial release  <\/li>\n<li>Publish\/update notifications  <\/li>\n<li>Role-ID fields for categories &amp; tags  <\/li>\n<li>Template placeholders: <code>{title}<\/code>, <code>{title_url}<\/code>, <code>{url}<\/code>, <code>{excerpt}<\/code>, <code>{site_name}<\/code>  <\/li>\n<li>Featured image embed support  <\/li>\n<li>Timeout + retry logic (includes 429 Retry-After handling)  <\/li>\n<li>Small, efficient, and avoids overriding core\/hooks<\/li>\n<\/ul>","raw_excerpt":"Send WordPress post notifications to Discord via webhooks \u2014 role mentions, custom post types, and rich embeds.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/azb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/262074","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/azb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/azb.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/azb.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=262074"}],"author":[{"embeddable":true,"href":"https:\/\/azb.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/brokensmile2103-1"}],"wp:attachment":[{"href":"https:\/\/azb.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=262074"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/azb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=262074"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/azb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=262074"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/azb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=262074"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/azb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=262074"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/azb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=262074"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}