{"id":292168,"date":"2026-03-31T02:10:32","date_gmt":"2026-03-31T02:10:32","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/adfusion-ad-manager-and-monetization\/"},"modified":"2026-05-20T19:31:17","modified_gmt":"2026-05-20T19:31:17","slug":"adfusion-ad-manager-and-monetization","status":"publish","type":"plugin","link":"https:\/\/pl.wordpress.org\/plugins\/adfusion-ad-manager-and-monetization\/","author":12029770,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.1","stable_tag":"1.2.1","tested":"7.0","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"AdFusion \u2013 Ad Manager, Monetization & AdSense Tracking","header_author":"Randy Breland","header_description":"Advanced ad management and monetization core foundation.","assets_banners_color":"948f83","last_updated":"2026-05-20 19:31:17","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/adfusion-ad-manager-and-monetization\/","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":298,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"brelandr","date":"2026-03-31 02:11:02"},"1.1.0":{"tag":"1.1.0","author":"brelandr","date":"2026-03-31 13:09:06"},"1.1.1":{"tag":"1.1.1","author":"brelandr","date":"2026-03-31 15:08:27"},"1.2.1":{"tag":"1.2.1","author":"brelandr","date":"2026-05-20 19:31:17"}},"upgrade_notice":{"1.2.1":"<p>WordPress 7.0 readme + compatibility narrative update (Modern admin \/ iframe guidance, Plugin Check pointer, Stable tag housekeeping). Bump version so WordPress.org tag matches readme \u201cStable tag\u201d.<\/p>","1.2.0":"<p>WordPress 7.0 tested; readme update highlighting Abilities API and Real-Time Collaboration. Recommended for all sites on current WordPress.<\/p>","1.1.1":"<p>Readme update: live preview link on WordPress.org. No code changes required.<\/p>","1.1.0":"<p>Maintenance release.<\/p>","1.0.0":"<p>Initial release of AdFusion.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3495675,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3495675,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3495710,"resolution":"1544x500","location":"assets","locale":"","width":1688,"height":616},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3495710,"resolution":"772x250","location":"assets","locale":"","width":725,"height":250}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3539953,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"landingPage\":\"\\\/\",\"preferredVersions\":{\"php\":\"8.2\",\"wp\":\"latest\"},\"features\":{\"networking\":true},\"steps\":[{\"step\":\"login\",\"username\":\"admin\",\"password\":\"password\"},{\"step\":\"installPlugin\",\"options\":{\"activate\":true},\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"adfusion-ad-manager-and-monetization\"}},{\"step\":\"runPHP\",\"code\":\"<?php\\nrequire_once '\\\/wordpress\\\/wp-load.php';\\n\\n\\\/**\\n * Ensure an ad group term exists; return term ID.\\n *\\n * @param string $name Term name.\\n * @param string $slug Term slug.\\n * @return int\\n *\\\/\\nfunction adf_demo_term_id( $name, $slug ) {\\n\\t$term = wp_insert_term( $name, 'adfusion_group', array( 'slug' => $slug ) );\\n\\tif ( is_wp_error( $term ) ) {\\n\\t\\t$t = get_term_by( 'slug', $slug, 'adfusion_group' );\\n\\t\\treturn $t ? (int) $t->term_id : 0;\\n\\t}\\n\\treturn (int) $term['term_id'];\\n}\\n\\n\\\/**\\n * Create a text ad and assign groups.\\n *\\n * @param string   $title    Ad title.\\n * @param string   $slug     Post slug.\\n * @param int[]    $term_ids Term IDs.\\n * @param string   $code     Text body.\\n * @param int      $weight   Weight.\\n * @return int Post ID or 0.\\n *\\\/\\nfunction adf_demo_text_ad( $title, $slug, $term_ids, $code, $weight = 10 ) {\\n\\t$id = wp_insert_post(\\n\\t\\tarray(\\n\\t\\t\\t'post_title'  => $title,\\n\\t\\t\\t'post_name'   => $slug,\\n\\t\\t\\t'post_status' => 'publish',\\n\\t\\t\\t'post_type'   => 'adfusion_ad',\\n\\t\\t)\\n\\t);\\n\\tif ( ! $id || is_wp_error( $id ) ) {\\n\\t\\treturn 0;\\n\\t}\\n\\tif ( ! empty( $term_ids ) ) {\\n\\t\\twp_set_object_terms( $id, array_map( 'intval', $term_ids ), 'adfusion_group' );\\n\\t}\\n\\tupdate_post_meta( $id, '_adf_ad_type', 'text' );\\n\\tupdate_post_meta( $id, '_adf_ad_code', $code );\\n\\tupdate_post_meta( $id, '_adf_weight', (string) $weight );\\n\\tupdate_post_meta( $id, '_adf_destination_url', 'https:\\\/\\\/example.com' );\\n\\tupdate_post_meta( $id, '_adf_ad_url', 'https:\\\/\\\/example.com' );\\n\\treturn (int) $id;\\n}\\n\\n\\\/**\\n * Create an image ad and assign groups.\\n *\\n * @param string   $title     Ad title.\\n * @param string   $slug      Post slug.\\n * @param int[]    $term_ids  Term IDs.\\n * @param string   $image_url Image URL (HTTPS, WordPress.org CDN).\\n * @param int      $weight    Weight.\\n * @return int Post ID or 0.\\n *\\\/\\nfunction adf_demo_image_ad( $title, $slug, $term_ids, $image_url, $weight = 10 ) {\\n\\t$id = wp_insert_post(\\n\\t\\tarray(\\n\\t\\t\\t'post_title'  => $title,\\n\\t\\t\\t'post_name'   => $slug,\\n\\t\\t\\t'post_status' => 'publish',\\n\\t\\t\\t'post_type'   => 'adfusion_ad',\\n\\t\\t)\\n\\t);\\n\\tif ( ! $id || is_wp_error( $id ) ) {\\n\\t\\treturn 0;\\n\\t}\\n\\tif ( ! empty( $term_ids ) ) {\\n\\t\\twp_set_object_terms( $id, array_map( 'intval', $term_ids ), 'adfusion_group' );\\n\\t}\\n\\tupdate_post_meta( $id, '_adf_ad_type', 'image' );\\n\\tupdate_post_meta( $id, '_adf_ad_image', esc_url_raw( $image_url ) );\\n\\tupdate_post_meta( $id, '_adf_weight', (string) $weight );\\n\\tupdate_post_meta( $id, '_adf_destination_url', 'https:\\\/\\\/wordpress.org' );\\n\\tupdate_post_meta( $id, '_adf_ad_url', 'https:\\\/\\\/wordpress.org' );\\n\\treturn (int) $id;\\n}\\n\\n\\\/\\\/ Group slugs align with Settings UI labels and option keys (free + Premium).\\n$g_story_header  = adf_demo_term_id( 'Story header (above title)', 'story-header' );\\n$g_header_strip  = adf_demo_term_id( 'Header strip', 'header-strip' );\\n$g_after_content = adf_demo_term_id( 'After content', 'after-content' );\\n$g_leaderboard   = adf_demo_term_id( 'Leaderboard', 'leaderboard' );\\n$g_incontent_1   = adf_demo_term_id( 'In-content 1', 'incontent-1' );\\n$g_incontent_2   = adf_demo_term_id( 'In-content 2', 'incontent-2' );\\n$g_story_footer  = adf_demo_term_id( 'Story footer', 'story-footer' );\\n$g_sticky        = adf_demo_term_id( 'Sticky anchor', 'sticky-footer' );\\n$g_popup         = adf_demo_term_id( 'Popup', 'popup' );\\n\\n\\\/\\\/ Sample images: WordPress.org \\\/ theme directory assets (HTTPS, public CDN).\\n$img_story_header  = 'https:\\\/\\\/s.w.org\\\/style\\\/images\\\/welcome\\\/about-header-about.png';\\n$img_header_strip  = 'https:\\\/\\\/s.w.org\\\/style\\\/images\\\/wp-header-logo.png';\\n$img_after_content = 'https:\\\/\\\/s.w.org\\\/style\\\/images\\\/about\\\/WordPress-logotype-standard.png';\\n$img_leaderboard   = 'https:\\\/\\\/s.w.org\\\/images\\\/core\\\/5.8\\\/about-header-bg.jpg';\\n$img_incontent_1   = 'https:\\\/\\\/themes.svn.wordpress.org\\\/twentytwentyfour\\\/1.2\\\/screenshot.png';\\n$img_incontent_2   = 'https:\\\/\\\/themes.svn.wordpress.org\\\/twentytwentythree\\\/1.4\\\/screenshot.png';\\n$img_story_footer  = 'https:\\\/\\\/themes.svn.wordpress.org\\\/twentytwentytwo\\\/1.8\\\/screenshot.png';\\n$img_sticky        = 'https:\\\/\\\/themes.svn.wordpress.org\\\/twentytwentyone\\\/2.2\\\/screenshot.png';\\n$img_popup         = 'https:\\\/\\\/themes.svn.wordpress.org\\\/twentytwentyfive\\\/1.0\\\/screenshot.png';\\n\\n\\\/\\\/ Text + image per group (equal weight) so the rotator can pick either.\\n$w_text  = 10;\\n$w_image = 10;\\n\\n$first_id       = 0;\\n$first_image_id = 0;\\n\\n$ids = array();\\n\\n$ids[] = adf_demo_text_ad( 'Sample text \\u2014 Story header', 'sample-text-story-header', array( $g_story_header ), 'Story header (text) \\u2014 rotates with the image ad in this group.', $w_text );\\n$t     = adf_demo_image_ad( 'Sample image \\u2014 Story header', 'sample-img-story-header', array( $g_story_header ), $img_story_header, $w_image );\\n$ids[] = $t;\\nif ( $t > 0 && 0 === $first_image_id ) {\\n\\t$first_image_id = $t;\\n}\\n\\n$ids[] = adf_demo_text_ad( 'Sample text \\u2014 Header strip', 'sample-text-header-strip', array( $g_header_strip ), 'Header strip (text) \\u2014 Before content in core; rotates with image.', $w_text );\\n$ids[] = adf_demo_image_ad( 'Sample image \\u2014 Header strip', 'sample-img-header-strip', array( $g_header_strip ), $img_header_strip, $w_image );\\n\\n$ids[] = adf_demo_text_ad( 'Sample text \\u2014 After content', 'sample-text-after-content', array( $g_after_content ), 'After content (text) \\u2014 end of post body; rotates with image.', $w_text );\\n$ids[] = adf_demo_image_ad( 'Sample image \\u2014 After content', 'sample-img-after-content', array( $g_after_content ), $img_after_content, $w_image );\\n\\n$ids[] = adf_demo_text_ad( 'Sample text \\u2014 Leaderboard', 'sample-text-leaderboard', array( $g_leaderboard ), 'Leaderboard (text) \\u2014 rotates with image.', $w_text );\\n$ids[] = adf_demo_image_ad( 'Sample image \\u2014 Leaderboard', 'sample-img-leaderboard', array( $g_leaderboard ), $img_leaderboard, $w_image );\\n\\n$ids[] = adf_demo_text_ad( 'Sample text \\u2014 In-content 1', 'sample-text-incontent-1', array( $g_incontent_1 ), 'In-content 1 (text) \\u2014 rotates with image.', $w_text );\\n$ids[] = adf_demo_image_ad( 'Sample image \\u2014 In-content 1', 'sample-img-incontent-1', array( $g_incontent_1 ), $img_incontent_1, $w_image );\\n\\n$ids[] = adf_demo_text_ad( 'Sample text \\u2014 In-content 2', 'sample-text-incontent-2', array( $g_incontent_2 ), 'In-content 2 (text) \\u2014 rotates with image.', $w_text );\\n$ids[] = adf_demo_image_ad( 'Sample image \\u2014 In-content 2', 'sample-img-incontent-2', array( $g_incontent_2 ), $img_incontent_2, $w_image );\\n\\n$ids[] = adf_demo_text_ad( 'Sample text \\u2014 Story footer', 'sample-text-story-footer', array( $g_story_footer ), 'Story footer (text) \\u2014 rotates with image.', $w_text );\\n$ids[] = adf_demo_image_ad( 'Sample image \\u2014 Story footer', 'sample-img-story-footer', array( $g_story_footer ), $img_story_footer, $w_image );\\n\\n$ids[] = adf_demo_text_ad( 'Sample text \\u2014 Sticky anchor', 'sample-text-sticky', array( $g_sticky ), 'Sticky anchor (text) \\u2014 rotates with image.', $w_text );\\n$ids[] = adf_demo_image_ad( 'Sample image \\u2014 Sticky anchor', 'sample-img-sticky', array( $g_sticky ), $img_sticky, $w_image );\\n\\n$ids[] = adf_demo_text_ad( 'Sample text \\u2014 Popup', 'sample-text-popup', array( $g_popup ), 'Popup (text) \\u2014 rotates with image.', $w_text );\\n$ids[] = adf_demo_image_ad( 'Sample image \\u2014 Popup', 'sample-img-popup', array( $g_popup ), $img_popup, $w_image );\\n\\nforeach ( $ids as $aid ) {\\n\\tif ( $aid > 0 ) {\\n\\t\\t$first_id = $aid;\\n\\t\\tbreak;\\n\\t}\\n}\\n\\nif ( $first_image_id > 0 ) {\\n\\t$first_id = $first_image_id;\\n}\\n\\n\\\/\\\/ Free core: before \\\/ after post content (single posts).\\nupdate_option( 'adfusion_before_content_group', 'header-strip' );\\nupdate_option( 'adfusion_after_content_group', 'after-content' );\\n\\n\\\/\\\/ Premium placements (stored for when Premium is active; wp.org Playground ships core plugin only).\\nupdate_option( 'adfusion_premium_story_header_group', 'story-header' );\\nupdate_option( 'adfusion_premium_leaderboard_group', 'leaderboard' );\\nupdate_option( 'adfusion_premium_incontent_group', 'incontent-1' );\\nupdate_option( 'adfusion_premium_incontent_2_group', 'incontent-2' );\\nupdate_option( 'adfusion_premium_story_footer_group', 'story-footer' );\\nupdate_option( 'adfusion_premium_sticky_anchor_group', 'sticky-footer' );\\nupdate_option( 'adfusion_premium_popup_group', 'popup' );\\nupdate_option( 'adfusion_premium_incontent_paragraph', 3 );\\nupdate_option( 'adfusion_premium_incontent_2_paragraph', 8 );\\n\\n$paragraphs = array(\\n\\t'This sample post has multiple paragraphs so Premium in-content placements have anchors.',\\n\\t'Second paragraph \\u2014 keep reading for the demo story.',\\n\\t'Third paragraph \\u2014 In-content 1 targets after paragraph 3 by default.',\\n\\t'Fourth paragraph of placeholder text.',\\n\\t'Fifth paragraph.',\\n\\t'Sixth paragraph.',\\n\\t'Seventh paragraph.',\\n\\t'Eighth paragraph \\u2014 In-content 2 targets after paragraph 8 by default.',\\n\\t'Ninth paragraph.',\\n\\t'Tenth paragraph \\u2014 end of demo body.',\\n);\\n$post_body = '';\\nforeach ( $paragraphs as $p ) {\\n\\t$post_body .= '<p>' . esc_html( $p ) . '<\\\/p>';\\n}\\n\\n$post_id = wp_insert_post(\\n\\tarray(\\n\\t\\t'post_title'   => 'Sample post with placements',\\n\\t\\t'post_name'    => 'adfusion-demo-story',\\n\\t\\t'post_content' => $post_body,\\n\\t\\t'post_status'  => 'publish',\\n\\t\\t'post_type'    => 'post',\\n\\t)\\n);\\n\\n$story_url = ( $post_id && ! is_wp_error( $post_id ) ) ? get_permalink( $post_id ) : home_url( '\\\/' );\\n\\n$html  = '<h2>AdFusion Playground demo<\\\/h2>';\\n$html .= '<p>Each group has <strong>two ads<\\\/strong> (text + image, equal weight) so the rotator can show either. <strong>Before content<\\\/strong> uses the <em>Header strip<\\\/em> group. Open <a href=\\\"' . esc_url( $story_url ) . '\\\">the sample single post<\\\/a> for core before\\\/after injection.<\\\/p>';\\n$html .= '<p>Premium placements are saved in options; they render when <strong>AdFusion Premium<\\\/strong> is active.<\\\/p>';\\n$html .= '<h3>Story header (above title)<\\\/h3>';\\n$html .= '[adfusion group=\\\"story-header\\\"]';\\n$html .= '<h3>Header strip \\u2014 Before content (core)<\\\/h3>';\\n$html .= '[adfusion group=\\\"header-strip\\\"]';\\n$html .= '<h3>After content (core)<\\\/h3>';\\n$html .= '[adfusion group=\\\"after-content\\\"]';\\n$html .= '<h3>Leaderboard<\\\/h3>';\\n$html .= '[adfusion group=\\\"leaderboard\\\"]';\\n$html .= '<h3>In-content 1<\\\/h3>';\\n$html .= '[adfusion group=\\\"incontent-1\\\"]';\\n$html .= '<h3>In-content 2<\\\/h3>';\\n$html .= '[adfusion group=\\\"incontent-2\\\"]';\\n$html .= '<h3>Story footer<\\\/h3>';\\n$html .= '[adfusion group=\\\"story-footer\\\"]';\\n$html .= '<h3>Sticky anchor<\\\/h3>';\\n$html .= '[adfusion group=\\\"sticky-footer\\\"]';\\n$html .= '<h3>Popup<\\\/h3>';\\n$html .= '[adfusion group=\\\"popup\\\"]';\\nif ( $first_id > 0 ) {\\n\\t$html .= '<h3>Single ad by ID (sample image)<\\\/h3>';\\n\\t$html .= '[adfusion id=\\\"' . (int) $first_id . '\\\"]';\\n}\\n\\n$page_id = wp_insert_post(\\n\\tarray(\\n\\t\\t'post_title'   => 'AdFusion demo',\\n\\t\\t'post_name'    => 'adfusion-demo',\\n\\t\\t'post_content' => $html,\\n\\t\\t'post_status'  => 'publish',\\n\\t\\t'post_type'    => 'page',\\n\\t)\\n);\\n\\nif ( $page_id && ! is_wp_error( $page_id ) ) {\\n\\tupdate_option( 'show_on_front', 'page' );\\n\\tupdate_option( 'page_on_front', (int) $page_id );\\n}\\n\"}]}"}},"all_blocks":[],"tagged_versions":["1.0.0","1.1.0","1.1.1","1.2.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3495675,"resolution":"1","location":"assets","locale":"","width":1898,"height":2669},"screenshot-10.png":{"filename":"screenshot-10.png","revision":3495675,"resolution":"10","location":"assets","locale":"","width":1898,"height":1225},"screenshot-11.png":{"filename":"screenshot-11.png","revision":3495675,"resolution":"11","location":"assets","locale":"","width":1898,"height":1543},"screenshot-12.png":{"filename":"screenshot-12.png","revision":3495675,"resolution":"12","location":"assets","locale":"","width":1898,"height":1704},"screenshot-13.png":{"filename":"screenshot-13.png","revision":3495675,"resolution":"13","location":"assets","locale":"","width":1898,"height":986},"screenshot-14.png":{"filename":"screenshot-14.png","revision":3495675,"resolution":"14","location":"assets","locale":"","width":1898,"height":986},"screenshot-15.png":{"filename":"screenshot-15.png","revision":3495675,"resolution":"15","location":"assets","locale":"","width":1898,"height":986},"screenshot-16.png":{"filename":"screenshot-16.png","revision":3495692,"resolution":"16","location":"assets","locale":"","width":1898,"height":3273},"screenshot-17.png":{"filename":"screenshot-17.png","revision":3495692,"resolution":"17","location":"assets","locale":"","width":1898,"height":1546},"screenshot-18.png":{"filename":"screenshot-18.png","revision":3495692,"resolution":"18","location":"assets","locale":"","width":1898,"height":1518},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3495675,"resolution":"2","location":"assets","locale":"","width":1898,"height":1079},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3495675,"resolution":"3","location":"assets","locale":"","width":1898,"height":986},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3495675,"resolution":"4","location":"assets","locale":"","width":1898,"height":986},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3495675,"resolution":"5","location":"assets","locale":"","width":1898,"height":986},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3495675,"resolution":"6","location":"assets","locale":"","width":1898,"height":1070},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3495675,"resolution":"7","location":"assets","locale":"","width":1898,"height":986},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3495675,"resolution":"8","location":"assets","locale":"","width":1898,"height":2483},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3495675,"resolution":"9","location":"assets","locale":"","width":1898,"height":1049}},"screenshots":{"1":"AdFusion shows popup images, main leader banners (top of page), in-content ads, sticky bottom ads, after-content ads, before-content ads, story header ads, and much more (some of these are Premium-only options)","2":"Listing of ads","3":"Ad groups","4":"In the Premium version you can set max image dimensions","5":"Premium only: import and export your ads to a CSV file and sync ads between a primary site and other WordPress sites","6":"In the Premium version you can import ads from other plugins","7":"Premium version plugin settings","8":"The Premium version helps prevent ad blockers from blocking your ads and includes reports so you can see how you are doing","9":"Premium version settings","10":"Premium version tools","11":"Premium version general settings","12":"In the Premium version you can sell subscriptions to your site and allow your users to visit your site ad-free","13":"Listing of users who have subscribed to your site ad-free","14":"Premium version includes analytics and reports","15":"Premium version includes analytics and reports","16":"Premium version: editing or adding an ad","17":"Free version: editing or adding an ad","18":"On secondary WordPress sites you can connect them to your main site to serve ads from. Impressions and clicks are logged on the main site."}},"plugin_section":[],"plugin_tags":[246585,321,148,4084,377],"plugin_category":[35,43],"plugin_contributors":[251791],"plugin_business_model":[],"class_list":["post-292168","plugin","type-plugin","status-publish","hentry","plugin_tags-ad-tracking","plugin_tags-ads","plugin_tags-adsense","plugin_tags-banner-ads","plugin_tags-monetization","plugin_category-advertising","plugin_category-customization","plugin_contributors-brelandr","plugin_committers-brelandr"],"banners":{"banner":"https:\/\/ps.w.org\/adfusion-ad-manager-and-monetization\/assets\/banner-772x250.png?rev=3495710","banner_2x":"https:\/\/ps.w.org\/adfusion-ad-manager-and-monetization\/assets\/banner-1544x500.png?rev=3495710","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/adfusion-ad-manager-and-monetization\/assets\/icon-128x128.png?rev=3495675","icon_2x":"https:\/\/ps.w.org\/adfusion-ad-manager-and-monetization\/assets\/icon-256x256.png?rev=3495675","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/adfusion-ad-manager-and-monetization\/assets\/screenshot-1.png?rev=3495675","caption":"AdFusion shows popup images, main leader banners (top of page), in-content ads, sticky bottom ads, after-content ads, before-content ads, story header ads, and much more (some of these are Premium-only options)"},{"src":"https:\/\/ps.w.org\/adfusion-ad-manager-and-monetization\/assets\/screenshot-2.png?rev=3495675","caption":"Listing of ads"},{"src":"https:\/\/ps.w.org\/adfusion-ad-manager-and-monetization\/assets\/screenshot-3.png?rev=3495675","caption":"Ad groups"},{"src":"https:\/\/ps.w.org\/adfusion-ad-manager-and-monetization\/assets\/screenshot-4.png?rev=3495675","caption":"In the Premium version you can set max image dimensions"},{"src":"https:\/\/ps.w.org\/adfusion-ad-manager-and-monetization\/assets\/screenshot-5.png?rev=3495675","caption":"Premium only: import and export your ads to a CSV file and sync ads between a primary site and other WordPress sites"},{"src":"https:\/\/ps.w.org\/adfusion-ad-manager-and-monetization\/assets\/screenshot-6.png?rev=3495675","caption":"In the Premium version you can import ads from other plugins"},{"src":"https:\/\/ps.w.org\/adfusion-ad-manager-and-monetization\/assets\/screenshot-7.png?rev=3495675","caption":"Premium version plugin settings"},{"src":"https:\/\/ps.w.org\/adfusion-ad-manager-and-monetization\/assets\/screenshot-8.png?rev=3495675","caption":"The Premium version helps prevent ad blockers from blocking your ads and includes reports so you can see how you are doing"},{"src":"https:\/\/ps.w.org\/adfusion-ad-manager-and-monetization\/assets\/screenshot-9.png?rev=3495675","caption":"Premium version settings"},{"src":"https:\/\/ps.w.org\/adfusion-ad-manager-and-monetization\/assets\/screenshot-10.png?rev=3495675","caption":"Premium version tools"},{"src":"https:\/\/ps.w.org\/adfusion-ad-manager-and-monetization\/assets\/screenshot-11.png?rev=3495675","caption":"Premium version general settings"},{"src":"https:\/\/ps.w.org\/adfusion-ad-manager-and-monetization\/assets\/screenshot-12.png?rev=3495675","caption":"In the Premium version you can sell subscriptions to your site and allow your users to visit your site ad-free"},{"src":"https:\/\/ps.w.org\/adfusion-ad-manager-and-monetization\/assets\/screenshot-13.png?rev=3495675","caption":"Listing of users who have subscribed to your site ad-free"},{"src":"https:\/\/ps.w.org\/adfusion-ad-manager-and-monetization\/assets\/screenshot-14.png?rev=3495675","caption":"Premium version includes analytics and reports"},{"src":"https:\/\/ps.w.org\/adfusion-ad-manager-and-monetization\/assets\/screenshot-15.png?rev=3495675","caption":"Premium version includes analytics and reports"},{"src":"https:\/\/ps.w.org\/adfusion-ad-manager-and-monetization\/assets\/screenshot-16.png?rev=3495692","caption":"Premium version: editing or adding an ad"},{"src":"https:\/\/ps.w.org\/adfusion-ad-manager-and-monetization\/assets\/screenshot-17.png?rev=3495692","caption":"Free version: editing or adding an ad"},{"src":"https:\/\/ps.w.org\/adfusion-ad-manager-and-monetization\/assets\/screenshot-18.png?rev=3495692","caption":"On secondary WordPress sites you can connect them to your main site to serve ads from. Impressions and clicks are logged on the main site."}],"raw_content":"<!--section=description-->\n<p><strong>AdFusion<\/strong> is a free <strong>ad manager<\/strong> and <strong>monetization<\/strong> plugin for WordPress. Create <strong>banner ads<\/strong>, embed <strong>Google AdSense<\/strong> and custom HTML, organize <strong>ad tracking<\/strong> placements into groups with rotation, and publish everywhere with a simple shortcode or the REST API\u2014without bloating your theme.<\/p>\n\n<p>Whether you run display ads, sponsored units, or <strong>AdSense<\/strong> code, AdFusion gives you a dedicated workflow: custom post types for ads, taxonomy-style <strong>ad groups<\/strong>, optional scheduling, and a path to <strong>Premium<\/strong> extensions when you need advanced layouts, imports, and reporting.<\/p>\n\n<h4>Built for WordPress 7.0<\/h4>\n\n<p>AdFusion declares <strong>Tested up to: 7.0<\/strong> per WordPress 7.0 release guidance\u2014so the plugin listing stays aligned with Core and users avoid \u201coutdated tested\u201d notices when they upgrade WordPress.<\/p>\n\n<ul>\n<li><strong>Modern admin (default)<\/strong> \u2013 WordPress 7.0 uses <strong>Modern<\/strong> as the default admin theme. Every admin screen\u2014including those built with <code>@wordpress\/components<\/code>\u2014should be rechecked visually after upgrading; please report odd spacing or styling in AdFusion screens on the plugin support forums.<\/li>\n<li><strong>Block editor iframe<\/strong> \u2013 Work continues toward the editor always loading inside an iframe. If anything regresses inside the block editor (metabox areas, previews, integrations), note your theme and WP version\u2014see the <a href=\"https:\/\/make.wordpress.org\/core\/2026\/02\/24\/iframed-editor-changes-in-wordpress-7-0\/\">iframed editor changes in WordPress 7.0<\/a> Field Guide chapter.<\/li>\n<li><strong>PHP version<\/strong> \u2013 WordPress 7.0 <strong>drops PHP 7.2 and 7.3<\/strong>. This plugin declares <strong>Requires PHP: 7.4<\/strong> as the Core minimum supported line; hosts should aim for PHP <strong>8.3+<\/strong>, which Core recommends.<\/li>\n<li><strong>Abilities API<\/strong> \u2013 WordPress 7.0 extends the abilities ecosystem (including broader client hooks). AdFusion stays hook-driven so <strong>Premium<\/strong> and site-specific code can adapt without patching Core plugin files.<\/li>\n<li><strong>Real-Time Collaboration<\/strong> \u2013 When your team uses collaborative editing in WordPress 7.0, AdFusion\u2019s ad and group screens remain a stable place to manage <strong>monetization<\/strong> and <strong>ad tracking<\/strong> setup alongside your content workflow.<\/li>\n<\/ul>\n\n<p>Maintainers routinely validate against <a href=\"https:\/\/wordpress.org\/plugins\/plugin-check\/\">Plugin Check<\/a> and the <strong><a href=\"https:\/\/make.wordpress.org\/core\/2026\/05\/14\/wordpress-7-0-field-guide\/\">WordPress 7.0 Field Guide<\/a><\/strong> so release notes align with upstream expectations\u2014you can run Plugin Check locally as well before upgrading production sites.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li><strong>Custom Post Type<\/strong> \u2013 Manage ads as a dedicated content type with full WordPress integration<\/li>\n<li><strong>Ad Groups<\/strong> \u2013 Organize ads into hierarchical groups (e.g., sidebar, header, footer) for easy rotation<\/li>\n<li><strong>Multiple Ad Types<\/strong> \u2013 Image ads (featured image), Custom Code \/ HTML \/ <strong>AdSense<\/strong>, and plain text<\/li>\n<li><strong>Scheduling<\/strong> \u2013 Optional start and end dates for time-limited campaigns<\/li>\n<li><strong>Shortcode<\/strong> \u2013 Display ads by ID or group: <code>[adfusion id=\"123\"]<\/code> or <code>[adfusion group=\"sidebar-ads\"]<\/code><\/li>\n<li><strong>REST API<\/strong> \u2013 Ads and groups exposed for integrations (e.g., mobile apps, headless)<\/li>\n<li><strong>Extensible<\/strong> \u2013 Hooks and filters for <strong>Premium<\/strong> extensions (imports, advanced placements, analytics)<\/li>\n<\/ul>\n\n<h4>Shortcode Usage<\/h4>\n\n<p>Display a specific ad by ID:\n    [adfusion id=\"123\"]<\/p>\n\n<p>Display a random ad from a group (rotates on each page load):\n    [adfusion group=\"sidebar-ads\"]<\/p>\n\n<h4>Ad Types<\/h4>\n\n<ul>\n<li><strong>Image Ad<\/strong> \u2013 Uses the post's featured image. Set a destination URL for click-through.<\/li>\n<li><strong>Custom Code \/ HTML \/ AdSense<\/strong> \u2013 Paste third-party ad code (e.g., Google <strong>AdSense<\/strong>) for direct embedding.<\/li>\n<li><strong>Plain Text<\/strong> \u2013 Simple text ads with optional link.<\/li>\n<\/ul>\n\n<h3>Try It Live - Preview This Plugin Instantly<\/h3>\n\n<p>Experience AdFusion without installation! Click the link below to open WordPress Playground with the plugin pre-installed and configured with sample data.<\/p>\n\n<p><a href=\"https:\/\/wordpress.org\/plugins\/adfusion-ad-manager-and-monetization\/?preview=1\">Preview on WordPress Playground<\/a><\/p>\n\n<h3>External Services<\/h3>\n\n<h4>Google AdSense<\/h4>\n\n<p>When AdSense fallback or Google Ads is enabled in Settings, the plugin loads the Google AdSense script from <code>https:\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js<\/code>. Your publisher ID (from the plugin settings) is passed as the <code>client<\/code> query parameter. No data is sent to AdFusion servers; the script communicates directly with Google's ad servers when ads are displayed.<\/p>\n\n<ul>\n<li><a href=\"https:\/\/www.google.com\/adsense\/new\/localized-terms\">Google AdSense Terms of Service<\/a><\/li>\n<li><a href=\"https:\/\/policies.google.com\/privacy\">Google Privacy Policy<\/a><\/li>\n<\/ul>\n\n<h4>Mobile apps and WebView (owned apps)<\/h4>\n\n<p>If you <strong>own a native Android or iOS app<\/strong> that loads your WordPress site in a <strong>WebView<\/strong> (or similar in-app browser) and you monetize with <strong>Google AdSense<\/strong> or <strong>Google Ad Manager<\/strong> display ads in that frame, Google requires the <strong>WebView API for Ads<\/strong> in the <strong>app<\/strong> (Google Mobile Ads SDK), not in this plugin. The plugin outputs standard web ad tags; your mobile developers must register each <code>WebView<\/code> with the SDK so app signals reach those tags.<\/p>\n\n<ul>\n<li>Android: https:\/\/developers.google.com\/ad-manager\/mobile-ads-sdk\/android\/webview\/api-for-ads<\/li>\n<li>iOS: https:\/\/developers.google.com\/ad-manager\/mobile-ads-sdk\/ios\/webview\/api-for-ads<\/li>\n<li>In-app browser traffic and reporting: https:\/\/support.google.com\/admanager\/answer\/14137220<\/li>\n<li>Test page (load inside your app\u2019s WebView for QA): https:\/\/google.github.io\/webview-ads\/test#api-for-ads-tests<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to <code>\/wp-content\/plugins\/adfusion-ad-manager-and-monetization\/<\/code>, or install through WordPress plugins screen.<\/li>\n<li>Activate the plugin through the 'Plugins' screen in WordPress.<\/li>\n<li>Go to AdFusion in the admin menu to create ads and ad groups.<\/li>\n<li>Use the shortcode <code>[adfusion id=\"X\"]<\/code> or <code>[adfusion group=\"your-group-slug\"]<\/code> in posts, pages, or widgets.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20create%20an%20ad%20group%3F\"><h3>How do I create an ad group?<\/h3><\/dt>\n<dd><p>Go to AdFusion \u2192 Ads, then click \"Ad Groups\" in the submenu. Add new groups (e.g., \"sidebar-ads\", \"header-banner\") and assign ads to them when editing an ad.<\/p><\/dd>\n<dt id=\"can%20i%20use%20google%20adsense%3F\"><h3>Can I use Google AdSense?<\/h3><\/dt>\n<dd><p>Yes. Create an ad, select \"Custom Code \/ HTML \/ AdSense\" as the ad type, and paste your AdSense code in the Ad Code field. You need the <code>unfiltered_html<\/code> capability to save raw ad code.<\/p><\/dd>\n<dt id=\"do%20ads%20have%20their%20own%20urls%3F\"><h3>Do ads have their own URLs?<\/h3><\/dt>\n<dd><p>No. Ads are set to <code>public: false<\/code>, so they do not have individual frontend pages. They are only displayed via the shortcode.<\/p><\/dd>\n<dt id=\"does%20adfusion%20work%20on%20wordpress%207.0%3F\"><h3>Does AdFusion work on WordPress 7.0?<\/h3><\/dt>\n<dd><p>Yes. AdFusion declares <strong>Tested up to WordPress 7.0<\/strong>. Please test staging sites on WP 7.0 (Beta Tester releases or finals) alongside your theme and caching stack; upgrade WordPress and PHP per your host checklist.<\/p><\/dd>\n<dt id=\"how%20should%20i%20sanity-check%20compatibility%20like%20the%20plugin%20team%20recommends%3F\"><h3>How should I sanity-check compatibility like the Plugin Team recommends?<\/h3><\/dt>\n<dd><p>Install the <strong><a href=\"https:\/\/wordpress.org\/plugins\/plugin-check\/\">Plugin Check<\/a><\/strong> plugin from WordPress.org, select AdFusion from the checker UI, review the findings, then open support threads for anything reproducible\u2014we treat those reports seriously around major releases. For upstream context see the <strong><a href=\"https:\/\/make.wordpress.org\/core\/2026\/05\/14\/wordpress-7-0-field-guide\/\">WordPress 7.0 Field Guide<\/a><\/strong>.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.1<\/h4>\n\n<ul>\n<li><strong>WordPress 7.0 release alignment<\/strong> \u2013 Readme reinforces <strong>Tested up to: 7.0<\/strong>, Modern admin, iframed editor awareness, PHP 7.4 minimum vs PHP <strong>8.3+<\/strong> recommendation, Plugin Check encouragement, Field Guide citation, FAQ entries for testers.<\/li>\n<li>Releases <strong>Stable tag<\/strong> now matches a downloadable tag bundle on wordpress.org SVN (code + readme synced to trunk).<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li><strong>WordPress 7.0<\/strong> \u2013 Tested up to 7.0; readme adds <strong>Built for WordPress 7.0<\/strong> with <strong>Abilities API<\/strong> and <strong>Real-Time Collaboration<\/strong> context for modern admin and team workflows.<\/li>\n<li>Readme: SEO-focused refresh (title alignment, tags, short description, keyword-rich description).<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Readme: add WordPress Playground live preview section for the plugin directory.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Maintenance release.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Custom Post Type for ads<\/li>\n<li>Ad Groups taxonomy<\/li>\n<li>Image, Code, and Text ad types<\/li>\n<li>Start\/End date scheduling<\/li>\n<li>[adfusion] shortcode with id and group attributes<\/li>\n<li>REST API support for ads and groups<\/li>\n<\/ul>","raw_excerpt":"Ad manager, monetization &amp; AdSense tracking for WordPress. Banner ads, AdSense\/custom code, groups, rotation, shortcodes &amp; REST API\u2014Premium-ready.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/pl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/292168","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/pl.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/pl.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=292168"}],"author":[{"embeddable":true,"href":"https:\/\/pl.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/brelandr"}],"wp:attachment":[{"href":"https:\/\/pl.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=292168"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/pl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=292168"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/pl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=292168"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/pl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=292168"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/pl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=292168"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/pl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=292168"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}