{"id":72913,"date":"2017-08-07T14:05:34","date_gmt":"2017-08-07T14:05:34","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/monetize-me\/"},"modified":"2026-08-05T15:43:00","modified_gmt":"2026-08-05T15:43:00","slug":"monetize-me","status":"publish","type":"plugin","link":"https:\/\/tt.wordpress.org\/plugins\/monetize-me\/","author":13546804,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"3.0.3","stable_tag":"3.0.3","tested":"7.0.2","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Monetize Me","header_author":"Micro Solutions BD","header_description":"Monetize Me plugin will help webmaster to manage monetize scripts and display using shortcodes and widgets.","assets_banners_color":"d6d6e6","last_updated":"2026-08-05 15:43:00","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/microsolutionsbd.com\/wp-plugin-monetize-me\/2026\/","header_author_uri":"https:\/\/microsolutionsbd.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":1918,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.0.6":{"tag":"0.0.6","author":"shahalom","date":"2017-08-07 14:07:02"},"0.0.7":{"tag":"0.0.7","author":"shahalom","date":"2017-08-07 18:47:16"},"0.0.8":{"tag":"0.0.8","author":"shahalom","date":"2017-08-10 15:28:20"},"0.0.9":{"tag":"0.0.9","author":"shahalom","date":"2017-10-26 21:29:07"},"1.0.0":{"tag":"1.0.0","author":"shahalom","date":"2019-12-03 10:57:29"},"1.0.1":{"tag":"1.0.1","author":"shahalom","date":"2019-12-03 12:32:48"},"2.0.0":{"tag":"2.0.0","author":"shahalom","date":"2026-04-26 19:12:16"},"2.0.2":{"tag":"2.0.2","author":"shahalom","date":"2026-04-27 18:18:10"},"2.0.3":{"tag":"2.0.3","author":"shahalom","date":"2026-05-25 18:56:32"},"2.0.5":{"tag":"2.0.5","author":"shahalom","date":"2026-06-21 19:41:53"},"2.0.6":{"tag":"2.0.6","author":"shahalom","date":"2026-07-15 20:46:07"},"3.0.0":{"tag":"3.0.0","author":"shahalom","date":"2026-08-04 19:20:16"},"3.0.1":{"tag":"3.0.1","author":"shahalom","date":"2026-08-04 19:32:47"},"3.0.2":{"tag":"3.0.2","author":"shahalom","date":"2026-08-04 20:09:48"},"3.0.3":{"tag":"3.0.3","author":"shahalom","date":"2026-08-05 15:43:00"}},"upgrade_notice":{"3.0.3":"<p>Fixes responsive Google AdSense units that could fail with an <code>availableWidth=0<\/code> error and keeps the Ads admin page compact by collapsing saved ad cards initially.<\/p>","3.0.0":"<p>This is a major modular rebuild. Back up the database before upgrading and review categories, sponsors, ads, and placement mappings after activation. On Multisite, settings are network-wide.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":0},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":1709609,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":1709609,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.jpg":{"filename":"banner-1544x500.jpg","revision":1709651,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.jpg":{"filename":"banner-772x250.jpg","revision":1709651,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"monetize-me\/ad":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"monetize-me\/ad","version":"3.0.3","title":"Advertisement","category":"widgets","icon":"megaphone","description":"Display one randomly selected Monetize Me advertisement filtered by category and sponsor.","keywords":["ads","monetize","sponsor","msbd"],"textdomain":"monetize-me","editorScript":"monetize-me-block-editor-script","editorStyle":"monetize-me-block-editor-style","attributes":{"adCategory":{"type":"string","default":""},"adSponsor":{"type":"string","default":""},"className":{"type":"string","default":""}},"supports":{"html":false,"customClassName":false}}},"tagged_versions":["0.0.6","0.0.7","0.0.8","0.0.9","1.0.0","1.0.1","2.0.0","2.0.2","2.0.3","2.0.5","2.0.6","3.0.0","3.0.1","3.0.2","3.0.3"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3635551,"resolution":"1","location":"assets","locale":"","width":1095,"height":877},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3635551,"resolution":"2","location":"assets","locale":"","width":1091,"height":703},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3635551,"resolution":"3","location":"assets","locale":"","width":1337,"height":839},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3635551,"resolution":"4","location":"assets","locale":"","width":1388,"height":558},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3635551,"resolution":"5","location":"assets","locale":"","width":859,"height":516}},"screenshots":{"1":"Settings: Create and list of ads categories","2":"Settings: Create and list of ads sponsors","3":"Settings: Creating ads with ads category, sponsor","4":"Widgets: Placing advertisment using widgets in sidebar or whereever.","5":"Code: footer hook added to theme to manage footer ads"}},"plugin_section":[],"plugin_tags":[321,4438,148,377,271763],"plugin_category":[35,43],"plugin_contributors":[89513,80320],"plugin_business_model":[],"class_list":["post-72913","plugin","type-plugin","status-publish","hentry","plugin_tags-ads","plugin_tags-ads-manager","plugin_tags-adsense","plugin_tags-monetization","plugin_tags-msbd","plugin_category-advertising","plugin_category-customization","plugin_contributors-microsolutions","plugin_contributors-shahalom","plugin_committers-shahalom"],"banners":{"banner":"https:\/\/ps.w.org\/monetize-me\/assets\/banner-772x250.jpg?rev=1709651","banner_2x":"https:\/\/ps.w.org\/monetize-me\/assets\/banner-1544x500.jpg?rev=1709651","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/monetize-me\/assets\/icon-128x128.png?rev=1709609","icon_2x":"https:\/\/ps.w.org\/monetize-me\/assets\/icon-256x256.png?rev=1709609","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/monetize-me\/assets\/screenshot-1.png?rev=3635551","caption":"Settings: Create and list of ads categories"},{"src":"https:\/\/ps.w.org\/monetize-me\/assets\/screenshot-2.png?rev=3635551","caption":"Settings: Create and list of ads sponsors"},{"src":"https:\/\/ps.w.org\/monetize-me\/assets\/screenshot-3.png?rev=3635551","caption":"Settings: Creating ads with ads category, sponsor"},{"src":"https:\/\/ps.w.org\/monetize-me\/assets\/screenshot-4.png?rev=3635551","caption":"Widgets: Placing advertisment using widgets in sidebar or whereever."},{"src":"https:\/\/ps.w.org\/monetize-me\/assets\/screenshot-5.png?rev=3635551","caption":"Code: footer hook added to theme to manage footer ads"}],"raw_content":"<!--section=description-->\n<p>Monetize Me is a modular, option-based advertising manager for Google AdSense and other trusted third-party monetization code. It does not register a custom post type or taxonomy.<\/p>\n\n<p>The plugin provides four top-level settings tabs:<\/p>\n\n<ul>\n<li>Ads<\/li>\n<li>Ad Categories<\/li>\n<li>Sponsors<\/li>\n<li>Placements<\/li>\n<\/ul>\n\n<p>A new installation includes these starter categories:<\/p>\n\n<ul>\n<li>Header Ads (<code>header-ads<\/code>)<\/li>\n<li>Footer Ads (<code>footer-ads<\/code>)<\/li>\n<li>In-article Ads (<code>in-article-ads<\/code>)<\/li>\n<li>Sidebar Ads (<code>sidebar-ads<\/code>)<\/li>\n<\/ul>\n\n<p>It also includes the starter sponsor General (<code>general<\/code>). The records are editable and removable.<\/p>\n\n<p>Main features:<\/p>\n\n<ul>\n<li>Manage ad categories and sponsors independently.<\/li>\n<li>Save trusted Google AdSense, script, iframe, HTML, or other monetization code.<\/li>\n<li>Assign one category and one sponsor to each ad.<\/li>\n<li>Enable or disable individual ads.<\/li>\n<li>Keep saved ad cards collapsed initially and expand or collapse them from their headers for easier management of large ad libraries.<\/li>\n<li>Randomly select one enabled ad when several ads match the requested filters.<\/li>\n<li>Render ads through the <code>[mmps]<\/code> shortcode.<\/li>\n<li>Render ads through the dynamic Advertisement Gutenberg block.<\/li>\n<li>Map categories and sponsors to supported theme action hooks.<\/li>\n<li>Insert ads between archive items using random intervals or exact positions.<\/li>\n<li>Insert ads before content, after content, and between paragraphs.<\/li>\n<li>Select which public post types receive automatic Post Content Ads.<\/li>\n<li>Optionally enqueue the bundled frontend stylesheet.<\/li>\n<li>Extend selection, placement, and rendering with public functions, actions, and filters.<\/li>\n<\/ul>\n\n<p>Automatic archive and Post Content Ads are disabled initially. Enable them from <strong>Monetize Me &gt; Placements<\/strong> after creating an enabled ad that matches the selected category and sponsor.<\/p>\n\n<p>On a single-site installation, settings are stored in one regular option and managed from the top-level <strong>Monetize Me<\/strong> admin menu.<\/p>\n\n<p>On WordPress Multisite, the plugin is network-managed. Settings are available only from the top-level <strong>Monetize Me<\/strong> page in Network Admin, and one network option controls all sites.<\/p>\n\n<h3>Shortcode<\/h3>\n\n<p>Basic random enabled ad:<\/p>\n\n<pre><code>[mmps]\n<\/code><\/pre>\n\n<p>Filter by category slug:<\/p>\n\n<pre><code>[mmps adcategory=\"in-article-ads\"]\n<\/code><\/pre>\n\n<p>Filter by category and sponsor and add an outer CSS class:<\/p>\n\n<pre><code>[mmps adcategory=\"in-article-ads\" adsponsor=\"general\" classname=\"article-ad\"]\n<\/code><\/pre>\n\n<p>Attributes:<\/p>\n\n<ul>\n<li><code>adcategory<\/code> - Saved category ID, name, or slug.<\/li>\n<li><code>adsponsor<\/code> - Saved sponsor ID, name, or slug.<\/li>\n<li><code>classname<\/code> - Space-separated CSS classes added to the outer <code>.monetize-me<\/code> container.<\/li>\n<\/ul>\n\n<p>The shortcode always renders one randomly selected enabled ad from the matching records.<\/p>\n\n<h3>Gutenberg Block<\/h3>\n\n<p>Search the block inserter for <strong>Advertisement<\/strong>.<\/p>\n\n<p>Block controls:<\/p>\n\n<ul>\n<li>Ad Category<\/li>\n<li>Ad Sponsor<\/li>\n<li>Extra CSS Class<\/li>\n<\/ul>\n\n<p>The dynamic block always renders one randomly selected matching ad. It always uses the standard frontend wrapper. The editor displays a safe configuration preview and does not execute saved ad scripts or iframes.<\/p>\n\n<h3>Theme Developer Integration<\/h3>\n\n<p>Monetize Me registers callbacks on the following theme action hooks. Add the relevant <code>do_action()<\/code> call at the intended location in a theme or child theme, then map a category and sponsor to that hook from <strong>Monetize Me &gt; Placements<\/strong>. An optional space-separated CSS class string can be passed with each hook and is added to the outer <code>.monetize-me<\/code> container.<\/p>\n\n<p>After the site header:<\/p>\n\n<pre><code>&lt;?php do_action( 'monetize_me_after_header', 'site-header-ad' ); ?&gt;\n<\/code><\/pre>\n\n<p>Immediately before the site footer:<\/p>\n\n<pre><code>&lt;?php do_action( 'monetize_me_before_footer', 'site-footer-ad' ); ?&gt;\n<\/code><\/pre>\n\n<p>Before an archive loop starts:<\/p>\n\n<pre><code>&lt;?php do_action( 'monetize_me_before_archive_start', 'archive-start-ad' ); ?&gt;\n<\/code><\/pre>\n\n<p>After an archive loop ends:<\/p>\n\n<pre><code>&lt;?php do_action( 'monetize_me_after_archive_end', 'archive-end-ad' ); ?&gt;\n<\/code><\/pre>\n\n<p>After each archive item:<\/p>\n\n<pre><code>&lt;?php\nglobal $wp_query;\n\n$position = $wp_query-&gt;current_post + 1;\n\ndo_action(\n    'monetize_me_between_archive_item',\n    get_post(),\n    $position,\n    'archive-list-ad'\n);\n?&gt;\n\n$position must be a one-based archive item number. The optional third argument is a space-separated CSS class string. The between-item hook renders only when Archive Loop Ads are enabled and the current position matches the configured interval or exact-position rule.\n<\/code><\/pre>\n\n<p>Random interval example: a minimum of 3 and maximum of 4 displays the next ad after a randomly selected gap of three or four additional archive items.<\/p>\n\n<p>Exact-position example: <code>3,7,10<\/code> displays ads after archive items 3, 7, and 10.<\/p>\n\n<h3>Post Content Ads<\/h3>\n\n<p>Post Content Ads use the <code>the_content<\/code> filter only on selected singular public post types in the main query and main loop. Password-protected content, feeds, admin requests, and JSON requests are excluded.<\/p>\n\n<p>Available placements:<\/p>\n\n<ul>\n<li>Before content<\/li>\n<li>After content<\/li>\n<li>Between paragraphs<\/li>\n<\/ul>\n\n<p>The webmaster can select one or more public post types, including registered custom post types. The standard <code>post<\/code> type is selected by default.<\/p>\n\n<p>Inline random interval example: a minimum of 3 and maximum of 4 places each next ad after a randomly selected gap of three or four additional paragraphs.<\/p>\n\n<p>Inline exact-position example: <code>3,7,10<\/code> inserts ads after paragraphs 3, 7, and 10.<\/p>\n\n<h3>Frontend Markup and CSS<\/h3>\n\n<p>All shortcode, block, hook, archive, and Post Content Ad output uses this structure:<\/p>\n\n<pre><code>&lt;div class=\"monetize-me category-slug\"&gt;\n    &lt;div class=\"ad-wrapper\"&gt;\n        &lt;!-- selected ad code --&gt;\n    &lt;\/div&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n\n<p>The selected category slug is added to the outer container. Shortcode and block extra classes are also added to that outer container.<\/p>\n\n<p>The bundled <code>assets\/css\/frontend.css<\/code> file is enabled by default. It adds vertical spacing, gives the ad wrapper a measurable full width for responsive networks such as Google AdSense, and centers fixed-size ad content. Disable it from <strong>Monetize Me &gt; Placements &gt; Frontend Styles<\/strong> only when the active theme provides equivalent width and alignment rules.<\/p>\n\n<h3>Public Functions<\/h3>\n\n<p>Category APIs:<\/p>\n\n<ul>\n<li><code>monetize_me_get_categories()<\/code><\/li>\n<li><code>monetize_me_get_category( $identifier )<\/code><\/li>\n<li><code>monetize_me_get_category_options()<\/code><\/li>\n<\/ul>\n\n<p>Sponsor APIs:<\/p>\n\n<ul>\n<li><code>monetize_me_get_sponsors()<\/code><\/li>\n<li><code>monetize_me_get_sponsor( $identifier )<\/code><\/li>\n<li><code>monetize_me_get_sponsor_options()<\/code><\/li>\n<\/ul>\n\n<p>Ad selection and rendering APIs:<\/p>\n\n<ul>\n<li><code>monetize_me_get_ads( $enabled_only = false )<\/code><\/li>\n<li><code>monetize_me_get_ad( $ad_id )<\/code><\/li>\n<li><code>monetize_me_get_matching_ads( $category = '', $sponsor = '' )<\/code><\/li>\n<li><code>monetize_me_select_ad( $category = '', $sponsor = '', $context = array() )<\/code><\/li>\n<li><code>monetize_me_render_ad( $category = '', $sponsor = '', $classname = '', $context = array() )<\/code><\/li>\n<li><code>monetize_me_render_ad_record( $ad, $classname = '', $context = array() )<\/code><\/li>\n<\/ul>\n\n<p>Render one random matching ad from a theme template:<\/p>\n\n<pre><code>&lt;?php\n$ad_html = monetize_me_render_ad(\n    'in-article-ads',\n    'general',\n    'custom-theme-ad',\n    array(\n        'source' =&gt; 'theme_template',\n    )\n);\n\necho $ad_html; \/\/ Intentionally contains trusted ad-network script or iframe markup.\n?&gt;\n<\/code><\/pre>\n\n<p>Placement and settings APIs:<\/p>\n\n<ul>\n<li><code>monetize_me_get_theme_placements()<\/code><\/li>\n<li><code>monetize_me_get_placement_settings()<\/code><\/li>\n<li><code>monetize_me_get_theme_hook_settings( $hook_name )<\/code><\/li>\n<li><code>monetize_me_get_archive_placement_settings()<\/code><\/li>\n<li><code>monetize_me_get_content_placement_settings()<\/code><\/li>\n<li><code>monetize_me_get_content_post_type_options()<\/code><\/li>\n<li><code>monetize_me_should_display_archive_ad( $position )<\/code><\/li>\n<li><code>monetize_me_get_placement_ad( $hook_name, $context = array(), $classname = '' )<\/code><\/li>\n<li><code>monetize_me_render_placement( $hook_name, $context = array(), $classname = '' )<\/code><\/li>\n<li><code>monetize_me_settings_page_url()<\/code><\/li>\n<\/ul>\n\n<p>Frontend stylesheet APIs:<\/p>\n\n<ul>\n<li><code>monetize_me_should_enqueue_frontend_css()<\/code><\/li>\n<li><code>monetize_me_enqueue_frontend_css()<\/code><\/li>\n<\/ul>\n\n<p>Important filters include:<\/p>\n\n<ul>\n<li><code>monetize_me_get_categories<\/code><\/li>\n<li><code>monetize_me_get_sponsors<\/code><\/li>\n<li><code>monetize_me_get_ads<\/code><\/li>\n<li><code>monetize_me_matching_ads<\/code><\/li>\n<li><code>monetize_me_selected_ad<\/code><\/li>\n<li><code>monetize_me_ad_code<\/code><\/li>\n<li><code>monetize_me_rendered_ad<\/code><\/li>\n<li><code>monetize_me_theme_placements<\/code><\/li>\n<li><code>monetize_me_placement_settings<\/code><\/li>\n<li><code>monetize_me_should_display_archive_ad<\/code><\/li>\n<li><code>monetize_me_content_post_type_options<\/code><\/li>\n<li><code>monetize_me_content_post_types<\/code><\/li>\n<li><code>monetize_me_should_enqueue_frontend_css<\/code><\/li>\n<\/ul>\n\n<h3>Raw Ad Code and Security<\/h3>\n\n<p>Ad network code commonly requires <code>&lt;script&gt;<\/code>, <code>&lt;iframe&gt;<\/code>, and provider-specific HTML. Monetize Me therefore stores and renders the submitted ad code without KSES filtering, HTML escaping, <code>wpautop()<\/code>, <code>nl2br()<\/code>, or automatic <code>&lt;br&gt;<\/code> insertion.<\/p>\n\n<p>Only users with the plugin management capability can access save handlers. Every settings form uses a dedicated WordPress nonce, and every write request verifies both the capability and nonce before updating data. On Multisite, management requires the network settings capability.<\/p>\n\n<p>Because saved code executes on the frontend, paste code only from a trusted provider or advertiser. A compromised administrator account can use any raw-code feature maliciously; protect administrator accounts with strong passwords and multi-factor authentication.<\/p>\n\n<!--section=installation-->\n<h4>Single-site WordPress<\/h4>\n\n<ol>\n<li>Upload the <code>monetize-me<\/code> directory to <code>\/wp-content\/plugins\/<\/code>, or install the ZIP from <strong>Plugins &gt; Add New &gt; Upload Plugin<\/strong>.<\/li>\n<li>Activate <strong>Monetize Me<\/strong> from the Plugins screen.<\/li>\n<li>Open the top-level <strong>Monetize Me<\/strong> menu.<\/li>\n<li>Review the starter categories and the General sponsor.<\/li>\n<li>Open <strong>Ads<\/strong>, create an ad, select its category and sponsor, paste trusted monetization code, enable the ad, and save. Saved ad cards load collapsed; click a card header whenever you need to edit its details.<\/li>\n<li>Use the shortcode or Gutenberg block, or configure theme and automatic placements from <strong>Placements<\/strong>.<\/li>\n<\/ol>\n\n<h4>WordPress Multisite<\/h4>\n\n<ol>\n<li>Install the plugin from <strong>Network Admin &gt; Plugins &gt; Add New<\/strong>, or upload the <code>monetize-me<\/code> directory to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Network activate <strong>Monetize Me<\/strong>.<\/li>\n<li>Open <strong>Network Admin &gt; Monetize Me<\/strong>.<\/li>\n<li>Create and manage the shared categories, sponsors, ads, and placements there.<\/li>\n<li>Individual sites do not receive a separate Monetize Me settings page.<\/li>\n<\/ol>\n\n<h4>First ad checklist<\/h4>\n\n<ol>\n<li>Confirm that the required category and sponsor exist.<\/li>\n<li>Create an ad and select both records.<\/li>\n<li>Paste code only from a trusted ad provider or advertiser.<\/li>\n<li>Enable the ad and save.<\/li>\n<li>Add <code>[mmps adcategory=\"category-slug\" adsponsor=\"sponsor-slug\"]<\/code> to content, insert the Advertisement block, or configure a placement.<\/li>\n<li>Clear page caches after changing ad code or placement settings.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"why%20are%20my%20saved%20ad%20fields%20hidden%20on%20the%20ads%20page%3F\"><h3>Why are my saved ad fields hidden on the Ads page?<\/h3><\/dt>\n<dd><p>Saved ad cards are collapsed initially to prevent a large ad library from making the settings page unnecessarily tall. Click the ad card header to expand or collapse its fields. Clicking <strong>Remove<\/strong> deletes the card without toggling it. A newly added ad opens automatically for editing.<\/p><\/dd>\n<dt id=\"why%20is%20no%20ad%20displayed%3F\"><h3>Why is no ad displayed?<\/h3><\/dt>\n<dd><p>Confirm that the ad is enabled and that its selected category and sponsor match the shortcode, block, hook, or automatic placement filters. Also clear page and CDN caches. For responsive Google AdSense units, keep the bundled frontend CSS enabled unless the theme gives <code>.monetize-me<\/code> and <code>.ad-wrapper<\/code> a non-zero measurable width. In browser developer tools, an AdSense error mentioning <code>availableWidth=0<\/code> indicates a container-width problem.<\/p><\/dd>\n<dt id=\"does%20monetize%20me%20add%20%60%3Cbr%3E%60%20tags%20to%20ad%20scripts%3F\"><h3>Does Monetize Me add `<br \/>` tags to ad scripts?<\/h3><\/dt>\n<dd><p>No. The plugin does not run saved ad code through <code>wpautop()<\/code>, <code>nl2br()<\/code>, KSES, or HTML escaping during frontend rendering.<\/p><\/dd>\n<dt id=\"why%20does%20the%20block%20editor%20not%20show%20the%20live%20advertisement%3F\"><h3>Why does the block editor not show the live advertisement?<\/h3><\/dt>\n<dd><p>The editor intentionally displays a safe configuration preview so third-party scripts and iframes do not execute inside the editor. The selected ad is rendered dynamically on the frontend.<\/p><\/dd>\n<dt id=\"can%20i%20disable%20the%20plugin%20css%3F\"><h3>Can I disable the plugin CSS?<\/h3><\/dt>\n<dd><p>Yes. Disable <strong>Load the Monetize Me frontend CSS file<\/strong> from <strong>Monetize Me &gt; Placements &gt; Frontend Styles<\/strong>.<\/p><\/dd>\n<dt id=\"where%20are%20settings%20stored%20on%20multisite%3F\"><h3>Where are settings stored on Multisite?<\/h3><\/dt>\n<dd><p>One network option stores all categories, sponsors, ads, and placements. Individual sites do not have separate settings pages.<\/p><\/dd>\n<dt id=\"are%20settings%20removed%20when%20the%20plugin%20is%20deactivated%20or%20deleted%3F\"><h3>Are settings removed when the plugin is deactivated or deleted?<\/h3><\/dt>\n<dd><p>No. Monetize Me preserves its settings option on both deactivation and uninstall so the existing categories, sponsors, ads, and placements are available if the plugin is installed or activated again.<\/p><\/dd>\n<dt id=\"can%20a%20theme%20add%20another%20placement%20hook%3F\"><h3>Can a theme add another placement hook?<\/h3><\/dt>\n<dd><p>Developers can filter <code>monetize_me_theme_placements<\/code> to register another action name, then call that action in the theme. The custom hook appears in the Placements mapping table.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>3.0.3<\/h4>\n\n<ul>\n<li>Collapsed saved ad cards initially on the Ads page to keep large ad libraries compact and easier to scan.<\/li>\n<li>Added accessible header-based expand\/collapse controls, an animated state indicator, and independent Remove behavior.<\/li>\n<li>Opened newly added ad cards automatically so their fields are immediately available for editing.<\/li>\n<li>Fixed responsive Google AdSense units failing to render when the flex-based wrapper collapsed the initially empty <code>adsbygoogle<\/code> element to zero width.<\/li>\n<li>Replaced the frontend flex wrapper with a full-width block layout that remains compatible with responsive AdSense and fixed-size third-party ads.<\/li>\n<li>Added explicit width, max-width, min-width, box-sizing, and responsive <code>.adsbygoogle<\/code> safeguards.<\/li>\n<li>Expanded frontend CSS and troubleshooting documentation for AdSense <code>availableWidth=0<\/code> errors.<\/li>\n<\/ul>\n\n<h4>3.0.0<\/h4>\n\n<ul>\n<li>Added optional CSS classes to theme action hooks and placement rendering APIs.<\/li>\n<li>Upgraded the plugin release version to 3.0.0.<\/li>\n<li>Resolved Plugin Check findings for direct nonce verification, one-time request unslashing, prefixed template variables, block API version 3, translator comments, and WordPress.org translation loading.<\/li>\n<li>Completed a repository-readiness review of capabilities, nonces, sanitization, escaping, asset loading, dynamic block registration, and uninstall behavior.<\/li>\n<li>Preserved all plugin settings during deactivation and uninstall for future reactivation or reinstallation.<\/li>\n<li>Preserved submitted monetization code without adding <code>&lt;br&gt;<\/code> tags or applying automatic paragraph formatting.<\/li>\n<li>Corrected unauthorized-request handling to return an HTTP 403 response.<\/li>\n<li>Improved block editor data loading with JSON-encoded inline script data.<\/li>\n<li>Made filtered custom theme placement hooks safe when no built-in default mapping exists.<\/li>\n<li>Added comprehensive installation, activation, shortcode, block, theme-hook, public API, raw-code, Multisite, and troubleshooting documentation.<\/li>\n<li>Added a GPLv2 license file.<\/li>\n<\/ul>\n\n<h4>2.0.2<\/h4>\n\n<ul>\n<li>NEW: Added Network Admin tool to copy all <code>ad<\/code> CPT posts from one site to one or more selected destination subsites.<\/li>\n<li>NEW: Ad copy operation skips destination posts when the same <code>ad<\/code> slug already exists.<\/li>\n<li>NEW: Copied Ad posts preserve content, excerpt, status, menu order, custom fields, and assigned Monetize Me taxonomy terms.<\/li>\n<li>NEW: Missing destination <code>adcategory<\/code> and <code>adsponsor<\/code> terms are created automatically while copying Ads.<\/li>\n<li>SECURITY: Restricted Ad copy workflow to Network Administrators using nonce verification and <code>manage_network_options<\/code> checks.<\/li>\n<\/ul>\n\n<h4>2.0.1<\/h4>\n\n<ul>\n<li>NEW: Network Admin settings page for Multisite environments.<\/li>\n<li>NEW: Copy taxonomy terms (<code>adcategory<\/code>, <code>adsponsor<\/code>) from a source site to selected subsites.<\/li>\n<li>NEW: Bulk subsite selection for term synchronization.<\/li>\n<li>IMPROVED: Duplicate detection using term slug (skip existing terms).<\/li>\n<li>IMPROVED: Operation summary showing copied, skipped, and failed counts.<\/li>\n<li>SECURITY: Restrict term synchronization tools to Network Admin only.<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Added a centralized Ad_Service class used by shortcode, widget, block, and renderer layers<\/li>\n<li>Added cache-aware ad queries with automatic cache purging on ad save, delete, and taxonomy changes<\/li>\n<li>Added public helper API functions: monetize_me_get_ad(), monetize_me_get_random_ads(), monetize_me_render_ad(), mm_get_ad(), mm_get_random_ad(), and mm_render_ad()<\/li>\n<li>Added internal filters and actions for query arguments and rendered output<\/li>\n<li>Preserved backward compatibility for existing shortcode, widget, block, and Renderer::render() usage<\/li>\n<\/ul>\n\n<h4>1.9.0<\/h4>\n\n<ul>\n<li>Major internal refactor for maintainability<\/li>\n<li>Added modern plugin bootstrap structure<\/li>\n<li>Removed runtime rewrite flushing<\/li>\n<li>Improved shortcode normalization and rendering<\/li>\n<li>Fixed widget slug handling bug<\/li>\n<li>Modernized block registration structure<\/li>\n<li>Added safer uninstall behavior<\/li>\n<li>Updated readme and repository packaging<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Revert back the ad sponsor taxonomy<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Recreated the plugin by removing legacy width and height taxonomies<\/li>\n<li>Added Ad Category taxonomy<\/li>\n<li>Added Gutenberg block support<\/li>\n<\/ul>","raw_excerpt":"Manage trusted ad code with categories, sponsors, Gutenberg blocks, shortcodes, theme hooks, and automatic content placements.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/tt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/72913","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/tt.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/tt.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=72913"}],"author":[{"embeddable":true,"href":"https:\/\/tt.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/shahalom"}],"wp:attachment":[{"href":"https:\/\/tt.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=72913"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/tt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=72913"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/tt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=72913"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/tt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=72913"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/tt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=72913"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/tt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=72913"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}