{"id":313689,"date":"2026-06-13T06:25:21","date_gmt":"2026-06-13T06:25:21","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/adserver\/"},"modified":"2026-06-13T07:12:24","modified_gmt":"2026-06-13T07:12:24","slug":"iteearmah-ad-rotation-analytics","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/iteearmah-ad-rotation-analytics\/","author":23498264,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.0.0","stable_tag":"2.0.0","tested":"7.0","requires":"5.0","requires_php":"7.4","requires_plugins":null,"header_name":"Iteearmah Ad Rotation and Analytics","header_author":"Samuel Attoh Armah","header_description":"A specialized plugin to manage, rotate, track, and serve advertisements.","assets_banners_color":"103395","last_updated":"2026-06-13 07:12:24","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/iteearmah\/wp-adserver","header_author_uri":"https:\/\/github.com\/iteearmah","rating":0,"author_block_rating":0,"active_installs":0,"downloads":28,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.0.0":{"tag":"2.0.0","author":"iteearmah","date":"2026-06-13 07:12:24"}},"upgrade_notice":{"2.0.0":"<p>Compliance, security, and device detection improvements.<\/p>","1.9.2":"<p>Maintenance release: Added .gitattributes and bumped version.<\/p>","1.9.1":"<p>Maintenance release: Updated .distignore and bumped version.<\/p>","1.9.0":"<p>Security and maintenance release: Improved security with better nonce verification and input sanitization, and resolved coding standard violations. Recommended for all users.<\/p>","1.8.3":"<p>Security and performance hardening: improved SCF\/ACF compatibility and dashboard performance. Recommended for all users.<\/p>","1.7.2":"<p>Compliance fix: removed external Chart.js CDN dependency and included it locally.<\/p>","1.7.1":"<p>Plugin renamed to &quot;Iteearmah Ad Rotation and Analytics&quot;.<\/p>","1.7.0":"<p>Compliance fix: replaced hidden .gitkeep with index.php in languages directory.<\/p>","1.6.0":"<p>Final text domain fixes and version bump for WordPress.org submission.<\/p>","1.5.0":"<p>Fixes all WordPress.org automated plugin scan issues. Recommended for all users.<\/p>","1.4.0":"<p>Plugin renamed to &quot;Iteearmah Ad Rotation and Analytics&quot; for WordPress.org compliance. No functional changes.<\/p>","1.3.0":"<p>Security hardening release with input sanitization, output escaping, and WordPress best practices. Recommended for all users.<\/p>","1.2.0":"<p>Fixes ad serving reliability in AJAX contexts and improves cache invalidation. Recommended for all users.<\/p>","1.1.0":"<p>Major feature update with analytics, export\/import, and security improvements.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3570798,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3570798,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3570798,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3570798,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3570798,"resolution":"1","location":"assets","locale":"","width":2852,"height":1502},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3570798,"resolution":"2","location":"assets","locale":"","width":2826,"height":1508},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3570798,"resolution":"3","location":"assets","locale":"","width":2844,"height":1500},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3570798,"resolution":"4","location":"assets","locale":"","width":2834,"height":1502},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3570798,"resolution":"5","location":"assets","locale":"","width":2862,"height":1446}},"screenshots":{"1":"Ad management list view with status indicators and quick stats.","2":"Ad editor with scheduling, capping, geo-targeting, and device targeting options.","3":"Ad Zones management for organizing ads by placement.","4":"Analytics reporting dashboard with charts and CSV export.","5":"Dashboard widget showing quick ad performance stats."}},"plugin_section":[262246],"plugin_tags":[2730,2635,321,2596,2559],"plugin_category":[35],"plugin_contributors":[266916],"plugin_business_model":[],"class_list":["post-313689","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-ad-management","plugin_tags-ad-rotation","plugin_tags-ads","plugin_tags-adserver","plugin_tags-advertisement","plugin_category-advertising","plugin_contributors-iteearmah","plugin_committers-iteearmah"],"banners":{"banner":"https:\/\/ps.w.org\/iteearmah-ad-rotation-analytics\/assets\/banner-772x250.png?rev=3570798","banner_2x":"https:\/\/ps.w.org\/iteearmah-ad-rotation-analytics\/assets\/banner-1544x500.png?rev=3570798","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/iteearmah-ad-rotation-analytics\/assets\/icon-128x128.png?rev=3570798","icon_2x":"https:\/\/ps.w.org\/iteearmah-ad-rotation-analytics\/assets\/icon-256x256.png?rev=3570798","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/iteearmah-ad-rotation-analytics\/assets\/screenshot-1.png?rev=3570798","caption":"Ad management list view with status indicators and quick stats."},{"src":"https:\/\/ps.w.org\/iteearmah-ad-rotation-analytics\/assets\/screenshot-2.png?rev=3570798","caption":"Ad editor with scheduling, capping, geo-targeting, and device targeting options."},{"src":"https:\/\/ps.w.org\/iteearmah-ad-rotation-analytics\/assets\/screenshot-3.png?rev=3570798","caption":"Ad Zones management for organizing ads by placement."},{"src":"https:\/\/ps.w.org\/iteearmah-ad-rotation-analytics\/assets\/screenshot-4.png?rev=3570798","caption":"Analytics reporting dashboard with charts and CSV export."},{"src":"https:\/\/ps.w.org\/iteearmah-ad-rotation-analytics\/assets\/screenshot-5.png?rev=3570798","caption":"Dashboard widget showing quick ad performance stats."}],"raw_content":"<!--section=description-->\n<p>Iteearmah Ad Rotation and Analytics is a powerful and lightweight advertisement management system for WordPress. It allows you to create, manage, and track advertisements with ease.<\/p>\n\n<p><strong>Key Features:<\/strong><\/p>\n\n<ul>\n<li><strong>Custom Ad Management<\/strong> \u2014 Create ads as custom post types with full control.<\/li>\n<li><strong>Ad Rotation<\/strong> \u2014 Weighted rotation system to serve ads based on priority.<\/li>\n<li><strong>Impression &amp; Click Tracking<\/strong> \u2014 Detailed tracking with 7-day statistics and analytics dashboard.<\/li>\n<li><strong>Geo-Targeting<\/strong> \u2014 Include or exclude ads based on the visitor's country.<\/li>\n<li><strong>Device Targeting<\/strong> \u2014 Target ads by device type (Mobile, Tablet, Desktop).<\/li>\n<li><strong>Ad Zones<\/strong> \u2014 Group ads into zones for targeted placement.<\/li>\n<li><strong>Scheduling<\/strong> \u2014 Set start and end dates for your ad campaigns.<\/li>\n<li><strong>Capping<\/strong> \u2014 Set impression and click limits for each ad.<\/li>\n<li><strong>Duplicate Ads<\/strong> \u2014 Quickly clone existing advertisements with one click.<\/li>\n<li><strong>Ad Status Toggle<\/strong> \u2014 Easily enable or disable ads without deleting them.<\/li>\n<li><strong>Dashboard Widget<\/strong> \u2014 Quick overview of total impressions, clicks, and CTR.<\/li>\n<li><strong>Export\/Import<\/strong> \u2014 Backup or migrate your advertisements and settings via JSON.<\/li>\n<li><strong>User Access Control<\/strong> \u2014 Granular control over who can manage ads.<\/li>\n<li><strong>Analytics Reports<\/strong> \u2014 Professional reporting dashboard with charts and CSV export.<\/li>\n<li><strong>AJAX Serving<\/strong> \u2014 Non-blocking, asynchronous ad delivery via WordPress AJAX.<\/li>\n<li><strong>Shortcode Support<\/strong> \u2014 Place ads using shortcodes or script tags.<\/li>\n<\/ul>\n\n<p><strong>Dependencies:<\/strong><\/p>\n\n<p>This plugin requires the <a href=\"https:\/\/wordpress.org\/plugins\/secure-custom-fields\/\">Secure Custom Fields<\/a> (formerly ACF) plugin to be installed and active. An admin notice will be displayed if the dependency is missing.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>iteearmah-ad-rotation-analytics<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory.<\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress.<\/li>\n<li>Install and activate the <a href=\"https:\/\/wordpress.org\/plugins\/secure-custom-fields\/\">Secure Custom Fields<\/a> plugin.<\/li>\n<li>Go to <strong>Iteearmah Ad Rotation and Analytics<\/strong> in your admin menu to start creating ads.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20display%20an%20ad%3F\"><h3>How do I display an ad?<\/h3><\/dt>\n<dd><p>Use the shortcode <code>[itea_adserver zone=\"your-zone-slug\"]<\/code> in any post or page. To find the zone slug, go to <strong>Iteearmah Ad Rotation and Analytics &gt; Ad Zones<\/strong>.<\/p><\/dd>\n<dt id=\"how%20do%20i%20track%20statistics%3F\"><h3>How do I track statistics?<\/h3><\/dt>\n<dd><p>Statistics for each ad are displayed in the \"Ad Statistics\" meta box when editing an ad, as well as in the main Ads list view.<\/p><\/dd>\n<dt id=\"how%20do%20i%20use%20ad%20zones%3F\"><h3>How do I use Ad Zones?<\/h3><\/dt>\n<dd><ol>\n<li>Go to <strong>Iteearmah Ad Rotation and Analytics &gt; Ad Zones<\/strong> and create a new zone (e.g., \"Sidebar\").<\/li>\n<li>Note the <strong>Slug<\/strong> of the zone you created.<\/li>\n<li>Edit an advertisement and select the zone from the <strong>Ad Zones<\/strong> box on the right.<\/li>\n<li>Use the shortcode <code>[itea_adserver zone=\"sidebar\"]<\/code> (replace \"sidebar\" with your slug) to display ads from that zone.<\/li>\n<li>You can also use <code>&lt;div id=\"itea-ad-sidebar\"&gt;&lt;\/div&gt;&lt;script src=\"https:\/\/your-site.com\/?itea_ad_serve=1&amp;zone=sidebar&amp;uid=itea-ad-sidebar\" async&gt;&lt;\/script&gt;<\/code> for remote placement.<\/li>\n<\/ol><\/dd>\n<dt id=\"does%20this%20plugin%20require%20any%20external%20services%3F\"><h3>Does this plugin require any external services?<\/h3><\/dt>\n<dd><p>No. Geo-targeting relies on server-provided HTTP headers (e.g., <code>HTTP_X_COUNTRY_CODE<\/code>) typically set by your hosting provider or a CDN like Cloudflare. No external API calls are made.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20secure%20custom%20fields%20is%20not%20installed%3F\"><h3>What happens if Secure Custom Fields is not installed?<\/h3><\/dt>\n<dd><p>An admin notice will be displayed prompting you to install the required plugin. Core ad management features will not function without it.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Compliance: Updated plugin to adhere to WordPress.org detailed guidelines.<\/li>\n<li>Compatibility: Updated \"Tested up to\" metadata to WordPress 7.0.<\/li>\n<li>Security: Hardened admin notice visibility logic and refined ad export safety.<\/li>\n<li>Device Detection: Improved reliability by integrating wp_is_mobile() as a baseline.<\/li>\n<li>Maintenance: Bumped version to 2.0.0.<\/li>\n<\/ul>\n\n<h4>1.9.2<\/h4>\n\n<ul>\n<li>Maintenance: Created .gitattributes file for better archive management.<\/li>\n<li>Maintenance: Bumped version to 1.9.2.<\/li>\n<\/ul>\n\n<h4>1.9.1<\/h4>\n\n<ul>\n<li>Maintenance: Updated .distignore to include .idea directory.<\/li>\n<li>Maintenance: Bumped version to 1.9.1.<\/li>\n<\/ul>\n\n<h4>1.9.0<\/h4>\n\n<ul>\n<li>Security hardening: Improved nonce verification across several admin and tracking functions.<\/li>\n<li>Security hardening: Enhanced input sanitization for role capabilities and file uploads.<\/li>\n<li>Code Quality: Resolved multiple WordPress Coding Standards (WPCS) warnings and PHPCS violations.<\/li>\n<li>Code Quality: Improved SQL query safety by ensuring proper placement of PHPCS annotations for dynamic table names.<\/li>\n<li>Maintenance: Cleaned up project structure by removing unnecessary configuration files.<\/li>\n<\/ul>\n\n<h4>1.8.3<\/h4>\n\n<ul>\n<li>Added safety checks for get_field() and acf_add_local_field_group() to prevent crashes when Secure Custom Fields is not active.<\/li>\n<li>Refined cache clearing logic to target only the plugin's custom post type.<\/li>\n<li>Improved performance in the reporting dashboard by limiting ad filtering to the 100 most recent ads.<\/li>\n<li>Standardized asset versioning to use the plugin's version constant.<\/li>\n<li>Hardened dependency checks to support both 'Secure Custom Fields' and standard 'ACF' naming conventions.<\/li>\n<li>Updated bundled Chart.js to the latest stable version.<\/li>\n<li>Replaced direct script tags with WordPress enqueue APIs for reports and shortcode rendering.<\/li>\n<\/ul>\n\n<h4>1.7.2<\/h4>\n\n<ul>\n<li>Removed external dependency on Chart.js CDN.<\/li>\n<li>Included Chart.js locally in the plugin to comply with WordPress.org guidelines.<\/li>\n<\/ul>\n\n<h4>1.7.1<\/h4>\n\n<ul>\n<li>Renamed plugin to \"Iteearmah Ad Rotation and Analytics\" and updated slug to \"iteearmah-ad-rotation-analytics\".<\/li>\n<li>Updated text domain to \"iteearmah-ad-rotation-analytics\".<\/li>\n<\/ul>\n\n<h4>1.7.0<\/h4>\n\n<ul>\n<li>Removed hidden .gitkeep file from languages directory to comply with WordPress.org guidelines.<\/li>\n<li>Added index.php to languages directory to maintain the folder structure safely.<\/li>\n<\/ul>\n\n<h4>1.6.0<\/h4>\n\n<ul>\n<li>Finalized text domain migration to \"adserver\" across all files.<\/li>\n<li>Verified WordPress.org automated scan fixes and bumped version for clean submission.<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>Fixed automated plugin scan issues: added sanitize_callback to register_setting() calls.<\/li>\n<li>Updated \"Tested up to\" to WordPress 7.0.<\/li>\n<li>Changed Text Domain to \"adserver\" to match plugin slug.<\/li>\n<li>Created languages directory for Domain Path compliance.<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Renamed plugin display name from \"WP Iteearmah Ad Rotation and Analytics\" to \"Iteearmah Ad Rotation and Analytics\" for WordPress.org directory compliance.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Security audit: added input sanitization, output escaping, and URL validation across all files.<\/li>\n<li>Hardened click redirect with wp_http_validate_url() and wp_safe_redirect() fallback.<\/li>\n<li>Secured import functionality with uploaded file checks and post data sanitization.<\/li>\n<li>Replaced json_encode with wp_json_encode and date() with gmdate() for best practices.<\/li>\n<li>Added Text Domain and Domain Path headers for i18n compliance.<\/li>\n<li>Added proper cleanup of tracking table and transients on uninstall.<\/li>\n<li>Updated git configuration files (.gitignore, .gitattributes, .distignore, .editorconfig).<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Fixed ad serving reliability for non-public post types in AJAX contexts using direct database queries.<\/li>\n<li>Improved cache invalidation with versioned transients and hooks for all ad status changes.<\/li>\n<li>Enhanced administrator debug output with visitor context, filtering reasons, and ad status details.<\/li>\n<li>Standardized zone slug handling to lowercase across shortcodes and AJAX handlers.<\/li>\n<li>Added .gitattributes with export-ignore directives for clean distribution archives.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added professional analytics reporting dashboard with interactive charts.<\/li>\n<li>Added CSV export functionality for reporting data.<\/li>\n<li>Migrated tracking to a custom database table for high-traffic performance.<\/li>\n<li>Added duplicate ad, ad status toggle, and dashboard stats widget.<\/li>\n<li>Added nonce verification and capability checks for settings.<\/li>\n<li>Improved input sanitization and output escaping.<\/li>\n<li>Added translation wrappers for core strings.<\/li>\n<li>Refined admin notices and simplified the readme changelog.<\/li>\n<li>Updated Access Configuration with user selection and SCF dependency enforcement.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Modular architecture for better maintainability.<\/li>\n<li>Custom post type <code>itea_ad<\/code> for structured ad management.<\/li>\n<li>Weighted rotation system using <code>[itea_adserver]<\/code> shortcode.<\/li>\n<li>Advanced geo-targeting capabilities.<\/li>\n<li>Ad scheduling and performance capping (impressions\/clicks).<\/li>\n<li>Zone-based ad delivery.<\/li>\n<li>Detailed impression and click tracking with admin dashboard statistics.<\/li>\n<\/ul>","raw_excerpt":"Manage, rotate, track, and serve ads with geo-targeting, device targeting, zones, scheduling, and detailed analytics.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/313689","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=313689"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/iteearmah"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=313689"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=313689"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=313689"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=313689"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=313689"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=313689"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}