{"id":250735,"date":"2025-09-20T02:40:10","date_gmt":"2025-09-20T02:40:10","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/init-ad-engine\/"},"modified":"2025-11-14T16:23:17","modified_gmt":"2025-11-14T16:23:17","slug":"init-ad-engine","status":"publish","type":"plugin","link":"https:\/\/twd.wordpress.org\/plugins\/init-ad-engine\/","author":14479633,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.4","stable_tag":"1.4","tested":"6.9.4","requires":"5.5","requires_php":"7.4","requires_plugins":null,"header_name":"Init Ad Engine","header_author":"Init HTML","header_description":"A lightweight but powerful ad display engine for WordPress. Smart placement, no code required.","assets_banners_color":"d7782d","last_updated":"2025-11-14 16:23:17","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/inithtml.com\/plugin\/init-ad-engine\/","header_author_uri":"https:\/\/inithtml.com\/","rating":0,"author_block_rating":0,"active_installs":60,"downloads":626,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2":{"tag":"1.2","author":"brokensmile.2103","date":"2025-09-20 02:39:37"},"1.2.1":{"tag":"1.2.1","author":"brokensmile.2103","date":"2025-10-01 06:04:58"},"1.3":{"tag":"1.3","author":"brokensmile.2103","date":"2025-10-25 04:32:31"},"1.4":{"tag":"1.4","author":"brokensmile.2103","date":"2025-11-14 16:23:17"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3364800,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3364800,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3364800,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3364800,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2","1.2.1","1.3","1.4"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3395851,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3395851,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3395851,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3395851,"resolution":"4","location":"assets","locale":""}},"screenshots":{"1":"<strong>PC Settings Tab<\/strong> \u2013 Configure desktop-only ad positions such as Billboard, Catfish, Popup Center PC, and sidebar floats","2":"<strong>Mobile Settings Tab<\/strong> \u2013 Configure mobile-specific units including Sticky Top\/Bottom, Mini Billboard, and Popup Center Mobile","3":"<strong>Popunder &amp; Global Tab<\/strong> \u2013 Configure popunder behavior and global head\/footer injection","4":"<strong>Affiliate Gate Tab<\/strong> \u2013 Full settings UI for content gating, steps, random modes, blur overlay, and banner configuration"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[321,784,4251,49859,491],"plugin_category":[35],"plugin_contributors":[242666],"plugin_business_model":[],"class_list":["post-250735","plugin","type-plugin","status-publish","hentry","plugin_tags-ads","plugin_tags-banner","plugin_tags-content-locking","plugin_tags-popunder","plugin_tags-popup","plugin_category-advertising","plugin_contributors-brokensmile2103-1","plugin_committers-brokensmile2103-1"],"banners":{"banner":"https:\/\/ps.w.org\/init-ad-engine\/assets\/banner-772x250.png?rev=3364800","banner_2x":"https:\/\/ps.w.org\/init-ad-engine\/assets\/banner-1544x500.png?rev=3364800","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/init-ad-engine\/assets\/icon-128x128.png?rev=3364800","icon_2x":"https:\/\/ps.w.org\/init-ad-engine\/assets\/icon-256x256.png?rev=3364800","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/init-ad-engine\/assets\/screenshot-1.png?rev=3395851","caption":"<strong>PC Settings Tab<\/strong> \u2013 Configure desktop-only ad positions such as Billboard, Catfish, Popup Center PC, and sidebar floats"},{"src":"https:\/\/ps.w.org\/init-ad-engine\/assets\/screenshot-2.png?rev=3395851","caption":"<strong>Mobile Settings Tab<\/strong> \u2013 Configure mobile-specific units including Sticky Top\/Bottom, Mini Billboard, and Popup Center Mobile"},{"src":"https:\/\/ps.w.org\/init-ad-engine\/assets\/screenshot-3.png?rev=3395851","caption":"<strong>Popunder &amp; Global Tab<\/strong> \u2013 Configure popunder behavior and global head\/footer injection"},{"src":"https:\/\/ps.w.org\/init-ad-engine\/assets\/screenshot-4.png?rev=3395851","caption":"<strong>Affiliate Gate Tab<\/strong> \u2013 Full settings UI for content gating, steps, random modes, blur overlay, and banner configuration"}],"raw_content":"<!--section=description-->\n<p><strong>Init Ad Engine<\/strong> lets you insert various ad formats into your WordPress site with zero coding required.<\/p>\n\n<p>Built for flexibility and performance:\n- Tabbed admin UI with clear separation by device type\n- All styles are inline or embedded \u2013 no external CSS files\n- Multiple ad formats supported: popups, sticky bars, floating ads, popunder, before\/after content\n- Optional fallback HTML\/JS code when no image is provided<\/p>\n\n<p><strong>Available ad positions:<\/strong><\/p>\n\n<ul>\n<li><p><strong>Desktop (PC):<\/strong><br \/>\nBillboard, Balloon Left\/Right, Float Left\/Right, Catfish Top\/Bottom, Popup Center, Before\/After Content<\/p><\/li>\n<li><p><strong>Mobile:<\/strong><br \/>\nMini Billboard, Sticky Top\/Bottom, Popup Center, Before\/After Content<\/p><\/li>\n<li><p><strong>Special:<\/strong><br \/>\nPopunder (opens new tab on first click), Global header\/footer code injection<\/p><\/li>\n<\/ul>\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-ad-engine\">https:\/\/github.com\/brokensmile2103\/init-ad-engine<\/a><\/p>\n\n<h3>Features<\/h3>\n\n<ul>\n<li>20+ configurable ad positions<\/li>\n<li>Popunder with cooldown and click threshold<\/li>\n<li>Exit-intent or delay-based popup behavior<\/li>\n<li>Global <code>&lt;head&gt;<\/code> and <code>&lt;\/body&gt;<\/code> injection fields<\/li>\n<li>Fallback HTML\/JS ad code per position<\/li>\n<li>Minimalist inline CSS for fast load<\/li>\n<li>Responsive support for all device types<\/li>\n<li>Clean admin UI with media uploader<\/li>\n<li>Affiliate Gate with flexible display logic (always-on, expire-after-click, random %, every X pages)<\/li>\n<\/ul>\n\n<h3>Filters for Developers<\/h3>\n\n<ul>\n<li><p><code>init_plugin_suite_ad_engine_use_kses<\/code><br \/>\nControl whether ad snippets are escaped via <code>wp_kses<\/code>. Default: <code>true<\/code>.<\/p><\/li>\n<li><p><code>init_plugin_suite_ad_engine_allowed_tags<\/code><br \/>\nExtend or modify the allow-list of permitted tags\/attributes for ad snippets.<\/p><\/li>\n<li><p><code>init_plugin_suite_ad_engine_disable_all_ads<\/code><br \/>\nDisable all ad injections globally. Default: <code>false<\/code>.<\/p><\/li>\n<li><p><code>init_ad_engine_should_enqueue_affiliate_gate<\/code><br \/>\nControl whether the Affiliate Gate scripts should be enqueued.<\/p><\/li>\n<\/ul>\n\n<h3>Security Notes<\/h3>\n\n<ul>\n<li>Ad snippets entered in the plugin settings are considered user-provided content.  <\/li>\n<li>By default, all snippets are escaped at render time using <code>wp_kses<\/code> with a restricted allow-list of tags and attributes.  <\/li>\n<li>Developers can disable escaping via the <code>init_plugin_suite_ad_engine_use_kses<\/code> filter if they explicitly trust their input.  <\/li>\n<li>All ad injections can be globally disabled via the <code>init_plugin_suite_ad_engine_disable_all_ads<\/code> filter.  <\/li>\n<li>Only administrators with the <code>manage_options<\/code> capability can configure or modify global ad settings.<\/li>\n<\/ul>\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 to <code>\/wp-content\/plugins\/init-ad-engine<\/code> or install from the WordPress Plugin Directory.<\/li>\n<li>Activate it via the <strong>Plugins<\/strong> menu.<\/li>\n<li>Go to <strong>Settings \u2192 Init Ad Engine<\/strong> and configure your ad placements.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id='will%20it%20conflict%20with%20page%20caching%20or%20optimization%20plugins%3F'><h3>Will it conflict with page caching or optimization plugins?<\/h3><\/dt>\n<dd><p>No. Ad rendering is done via inline JS and dynamic DOM injection. It's fully compatible with caching.<\/p><\/dd>\n<dt id='can%20i%20use%20custom%20javascript%20ad%20tags%3F'><h3>Can I use custom JavaScript ad tags?<\/h3><\/dt>\n<dd><p>Yes. Each position supports a fallback HTML\/JS block, including <code>&lt;script&gt;<\/code> tags.<\/p><\/dd>\n<dt id='does%20it%20support%20responsive%20behavior%3F'><h3>Does it support responsive behavior?<\/h3><\/dt>\n<dd><p>Yes. Each ad position is associated with desktop, mobile, or both. The plugin auto-detects screen size.<\/p><\/dd>\n<dt id='does%20it%20track%20views%20or%20clicks%3F'><h3>Does it track views or clicks?<\/h3><\/dt>\n<dd><p>No. Version 1.0 focuses on display only. Analytics may be added in future updates.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.4 \u2013 November 14, 2025<\/h4>\n\n<ul>\n<li>UX: Settings screen now <strong>remembers the last active tab<\/strong> and automatically restores it when you reopen the page<\/li>\n<li>UX: Improved height\/scroll behavior for <strong>\u201cPopunder &amp; Global\u201d<\/strong> tab to prevent sudden jumps when switching tabs<\/li>\n<li>Dev: Refactored tab-switching logic to a single inline handler using <code>localStorage<\/code> for per-admin tab state<\/li>\n<li>Maint: Kept existing markup and option structure intact to avoid breaking any saved configurations or integrations<\/li>\n<\/ul>\n\n<h4>1.3 \u2013 October 25, 2025<\/h4>\n\n<ul>\n<li>New: Affiliate Gate now supports <strong>multiple affiliate links<\/strong> separated by commas \u2014 one will be displayed <strong>randomly<\/strong> on each trigger<\/li>\n<li>UX: Added description text under Affiliate Link field \u2014 \u201cEnter multiple links separated by commas (,) to display them randomly.\u201d<\/li>\n<li>Dev: Implemented <code>pickAffiliateLink()<\/code> helper to normalize, decode, and randomly select a valid <code>http\/https<\/code> link from list<\/li>\n<li>Maint: Code cleanup and safe decoding of <code>%20<\/code> characters in link strings for better compatibility<\/li>\n<\/ul>\n\n<h4>1.2 \u2013 September 10, 2025<\/h4>\n\n<ul>\n<li>Security: Global head and footer injection now use <code>wp_kses<\/code> with a custom allow-list for late escaping (security hardening)<\/li>\n<li>New: Added filter <code>init_plugin_suite_ad_engine_use_kses<\/code> to toggle escaping (default <code>true<\/code>)\nDevelopers can return <code>false<\/code> to output raw snippets without escaping<\/li>\n<li>New: Added filter <code>init_plugin_suite_ad_engine_allowed_tags<\/code> to extend or modify the allow-list of permitted tags\/attributes<\/li>\n<li>Maint: Refactored injection code to use a unified <code>init_plugin_suite_ad_engine_render_snippet()<\/code> helper function<\/li>\n<\/ul>\n\n<h4>1.1 \u2013 July 14, 2025<\/h4>\n\n<ul>\n<li>New: Affiliate Gate \u2013 hide content and display affiliate promo with banner, link, intro\/outro text<\/li>\n<li>New: Affiliate Gate now supports 4 display modes \u2013 always-on, expire-after-click, random percentage, and every X pages<\/li>\n<li>New: Added support for custom step list (e.g. \"1,3,5\") to control exactly which pageviews show the gate<\/li>\n<li>New: Added \"blur overlay\" option \u2013 insert semi-transparent clickable layer over any selector, with its own step logic<\/li>\n<li>New: Blur overlay and custom steps use persistent localStorage counters with auto-reset after <code>expire_hours<\/code><\/li>\n<li>New: Refreshing the same page no longer increases step count \u2013 only new pageviews are tracked<\/li>\n<li>New: Customizable selector for content gating<\/li>\n<li>New: Inline script config injected in  to avoid layout shift<\/li>\n<li>New: Filter <code>init_ad_engine_should_enqueue_affiliate_gate<\/code> allows theme to control when to enqueue the affiliate gate<\/li>\n<\/ul>\n\n<h4>1.0 \u2013 May 29, 2025<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Support for 20+ ad positions<\/li>\n<li>Popunder with configurable triggers<\/li>\n<li>Global header\/footer code fields<\/li>\n<li>Simple fallback system for HTML\/JS ads<\/li>\n<\/ul>","raw_excerpt":"A lightweight and flexible ad engine for WordPress. Place banners, popups, sticky ads, and popunders across desktop and mobile with full control.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/250735","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=250735"}],"author":[{"embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/brokensmile2103-1"}],"wp:attachment":[{"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=250735"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=250735"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=250735"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=250735"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=250735"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=250735"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}