{"id":338475,"date":"2026-07-15T09:19:48","date_gmt":"2026-07-15T09:19:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/pubexa\/"},"modified":"2026-08-01T22:45:01","modified_gmt":"2026-08-01T22:45:01","slug":"pubexa","status":"publish","type":"plugin","link":"https:\/\/kn.wordpress.org\/plugins\/pubexa\/","author":17383302,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.6.5","stable_tag":"1.6.5","tested":"7.0.2","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"PubExa","header_author":"PubExa LLC","header_description":"Mobile-first contextual ad tabs on scroll, plus a separate desktop ad unit via the [pubexa_ad] shortcode, automatic insertion, or an Elementor widget. Page-level opt-outs via Elementor Page Settings when Elementor is active. Connects only to the PubExa Ad server.","assets_banners_color":"0a5942","last_updated":"2026-08-01 22:45:01","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/info.pubexa.com\/","header_author_uri":"https:\/\/pubexa.com\/","rating":0,"author_block_rating":0,"active_installs":10,"downloads":429,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.5.8":{"tag":"1.5.8","author":"progameinc","date":"2026-07-16 04:52:13"},"1.5.9":{"tag":"1.5.9","author":"progameinc","date":"2026-07-16 05:24:47"},"1.6.0":{"tag":"1.6.0","author":"progameinc","date":"2026-07-23 22:22:32"},"1.6.1":{"tag":"1.6.1","author":"progameinc","date":"2026-07-24 08:15:57"},"1.6.2":{"tag":"1.6.2","author":"progameinc","date":"2026-07-26 15:54:34"},"1.6.3":{"tag":"1.6.3","author":"progameinc","date":"2026-07-30 17:16:12"},"1.6.4":{"tag":"1.6.4","author":"progameinc","date":"2026-07-31 07:15:09"},"1.6.5":{"tag":"1.6.5","author":"progameinc","date":"2026-08-01 22:45:01"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-256x256.gif":{"filename":"icon-256x256.gif","revision":3608539,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3609717,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3609717,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.5.8","1.5.9","1.6.0","1.6.1","1.6.2","1.6.3","1.6.4","1.6.5"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3631359,"resolution":"1","location":"assets","locale":"","width":1177,"height":2060},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3631359,"resolution":"2","location":"assets","locale":"","width":1600,"height":1101},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3631359,"resolution":"3","location":"assets","locale":"","width":1594,"height":676},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3631359,"resolution":"4","location":"assets","locale":"","width":1600,"height":944},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3631359,"resolution":"5","location":"assets","locale":"","width":1600,"height":818},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3631359,"resolution":"6","location":"assets","locale":"","width":1600,"height":1412},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3631359,"resolution":"7","location":"assets","locale":"","width":1600,"height":1277},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3631359,"resolution":"8","location":"assets","locale":"","width":1600,"height":1526}},"screenshots":{"1":"The card row before the footer on a live article \u2014 your own promo cards and network ads sharing one clean strip.","2":"Local Ads: create text ads, image banners and promo cards, reorder them by dragging, and see impressions and clicks per ad.","3":"Ad source: use only your own ads, only network ads, both, demo ads for testing, or none at all.","4":"Mobile: how far the tab sits from the top, how much scrolling separates one ad from the next, opacity, and the pastel colours that cycle through your text ads.","5":"Nine animation styles for how the tab enters the screen.","6":"Desktop: place ads with a shortcode, insert them automatically before the content or after the second paragraph, or both.","7":"Analytics: impressions, clicks, CTR and dismisses for every one of your own ads, month by month.","8":"Transfer: export your settings and local ads to one file and import them on another site."}},"plugin_section":[],"plugin_tags":[2533,2725,321,4293,377],"plugin_category":[35],"plugin_contributors":[271619],"plugin_business_model":[],"class_list":["post-338475","plugin","type-plugin","status-publish","hentry","plugin_tags-ad-manager","plugin_tags-ad-network","plugin_tags-ads","plugin_tags-adsense-alternative","plugin_tags-monetization","plugin_category-advertising","plugin_contributors-progameinc","plugin_committers-progameinc"],"banners":{"banner":"https:\/\/ps.w.org\/pubexa\/assets\/banner-772x250.png?rev=3609717","banner_2x":"https:\/\/ps.w.org\/pubexa\/assets\/banner-1544x500.png?rev=3609717","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/pubexa\/assets\/icon-256x256.gif?rev=3608539","icon_2x":"https:\/\/ps.w.org\/pubexa\/assets\/icon-256x256.gif?rev=3608539","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/pubexa\/assets\/screenshot-1.png?rev=3631359","caption":"The card row before the footer on a live article \u2014 your own promo cards and network ads sharing one clean strip."},{"src":"https:\/\/ps.w.org\/pubexa\/assets\/screenshot-2.png?rev=3631359","caption":"Local Ads: create text ads, image banners and promo cards, reorder them by dragging, and see impressions and clicks per ad."},{"src":"https:\/\/ps.w.org\/pubexa\/assets\/screenshot-3.png?rev=3631359","caption":"Ad source: use only your own ads, only network ads, both, demo ads for testing, or none at all."},{"src":"https:\/\/ps.w.org\/pubexa\/assets\/screenshot-4.png?rev=3631359","caption":"Mobile: how far the tab sits from the top, how much scrolling separates one ad from the next, opacity, and the pastel colours that cycle through your text ads."},{"src":"https:\/\/ps.w.org\/pubexa\/assets\/screenshot-5.png?rev=3631359","caption":"Nine animation styles for how the tab enters the screen."},{"src":"https:\/\/ps.w.org\/pubexa\/assets\/screenshot-6.png?rev=3631359","caption":"Desktop: place ads with a shortcode, insert them automatically before the content or after the second paragraph, or both."},{"src":"https:\/\/ps.w.org\/pubexa\/assets\/screenshot-7.png?rev=3631359","caption":"Analytics: impressions, clicks, CTR and dismisses for every one of your own ads, month by month."},{"src":"https:\/\/ps.w.org\/pubexa\/assets\/screenshot-8.png?rev=3631359","caption":"Transfer: export your settings and local ads to one file and import them on another site."}],"raw_content":"<!--section=description-->\n<p><strong>PubExa is an ad manager and an ad network in one plugin.<\/strong> Build and place your own ads with no account at all \u2014 or connect to the PubExa network and get paid for the space you already have. Most WordPress ad plugins only manage code you bring yourself. PubExa can also be the one paying you, which makes it a genuine AdSense alternative rather than another way to insert someone else's tags.<\/p>\n\n<p><a href=\"https:\/\/info.pubexa.com\/\"><strong>Demo<\/strong><\/a> (open it on a phone to see the scroll-in ad tabs) \u00b7 <a href=\"https:\/\/pubexa.com\/plugin.html\">Plugin home<\/a> \u00b7 <a href=\"https:\/\/wordpress.org\/support\/plugin\/pubexa\/\">Support forum<\/a><\/p>\n\n<p>https:\/\/youtu.be\/5gO1Bc1Lmu8<\/p>\n\n<h4>See it working in about a minute<\/h4>\n\n<p>Activate the plugin, then open your own site on a phone. You will see the ad tabs sliding in as you scroll \u2014 three demo ads, running in Preview Mode, so you can judge the format, the animation and the colours before you create a single ad or open any account. Nothing is served to your readers until you say so.<\/p>\n\n<h4>Your own ads, no account required<\/h4>\n\n<p>Open <strong>Local Ads<\/strong> and create as many ads as you like:<\/p>\n\n<ul>\n<li><strong>Text ads<\/strong> \u2014 a headline (up to 30 characters), a description (up to 160 characters), and your link.<\/li>\n<li><strong>Image ads<\/strong> \u2014 a 320x100 banner, or 640x200 for a sharper result on modern phones.<\/li>\n<\/ul>\n\n<p>Drag ads up and down to change the order they appear in, set any of them active or paused, and preview each one before it goes live.<\/p>\n\n<p>These are your ads, so they can be anything you want promoted: your own best article, a product you sell, an affiliate offer including Amazon links, another site of yours, or a friend's site. An ad manager and a monetization tool in the same screen.<\/p>\n\n<h4>Choose what runs on your site<\/h4>\n\n<p>One setting decides where ads come from, and you can change it at any time:<\/p>\n\n<ul>\n<li><strong>Local only<\/strong> \u2014 nothing but the ads you created yourself.<\/li>\n<li><strong>Remote only<\/strong> \u2014 ads from the PubExa network, which you are paid for.<\/li>\n<li><strong>Hybrid<\/strong> \u2014 your own ads first, then the network fills whatever is left.<\/li>\n<li><strong>Preview Mode<\/strong> \u2014 demo ads, for testing the look without showing anything real.<\/li>\n<li><strong>Off<\/strong> \u2014 no mobile ads at all.<\/li>\n<\/ul>\n\n<p>You can also exclude ads entirely from the home page, from posts, from pages, from archives, or from any list of URLs \u2014 so nothing appears where you don't want it.<\/p>\n\n<h4>Mobile-first ad tabs<\/h4>\n\n<p>The signature format is a slim ad \"tab\" that slides in as the reader scrolls, shows a single clean ad, and can be dismissed with one tap. It never takes over the page and it never blocks what your reader is about to read.<\/p>\n\n<p>You control how it behaves:<\/p>\n\n<ul>\n<li>how far down the screen it sits<\/li>\n<li>how much space there is between one ad and the next<\/li>\n<li>the background colour of text ads<\/li>\n<li>the animation: none, slide down from the top, slide in from the left or the right, diagonally in from either top corner, or rising up from below on either side<\/li>\n<li>and, if you want a more aggressive setup, a second set of ads at the bottom of the screen as well<\/li>\n<\/ul>\n\n<h4>Desktop ads<\/h4>\n\n<p>On desktop, decide whether ads are inserted into your content automatically, placed by shortcode, or both.<\/p>\n\n<p>Automatic insertion can place ads before the content, after the second paragraph, and between the end of the content and the footer \u2014 any combination you like. A practical pattern for an established site: let automatic insertion handle your older posts, so you never have to reopen and redesign them, and use the shortcode on new pages where you want exact control.<\/p>\n\n<p>Wherever a desktop unit appears, you choose how many ads it shows \u2014 up to 12 \u2014 and they size themselves to the width of your content or your page.<\/p>\n\n<p>Desktop ads carry the same mixture as mobile: your own articles, your own products, affiliate offers, or network ads \u2014 and in Hybrid mode, your own ads with paid network ads filling the gaps between them.<\/p>\n\n<h4>Where ads can appear<\/h4>\n\n<ul>\n<li>Scroll-in ad tabs at the top of the screen, and optionally a second set at the bottom<\/li>\n<li>A desktop ad unit inside your content<\/li>\n<li>A leaderboard banner (970x90)<\/li>\n<li>A row of cards, or a column of cards, before the footer<\/li>\n<li>Anywhere you like, using a shortcode \u2014 including sidebars and widget areas<\/li>\n<li>Anywhere you like, using an Elementor widget<\/li>\n<\/ul>\n\n<h4>Shortcodes<\/h4>\n\n<p>Paste these anywhere, including sidebars, widgets and page builders:<\/p>\n\n<ul>\n<li><code>[pubexa_ad]<\/code> \u2014 a single ad unit<\/li>\n<li><code>[pubexa_row]<\/code> \u2014 a row of cards<\/li>\n<li><code>[pubexa_column]<\/code> \u2014 a column of cards<\/li>\n<li><code>[pubexa_leader]<\/code> \u2014 a leaderboard banner<\/li>\n<\/ul>\n\n<p>Each accepts options, so you can set the width, the card shadow and how many cards to show without writing any CSS.<\/p>\n\n<h4>Elementor<\/h4>\n\n<p>Three native Elementor widgets \u2014 Ad, Column and Leaderboard \u2014 drag straight onto the canvas. Card shadow and corner radius are controlled from Elementor's own Style tab, so ads match the rest of your design instead of fighting it.<\/p>\n\n<h4>See what your ads are doing<\/h4>\n\n<p>The <strong>Analytics<\/strong> screen reports impressions, clicks, CTR and dismisses for every one of your own ads, month by month. You can see which of your ads people actually respond to, and which one is quietly wasting the space.<\/p>\n\n<h4>Run more than one site?<\/h4>\n\n<p>The <strong>Transfer<\/strong> screen exports everything you configured on one site \u2014 settings and local ads together \u2014 to a single file. Import it on the next site and you are done. Nothing has to be set up twice.<\/p>\n\n<h4>Optional: earn with the PubExa network<\/h4>\n\n<p>When you are ready to monetize, create a free publisher account, add your Site ID under General, and set your ad source to Remote or Hybrid. Network ads use the placements you already set up \u2014 the tabs, the desktop unit, the leaderboard, the cards \u2014 matched to the topic of each page, and you earn a revenue share on every click.<\/p>\n\n<p>You stay in control of what runs on your site: block ads by keyword, by topic, or by whole verticals such as gambling, alcohol or politics, and they will never be served to your readers.<\/p>\n\n<h4>Privacy and consent<\/h4>\n\n<p>PubExa includes a built-in cookie mode, so you decide whether ads run before, after, or regardless of a visitor's consent, and you can point it at your own privacy policy. If you ever uninstall, the plugin can remove every trace of itself from your database.<\/p>\n\n<h4>Why the ad tab exists<\/h4>\n\n<p>Mobile is where most of your readers are, and mobile is where advertising works worst. A phone screen has almost no room to spare: a banner at the top gets scrolled past in half a second, a banner inside the text interrupts the reading, and anything larger covers what someone came to read. So publishers add more units, readers get more irritated, and the ads perform worse \u2014 which leads to still more units. That spiral is why so many mobile sites are unpleasant to use, and why so many readers install an ad blocker.<\/p>\n\n<p>The ad tab is a different answer to the same problem. It uses the space beside the content instead of the space inside it, appears only after the reader has already read something, moves in a way the eye notices, and disappears with one tap if it is unwanted. An ad that respects the reader gets looked at, and an ad that gets looked at is worth more to the advertiser and to you.<\/p>\n\n<p>That is the whole idea: better use of the little space a phone has, rather than more of it.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to the PubExa ad network, an external service operated by PubExa LLC, in order to request ads and record ad events. This connection is required for the plugin's core function of serving network advertising.<\/p>\n\n<p>What is sent, and when:<\/p>\n\n<ul>\n<li>When a page that contains a PubExa ad unit is viewed, the plugin sends an ad request to the PubExa ad server. The request includes: the page URL, page title, page language, the visible page headings (H1\u2013H6), an anonymous first-party visitor identifier (stored in the <code>pubexa_vid<\/code> cookie), your site host, and the visitor's IP address (used for fraud prevention and coarse country reporting).<\/li>\n<li>When an ad is shown, clicked, or dismissed, the plugin sends an event (impression, click, or dismiss) with the associated delivery identifier so the event can be recorded.<\/li>\n<li>If you choose \"Remove and delete data\" when deactivating, and optionally give a reason, the plugin sends a one-time anonymous feedback message to PubExa (<code>https:\/\/pubexa.com\/api\/plugin-feedback<\/code>). It includes only: the reason you typed, the plugin\/WordPress\/PHP versions, whether the site is multisite, and a random anonymous install identifier. No personal data, site URL, or account data is sent. This is optional telemetry and never blocks deactivation.<\/li>\n<\/ul>\n\n<p>The ad server endpoint is the URL you configure in the plugin settings (the PubExa ad server). Use of the PubExa service is governed by the PubExa Advertiser and Publisher Terms of Service and Privacy Policy:<\/p>\n\n<ul>\n<li>Publisher Terms of Service: https:\/\/info.pubexa.com\/publisher-terms-of-service\/<\/li>\n<li>Advertiser Terms of Service: https:\/\/info.pubexa.com\/advertiser-terms-of-service\/<\/li>\n<li>Privacy Policy: https:\/\/info.pubexa.com\/privacy-policy\/<\/li>\n<li>Cookie Notice: https:\/\/info.pubexa.com\/cookie-notice\/<\/li>\n<\/ul>\n\n<!--section=installation-->\n<h4>Getting started<\/h4>\n\n<ol>\n<li>In your WordPress dashboard go to <strong>Plugins \u2192 Add New<\/strong>, search for <strong>PubExa<\/strong>, and click Install, then Activate. (Or upload the plugin folder to <code>\/wp-content\/plugins\/<\/code> and activate it from the Plugins screen.)<\/li>\n<li>A <strong>PubExa<\/strong> menu appears in the dashboard sidebar.<\/li>\n<li>Open your own site on a phone. Ads are already running in Preview Mode, so you can see the format immediately \u2014 nothing real is shown to your readers yet.<\/li>\n<li>Go to <strong>PubExa \u2192 Local Ads<\/strong> and create your first ad.<\/li>\n<li>Go to <strong>PubExa \u2192 Mobile<\/strong> and set the ad source to <strong>Local only<\/strong> to start showing it.<\/li>\n<\/ol>\n\n<p>No account and no ad code are needed for any of that. If you later want to earn from the PubExa network, add your Site ID under <strong>General<\/strong> and change the ad source to <strong>Remote<\/strong> or <strong>Hybrid<\/strong>.<\/p>\n\n<h4>The eight screens<\/h4>\n\n<p>The PubExa menu has eight screens: General, Mobile, Local Ads, Desktop, Post row, Cards, Analytics and Transfer. Each is described below with every option and what changing it actually does.<\/p>\n\n<h4>General<\/h4>\n\n<p>Connection and consent.<\/p>\n\n<p><strong>Site ID<\/strong> \u2014 the identifier of your site in the PubExa network. Leave it empty and the plugin still works completely, using only the ads you create yourself. Fill it in and network ads become available, along with your earnings. You get it when you create a free publisher account.<\/p>\n\n<p><strong>Cookie mode<\/strong> \u2014 three choices:<\/p>\n\n<ul>\n<li><em>Off<\/em> \u2014 the plugin shows no consent notice of its own. Use this if you do not need one, or if you handle consent elsewhere.<\/li>\n<li><em>On<\/em> \u2014 PubExa shows its own small consent notice, and ads respect the visitor's answer.<\/li>\n<li><em>I have my own<\/em> \u2014 you already run a consent plugin; PubExa stays out of the way and follows it.<\/li>\n<\/ul>\n\n<p><strong>Notice text<\/strong> \u2014 the wording of that notice, if you use PubExa's own. The default reads \"This site uses cookies for advertising and measurement.\"<\/p>\n\n<p><strong>Privacy policy URL<\/strong> and <strong>Cookie notice URL<\/strong> \u2014 the two links shown in the notice. Point them at your own pages rather than the defaults.<\/p>\n\n<h4>Mobile<\/h4>\n\n<p>Everything about the scroll-in ad tabs.<\/p>\n\n<p><strong>Ad source<\/strong> \u2014 the single most important setting on this screen. It decides where mobile ads come from:<\/p>\n\n<ul>\n<li><em>Local only<\/em> \u2014 nothing but the ads you created in Local Ads.<\/li>\n<li><em>Remote only<\/em> \u2014 ads from the PubExa network. Requires a Site ID.<\/li>\n<li><em>Hybrid<\/em> \u2014 your own ads are shown first, and the network fills whatever is left over.<\/li>\n<li><em>Preview Mode<\/em> \u2014 demo ads, so you can test the animation and colours without showing anything real. This is the default on a fresh install.<\/li>\n<li><em>Off<\/em> \u2014 no mobile ads at all.<\/li>\n<\/ul>\n\n<p><strong>Hide on the home page<\/strong> \u2014 when enabled, mobile ads never appear on your front page, only on individual posts and pages.<\/p>\n\n<p><strong>Distance from the top<\/strong> \u2014 how far below the top of the screen the tab sits, in pixels. Raise it if your theme has a fixed header that the tab would otherwise sit underneath. Default 0.<\/p>\n\n<p><strong>Scroll gap<\/strong> \u2014 how far the reader must scroll between one ad and the next, in pixels. Accepts 100 to 2000; the default is 300. A larger number means fewer ads over the same article, and a gentler experience; a smaller number means more.<\/p>\n\n<p><strong>Tab height<\/strong> \u2014 the height of the tab as a percentage of the screen, from 6 to 25. The default is 15. This is the main lever on how prominent the format is.<\/p>\n\n<p><strong>Background opacity<\/strong> \u2014 how solid the tab is, from 20 to 100 percent. The default is 88, which leaves the page faintly visible behind it.<\/p>\n\n<p><strong>Animation<\/strong> \u2014 how the tab enters the screen: none, slide down from the top, slide in from the left, slide in from the right, diagonally from the top-left, diagonally from the top-right, or rising from below on the left or the right. Motion is what makes the format noticed, so this is worth trying more than one.<\/p>\n\n<p><strong>Tab pastel colours<\/strong> \u2014 five soft background colours that cycle through your text ads, one after another, so consecutive ads do not look identical.<\/p>\n\n<p><strong>Bottom ads<\/strong> \u2014 an optional second set of tabs at the bottom of the screen, with its own animation setting. This roughly doubles the number of ads a reader sees, so treat it as the aggressive option rather than the default.<\/p>\n\n<h4>Local Ads<\/h4>\n\n<p>Your own ads. No account required, and they work whether or not you ever join the network.<\/p>\n\n<p><strong>Text ad<\/strong> \u2014 a headline of up to 30 characters, a description of up to 160 characters, and the link the reader is sent to.<\/p>\n\n<p><strong>Image ad<\/strong> \u2014 a 320x100 banner. Upload 640x200 instead and it stays sharp on modern high-resolution phones.<\/p>\n\n<p><strong>Reordering<\/strong> \u2014 drag ads up and down to change the order they appear in.<\/p>\n\n<p><strong>Active \/ Paused<\/strong> \u2014 turn any ad off without deleting it.<\/p>\n\n<p><strong>Preview<\/strong> \u2014 see exactly how an ad will look before it goes live.<\/p>\n\n<p>There is no limit on what you advertise here: your own best article, a product you sell, an affiliate offer including Amazon links, another site of your own, or a friend's site.<\/p>\n\n<h4>Desktop<\/h4>\n\n<p>A single ad unit inside your content, on desktop screens only. This is separate from the Post row.<\/p>\n\n<p><strong>Placement<\/strong> \u2014 four choices:<\/p>\n\n<ul>\n<li><em>Off<\/em> \u2014 no desktop ads.<\/li>\n<li><em>Shortcode only<\/em> \u2014 desktop ads appear only where you place <code>[pubexa_ad]<\/code> yourself.<\/li>\n<li><em>Automatic insertion<\/em> \u2014 the plugin places them for you, at the positions you tick below.<\/li>\n<li><em>Shortcode and automatic insertion<\/em> \u2014 both are active.<\/li>\n<\/ul>\n\n<p><strong>Automatic positions<\/strong> \u2014 tick any combination of: before the content, after the second paragraph, and after the content. Each position has its own count, from 1 to 12, controlling how many ads appear there. Ads size themselves to the width of your content.<\/p>\n\n<p>A practical pattern for an established site: use automatic insertion so your older posts get ads without you reopening them, and use the shortcode on new pages where you want exact control.<\/p>\n\n<p><strong>Prefer shortcode<\/strong> \u2014 when a page already contains a shortcode, skip automatic insertion on that page, so the two never double up.<\/p>\n\n<p><strong>Skip the home page \/ posts \/ pages \/ archives<\/strong> \u2014 exclude whole page types from automatic insertion.<\/p>\n\n<p><strong>Excluded URLs<\/strong> \u2014 a list of specific addresses where desktop ads should never appear.<\/p>\n\n<h4>Post row<\/h4>\n\n<p>A row of cards before the footer \u2014 the \"you might also like\" strip familiar from large publisher sites.<\/p>\n\n<p><strong>Enable<\/strong> \u2014 turns the row on.<\/p>\n\n<p><strong>Placement<\/strong> \u2014 either <em>shortcode only<\/em>, so it appears where you place <code>[pubexa_row]<\/code>, or <em>automatically before the footer<\/em> on every post.<\/p>\n\n<p><strong>Number of cards<\/strong> \u2014 1 to 12. The default is 3. Cards reflow to fit, so a wide screen shows them side by side and a narrow one stacks them.<\/p>\n\n<p><strong>Row width<\/strong> \u2014 0 means the row fills whatever container it is in, which is usually what you want. Any value from 200 to 3000 caps it at that width in pixels instead.<\/p>\n\n<p><strong>Card shadow<\/strong> \u2014 none, soft, medium or strong, so the cards sit against your design the way you want.<\/p>\n\n<h4>Cards<\/h4>\n\n<p>Controls what fills those cards.<\/p>\n\n<p><strong>Mode<\/strong> \u2014 <em>internal<\/em> uses only your own promo cards, <em>external<\/em> uses only network ads, and <em>hybrid<\/em> mixes them: your own content first, network ads filling the rest. Hybrid is the default, and it is the reason the strip can promote your own articles and earn at the same time.<\/p>\n\n<p><strong>Hide on the home page<\/strong> \u2014 keep the card row off your front page.<\/p>\n\n<p><strong>Hidden URLs<\/strong> \u2014 specific addresses where the card row should never appear.<\/p>\n\n<h4>Analytics<\/h4>\n\n<p>Impressions, clicks, CTR and dismisses for each of your own ads, broken down by month. Dismisses are worth watching as closely as clicks: an ad that many readers actively close is costing you goodwill, whatever its click rate looks like.<\/p>\n\n<p>Network earnings are reported in your PubExa publisher account rather than here.<\/p>\n\n<h4>Transfer<\/h4>\n\n<p>Export everything you configured on one site \u2014 settings and local ads together \u2014 into a single file, then import it on another site. Useful if you run several sites and do not want to repeat the setup. Your Site ID is never included in the export, so each site keeps its own identity and its own earnings.<\/p>\n\n<h4>Shortcodes<\/h4>\n\n<p>Paste these anywhere, including sidebars, widget areas and page builders:<\/p>\n\n<ul>\n<li><code>[pubexa_ad]<\/code> \u2014 a single ad unit<\/li>\n<li><code>[pubexa_row]<\/code> \u2014 a row of cards<\/li>\n<li><code>[pubexa_column]<\/code> \u2014 a column of cards<\/li>\n<li><code>[pubexa_leader]<\/code> \u2014 a leaderboard banner (970x90)<\/li>\n<\/ul>\n\n<p>All of them accept options. For example <code>[pubexa_row count=\"4\" width=\"900\" shadow=\"soft\"]<\/code> shows four cards, capped at 900 pixels wide, with a soft shadow. Use <code>width=\"full\"<\/code> to fill the container.<\/p>\n\n<h4>Elementor<\/h4>\n\n<p>Three native widgets \u2014 Ad, Column and Leaderboard \u2014 appear in the Elementor panel and drag straight onto the canvas. In a page builder the container decides the width, so those widgets fill their container rather than following the site-wide row width. Card shadow and corner radius are set from Elementor's own Style tab.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20an%20account%3F\"><h3>Do I need an account?<\/h3><\/dt>\n<dd><p>To serve network ads you need a free PubExa publisher account and a Site ID. You can use Local ads and Preview mode without network serving, but a Site ID is required for network ads and earnings.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20slow%20down%20my%20pages%3F\"><h3>Does the plugin slow down my pages?<\/h3><\/dt>\n<dd><p>Ad requests run in the browser after the page is shown, so reading the page headings and requesting ads does not block page loading.<\/p><\/dd>\n<dt id=\"what%20data%20does%20the%20plugin%20send%20to%20the%20pubexa%20server%3F\"><h3>What data does the plugin send to the PubExa server?<\/h3><\/dt>\n<dd><p>See the \"External services\" section above for the full list. In short: page context (URL, title, language, headings), an anonymous visitor identifier, your site host, and the visitor IP for fraud prevention and country reporting.<\/p><\/dd>\n<dt id=\"where%20can%20i%20read%20the%20terms%20and%20privacy%20policy%3F\"><h3>Where can I read the terms and privacy policy?<\/h3><\/dt>\n<dd><p>Publisher Terms: https:\/\/info.pubexa.com\/publisher-terms-of-service\/ \u2014 Privacy Policy: https:\/\/info.pubexa.com\/privacy-policy\/<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.6.5<\/h4>\n\n<ul>\n<li>Listing only \u2014 nothing in the plugin changed, and there is nothing for you to do.<\/li>\n<li>The plugin now has a proper description of what it actually does, documentation of every screen and every setting, screenshots of the plugin in use, and a short video of the ad format running on a real site.<\/li>\n<\/ul>\n\n<h4>1.6.4<\/h4>\n\n<ul>\n<li>Listing only: the plugin's name in the WordPress.org directory now describes what it does, so people searching for an ad manager, an ad inserter or a way to monetize a site can actually find it. Nothing in the plugin changed \u2014 no settings, no behaviour, no action needed.<\/li>\n<\/ul>\n\n<h4>1.6.3<\/h4>\n\n<ul>\n<li>Housekeeping: removed an unused internal setting that was never read by anything. Desktop ads have always been switched on and off by the placement choice under Desktop ads \u2014 that has not changed and needs no action from you.<\/li>\n<li>Fixed a code comment that described the wrong setting as the desktop master switch.<\/li>\n<\/ul>\n\n<h4>1.6.2<\/h4>\n\n<ul>\n<li>New Transfer page. Export a site's PubExa settings and Local Ads to a single file, then import that file on another site to reproduce the same setup \u2014 useful if you run more than one site and don't want to configure each one from scratch.<\/li>\n<li>The export can carry the images of your image ads inside the file, so the new site does not depend on the old one. You can turn that off for a much smaller file.<\/li>\n<li>On import you choose whether to bring settings, local ads, or both, and whether the imported ads are added to the existing ones or replace them.<\/li>\n<li>Your Site ID is never exported, so each site keeps its own connection and its earnings always stay with the right site.<\/li>\n<li>Uninstall now also removes the newer settings that earlier versions left behind when \"delete all data\" was selected.<\/li>\n<\/ul>\n\n<h4>1.6.1<\/h4>\n\n<ul>\n<li>Fixed two output-escaping warnings raised by Plugin Check, in the copy buttons on the shortcode reference blocks.<\/li>\n<\/ul>\n\n<h4>1.6.0<\/h4>\n\n<ul>\n<li>The card row now fills the container it is placed in by default, instead of being capped at a fixed width. This makes it behave as expected inside page-builder sections, footers and sidebars.<\/li>\n<li>Every settings page that affects a placement now lists the shortcodes for it, with a copy button, and the General page lists them all in one place.<\/li>\n<li>The Elementor widgets now fill the container they are placed in. Their own size control still caps them when you want a fixed width.<\/li>\n<li>New card shadow. In Elementor the widgets gained a Style tab with a full box-shadow control and a corner-radius slider that apply to each individual card. Elsewhere, a Card shadow setting offers Soft, Medium and Strong, and the shortcodes accept a shadow attribute.<\/li>\n<li>New \"Row width\" setting: cap the row at a chosen pixel width, or leave it at 0 to fill the container.<\/li>\n<li>The [pubexa_row], [pubexa_ad] and [pubexa_column] shortcodes accept a width attribute, for example [pubexa_row width=\"900\"] or [pubexa_row width=\"full\"], which overrides the setting for that one placement.<\/li>\n<li>[pubexa_row] now also accepts a count attribute.<\/li>\n<\/ul>\n\n<h4>1.5.8<\/h4>\n\n<ul>\n<li>Plugin header: the Plugin URI now points to the plugin's own information page, and the Author URI to the author's site. The two are distinct.<\/li>\n<\/ul>\n\n<h4>1.5.6<\/h4>\n\n<ul>\n<li>Bulk-action queries now follow the wpdb::prepare() IN() pattern from the WordPress documentation: a generated list of %d placeholders, with all values bound as prepare() arguments.<\/li>\n<\/ul>\n\n<h4>1.5.4<\/h4>\n\n<ul>\n<li>All database identifiers are now bound with the %i placeholder, and IN() lists are bound with generated %d placeholders. No value is interpolated into a SQL string.<\/li>\n<li>The tracking rate limiter is now keyed on REMOTE_ADDR only, which the client cannot forge, and its transient is properly prefixed.<\/li>\n<li>Removed a dead server-side ad cache whose transient key included the page URL and visitor IP.<\/li>\n<\/ul>\n\n<h4>1.5.3<\/h4>\n\n<ul>\n<li>Unslashed and sanitized the REMOTE_ADDR fallback used for the tracking rate limiter.<\/li>\n<\/ul>\n\n<h4>1.5.2<\/h4>\n\n<ul>\n<li>Fixed: the deactivation feedback dialog did not open after the asset refactor in 1.5.1, because the dialog markup is printed after enqueued footer scripts run. All of its DOM wiring is now deferred until the document is ready.<\/li>\n<\/ul>\n\n<h4>1.5.1<\/h4>\n\n<ul>\n<li>All plugin CSS and JavaScript is now loaded through the WordPress enqueue system (wp_enqueue_script \/ wp_enqueue_style) from real asset files, instead of being printed inline. Settings, ad data and nonces are passed with wp_add_inline_script().<\/li>\n<li>Removed the third-party ip-api.com geolocation lookup. Country reporting for local-ad impressions now reads the site's own Cloudflare country header when available, so the plugin no longer contacts any external geolocation service.<\/li>\n<li>The deactivation feedback identifier is now a random per-install value stored in an option, rather than being derived from a WordPress authentication salt.<\/li>\n<li>The tracking rate limiter now derives its key from the server-resolved visitor IP instead of a value supplied in the request, so the limit cannot be bypassed.<\/li>\n<li>Escaped all translated strings at output.<\/li>\n<li>No changes to features or behavior.<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>First public release on the WordPress.org plugin directory.<\/li>\n<li>Hardened all custom-table database access for WordPress coding standards: every dynamic value is bound through $wpdb-&gt;prepare(), and internal-only table identifiers are documented as trusted.<\/li>\n<li>No changes to features or behavior \u2014 this release rolls up the 1.4.x series into a clean public baseline.<\/li>\n<\/ul>\n\n<h4>1.4.75<\/h4>\n\n<ul>\n<li>Within a card row, publisher and advertiser cards now alternate (publisher, advertiser, publisher, ...) like the mobile tabs, instead of all publisher cards followed by all advertiser cards.<\/li>\n<\/ul>\n\n<h4>1.4.74<\/h4>\n\n<ul>\n<li>Card ordering now follows priority: the publisher's own cards appear first, then advertiser cards, within the row's shape. (Previously hybrid mode shuffled them.)<\/li>\n<\/ul>\n\n<h4>1.4.73<\/h4>\n\n<ul>\n<li>Each card row now shows a single shape per set \u2014 all 16:9 or all 1:1 \u2014 chosen per page load and rotating between the two when both are available. This keeps every card in a row the same size, instead of mixing shapes. Combined with equal-height cards, rows now look consistent. (The mobile tab 160-character description limit is unchanged.)<\/li>\n<\/ul>\n\n<h4>1.4.72<\/h4>\n\n<ul>\n<li>Card captions are shown in full again (no two-line limit), so long product descriptions and prices are visible. To keep rows tidy, all cards in a row now stretch to the same height and the source line aligns to the bottom of each card.<\/li>\n<\/ul>\n\n<h4>1.4.71<\/h4>\n\n<ul>\n<li>Fixed: card captions were not limited to two lines, so an ad with a very long title\/description grew far taller than the others in the same row. An inline style was overriding the line-clamp CSS; removed it, so every card keeps a compact two-line title and two-line description.<\/li>\n<\/ul>\n\n<h4>1.4.70<\/h4>\n\n<ul>\n<li>The [pubexa_ad] shortcode and the Elementor \"PubExa Ad\" widget now take a card count: [pubexa_ad count=\"4\"] and a \"Number of ads\" field on the widget (1-12), matching the Post Column. They render a card row (same layout as the post row) instead of a single text\/image unit, so they show image cards.<\/li>\n<\/ul>\n\n<h4>1.4.69<\/h4>\n\n<ul>\n<li>Automatic desktop insertion now places a card row (the same layout as the post row) at each position instead of a single text\/image unit. Each position (before content, after paragraph 2, after content) has its own card-count field. Because it uses the card renderer, it shows image cards and no longer picks up mobile-tab text ads. The manual [pubexa_ad] shortcode and Elementor widget still render the single ad unit.<\/li>\n<\/ul>\n\n<h4>1.4.68<\/h4>\n\n<ul>\n<li>Improved automatic desktop insertion on page builders: instead of guessing a single content container (which made ads bunch up near the end on Elementor), it now anchors to the real content paragraphs across the whole page in order, skipping header\/nav\/footer\/sidebar. Before content, after the second paragraph, and after content now land in the right places even when paragraphs are spread across separate widgets.<\/li>\n<\/ul>\n\n<h4>1.4.67<\/h4>\n\n<ul>\n<li>Automatic desktop insertion now works on Elementor and other page builders. Because builders render outside WordPress's the_content filter, a client-side inserter was added: it finds the content area in the rendered page and places the desktop ad at the chosen positions (before content, after the second paragraph, after content). It stands down when a desktop ad is already present (classic the_content insertion, a manual shortcode, or the Elementor widget), so pages never get a duplicate.<\/li>\n<\/ul>\n\n<h4>1.4.66<\/h4>\n\n<ul>\n<li>Fixed: the single desktop ad ([pubexa_ad] shortcode \/ Elementor widget) showed only the caption text and dropped the image. It now renders the creative image at its natural aspect ratio (no cropping) above the title and description. Text-only creatives still render as before.<\/li>\n<\/ul>\n\n<h4>1.4.65<\/h4>\n\n<ul>\n<li>The single desktop ad ([pubexa_ad] shortcode \/ Elementor widget) now also shows on mobile and narrow screens. It was previously hidden below 1024px; that restriction has been removed so the unit renders at every width. (The 970x90 leaderboard remains desktop-only, since it does not fit narrow screens.)<\/li>\n<\/ul>\n\n<h4>1.4.64<\/h4>\n\n<ul>\n<li>Fixed: the desktop ad (manual [pubexa_ad] shortcode and the Elementor \"PubExa Ad\" widget) rendered nothing when placement was set to Automatic insertion. Any desktop ad placement now renders. Note: automatic in-content insertion works on classic\/Gutenberg content; on Elementor and other page builders, use the PubExa Ad widget or the [pubexa_ad] shortcode.<\/li>\n<\/ul>\n\n<h4>1.4.63<\/h4>\n\n<ul>\n<li>Fixed: desktop ads set to \"Automatic insertion\" rendered nothing. The auto-inserted desktop ad was being suppressed by the same rule meant to silence a manually placed shortcode. Automatically inserted ads now render, while a manually placed [pubexa_ad] stays inert in automatic mode as intended.<\/li>\n<\/ul>\n\n<h4>1.4.62<\/h4>\n\n<ul>\n<li>Desktop ads settings simplified: the separate Enable checkbox is gone. Placement is now a single choice \u2014 Off, Shortcode only, Automatic insertion, or Shortcode + Automatic insertion. New installs default to Automatic insertion, so once a Site ID is connected (with the ad source set to Remote or Hybrid) desktop ads start on their own and can be turned off in one click.<\/li>\n<\/ul>\n\n<h4>1.4.61<\/h4>\n\n<ul>\n<li>Content card row: when a format arrives as a single lone card, it now joins a mixed row instead of sitting alone on its own line. Formats with two or more cards still get their own grouped rows.<\/li>\n<\/ul>\n\n<h4>1.4.60<\/h4>\n\n<ul>\n<li>Content card row now groups cards by shape: 16:9 wide cards and 1:1 square cards are laid out in separate rows so each format keeps its true proportions, with wide cards placed first. Wide cards target ~2 per row and squares ~4 per row, and 5-per-row is avoided unless unavoidable. Rows are split evenly with no lonely leftover card (e.g. 4 wide + 7 square becomes 2+2 wide then 4+3 square).<\/li>\n<\/ul>\n\n<h4>1.4.59<\/h4>\n\n<ul>\n<li>Content card row now splits into equal rows whenever the card count allows it (10 -&gt; 5+5, 9 -&gt; 3+3+3, 12 -&gt; 4+4+4), falling back to a balanced split only for prime counts (11 -&gt; 4+4+3). Every row is justified to fill the full width at its own height, so two rows with the same number of cards are always the same width and a shorter row (like the 3 in 4+4+3) grows to fill the row instead of sitting narrow. A 1-2 card row is capped and centered rather than blown up.<\/li>\n<\/ul>\n\n<h4>1.4.58<\/h4>\n\n<ul>\n<li>Content card row now distributes cards into balanced rows instead of filling each row to the brim, so a set like 11 cards lays out 4+4+3 (no lonely leftover card). Every row shares one height, full rows fill edge to edge, and a shorter trailing row is centered. Mixed 16:9 and 1:1 cards are sized from their true dimensions with no cropping.<\/li>\n<\/ul>\n\n<h4>1.4.57<\/h4>\n\n<ul>\n<li>Content card row rebuilt with a justified layout that respects each card's real aspect ratio (16:9 wide and 1:1 square) with no cropping. Post column (sidebar\/Elementor) cards also honor their real aspect ratio.<\/li>\n<\/ul>\n\n<h4>1.4.51<\/h4>\n\n<ul>\n<li>Removed the optional \"Powered by PubExa.com\" attribution link from all front-end ad placements (mobile tabs and content cards), in line with WordPress.org plugin guidelines. Sponsored-label tagging on content rows is unchanged.<\/li>\n<\/ul>\n\n<h4>1.4.50<\/h4>\n\n<ul>\n<li>Code-quality and security hardening pass for the WordPress.org Plugin Directory: all admin output is now escaped on display, all request input is unslashed and sanitized, analytics queries use prepared statements, and internal helpers are uniquely prefixed. No features or behavior changed for publishers.<\/li>\n<\/ul>\n\n<h4>1.4.47<\/h4>\n\n<ul>\n<li>Page topic relevance: the plugin now reads the on-page headings (H1\u2013H6) from the live page and sends them with each ad request, so ads can be matched to what the page is actually about. This works on page-builder pages (e.g. Elementor) because the headings are read from the rendered page, not from stored content. Raw heading text only is sent; meaningless connecting words are ignored on the server side. To allow heading reading, the mobile scroll-tabs now request their ads in the browser (the same way the desktop unit already did); this does not slow page loading, as it happens after the page is shown. All tab behavior, animations, colors, opt-outs and tracking are unchanged.<\/li>\n<\/ul>\n\n<h4>1.4.46<\/h4>\n\n<ul>\n<li>Fixed help tooltips being clipped or hidden behind panels (e.g. next to Desktop placement and the color picker). The tooltip now floats above all page content so it's always fully visible.<\/li>\n<\/ul>\n\n<h4>1.4.45<\/h4>\n\n<ul>\n<li>Help tooltips refined: the \"?\" is now a subtle blue circle, moved out of the section heading to a tidier spot (top-right of the panel, or next to the relevant field) so it no longer crowds the title.<\/li>\n<\/ul>\n\n<h4>1.4.44<\/h4>\n\n<ul>\n<li>Help tooltips: the \"?\" is now blue (like a link), the popup is larger with bigger text and more spacing for easier reading, and a display glitch that showed the text in ALL CAPS is fixed \u2014 it now reads in normal sentence case.<\/li>\n<\/ul>\n\n<h4>1.4.43<\/h4>\n\n<ul>\n<li>Restyled the help tooltips for readability: the \"?\" mark is now a larger, lighter red so it's easy to spot, and the explanation pops on a clean white background with darker, clearer text.<\/li>\n<\/ul>\n\n<h4>1.4.42<\/h4>\n\n<ul>\n<li>Added small \"?\" help tooltips next to the few settings that need a quick explanation (Ad Source, scroll distance, top vs bottom tabs, desktop placement). Hover on desktop or tap on mobile; they explain the difference between the options in plain, short language. No settings or behavior changed.<\/li>\n<\/ul>\n\n<h4>1.4.41<\/h4>\n\n<ul>\n<li>Removed two internal debug\/diagnostic endpoints that were used during development. They were restricted to administrators, but are not needed in production and have been taken out.<\/li>\n<\/ul>\n\n<h4>1.4.40<\/h4>\n\n<ul>\n<li>Bottom mobile tabs now count views, clicks and dismissals like the top tabs. Previously clicks on a bottom tab sent the visitor to the advertiser but were never recorded. Each placement counts independently \u2014 an ad shown in both a top and a bottom tab counts as two views (two separate placements).<\/li>\n<li>Fixed the tab styling when the top animation is set to \"none\" but the bottom tabs are on: bottom tabs now use the correct text, close-button and label styling instead of appearing unstyled.<\/li>\n<li>Tabs are now a true fixed height of 100px (matching the 320x100 banner format) on every device, instead of a height that varied with screen size.<\/li>\n<li>Removed an embedded key from the deactivation-feedback request. A key shipped inside a plugin that runs on many sites cannot stay secret, so it was removed; the feedback note now sends only anonymous information.<\/li>\n<li>Minor cleanup: fixed a stray style rule and a harmless console error in the deactivation dialog.<\/li>\n<\/ul>\n\n<h4>1.4.38<\/h4>\n\n<ul>\n<li>Mobile tab banners now fill the full width of the tab \u2014 no more white gaps on the sides.<\/li>\n<li>Removed the tab-height control so tabs stay a consistent, fixed height (banners always sit correctly).<\/li>\n<\/ul>\n\n<h4>1.4.37<\/h4>\n\n<ul>\n<li>Mobile tabs now also show network mobile-tab banners (320x100) that advertisers submit, not just your own local banners. The plugin reads the ad server's format flag: images marked as mobile-tab banners appear in the tab strip; wide card images stay in the card row. This completes mobile-first: advertisers who provide a 320x100 banner reach the high-traffic mobile tabs.<\/li>\n<\/ul>\n\n<h4>1.4.36<\/h4>\n\n<ul>\n<li>Fixed: mobile tabs again show your own 320x100 mobile banner ads (1.4.35 had hidden them along with the wide card images). Tabs now show text ads and local mobile banners; only wide card\/desktop images are skipped in tabs.<\/li>\n<\/ul>\n\n<h4>1.4.35<\/h4>\n\n<ul>\n<li>Mobile tabs now show text ads only. Wide image ads (desktop\/card creatives) are skipped in the tab strip instead of being squeezed in. Dedicated mobile-tab images will be supported when the ad server adds that format.<\/li>\n<li>Added an owner signal: when a logged-in site administrator views their own site, ad events are marked so the ad server can exclude the owner's own clicks from billing (self-click protection).<\/li>\n<li>The plugin now also echoes its own site host with serve and tracking calls, so site\/origin checks stay accurate even when a browser strips the referrer.<\/li>\n<\/ul>\n\n<h4>1.4.34<\/h4>\n\n<ul>\n<li>Cookie banner links now show the full page names (\"Privacy Policy\" and \"Cookie Notice\").<\/li>\n<li>Local Ads and Cards: the description box is now a taller multi-line field so you can see the whole text while typing, with a live character counter beside it.<\/li>\n<\/ul>\n\n<h4>1.4.33<\/h4>\n\n<ul>\n<li>Cookie banner now always shows the Privacy and Cookie links (fixed a case where they were blank until the URL fields were saved).<\/li>\n<li>Simplified the cookie-notice choice to two options (show PubExa's banner \/ I have my own); the redundant \"Off\" option was removed \u2014 the prominent reminder shows until you pick one.<\/li>\n<\/ul>\n\n<h4>1.4.32<\/h4>\n\n<ul>\n<li>Added a first-party visitor id (pubexa_vid) sent with serve and click\/impression events, so the ad server can protect against invalid traffic. No raw data leaves the site beyond what was already sent.<\/li>\n<li>New Cookie notice setting (General tab, next to Site ID): off by default with a clear reminder that a cookie notice is legally required. Turn on the built-in banner, or mark that you already run your own consent tool so the two don't clash. Banner text and the Privacy \/ Cookie links are editable.<\/li>\n<\/ul>\n\n<h4>1.4.31<\/h4>\n\n<ul>\n<li>Description length raised to 160 characters (Google's standard) for cards and mobile ads. The full text shows on post-cards; mobile tabs trim to two lines.<\/li>\n<li>Live previews while editing: the mobile-ad form shows a phone-tab preview with the real line break, and the card form shows a card preview \u2014 both update as you type. The Local Ads table now shows the description the way it wraps on the tab.<\/li>\n<\/ul>\n\n<h4>1.4.30<\/h4>\n\n<ul>\n<li>Cards: the title can now be up to 90 characters and the text up to 150 (was 30 \/ 50), so promoted articles read properly. The text wraps onto more lines on the card.<\/li>\n<li>Mobile ads: replaced the two separate text lines with a single description field (up to 90 characters) that wraps onto a second line on the ad. Existing second lines are no longer shown.<\/li>\n<\/ul>\n\n<h4>1.4.29<\/h4>\n\n<ul>\n<li>Cards now default to do-follow links. The \"nofollow sponsored\" box on a new card is no longer ticked by default (you can still tick it per card). Helps your own articles get link value.<\/li>\n<\/ul>\n\n<h4>1.4.28<\/h4>\n\n<ul>\n<li>When a card promotes an article from another site, the image we save to your Media Library is now tagged as ours, and deleting the card (single or bulk) also removes that saved copy. Internal article images \u2014 which are only referenced, never copied \u2014 are never deleted.<\/li>\n<li>Fixed the Local Ads page showing a bulk-action notice as raw HTML instead of a proper notice.<\/li>\n<\/ul>\n\n<h4>1.4.27<\/h4>\n\n<ul>\n<li>Bulk actions on the Cards page and the Local Ads page: tick several items (or \"select all\") and set them to active, pause them, or delete them in one click.<\/li>\n<li>Bulk delete removes only the item and its stats \u2014 it never deletes any image, so internal article images are always safe.<\/li>\n<\/ul>\n\n<h4>1.4.26<\/h4>\n\n<ul>\n<li>Cards page: \"Promote an article\" \u2014 paste a link and PubExa reads the page's image, title and summary and fills the card form for you to review and save.<\/li>\n<li>Image handling: an image that is already on your own site is referenced directly; an image from another site is saved to your Media Library so the card never breaks if the other site goes down.<\/li>\n<\/ul>\n\n<h4>1.4.26<\/h4>\n\n<ul>\n<li>Cards page: \"Promote an article\" \u2014 paste a link and PubExa pulls the article's image, title and summary into the card form (server-side). The image is saved to your Media Library so the card never depends on an external host. Review and save like any card.<\/li>\n<\/ul>\n\n<h4>1.4.25<\/h4>\n\n<ul>\n<li>Cards page now has a display control: choose what the post row &amp; sidebar column show \u2014 PubExa network ads only, your own cards only, both mixed, or off.<\/li>\n<li>Cards page can hide the row &amp; column on the home page and on specific pages (one URL or path per line).<\/li>\n<li>Analytics now labels each entry as a Card or a Mobile banner (and groups cards first), so identically named items are easy to tell apart.<\/li>\n<li>Cards no longer appear in the Local Ads list (banners only); the single mix toggle on the Post row page was replaced by the fuller control on the Cards page.<\/li>\n<\/ul>\n\n<h4>1.4.24<\/h4>\n\n<ul>\n<li>New \"Cards\" admin page (before Analytics): add your own post-style cards with an image (Choose\/Upload), title, short text and a link \u2014 for your own articles or affiliate links. Saved cards are shown as a preview grid with per-card views\/clicks, and can be edited, paused or deleted.<\/li>\n<li>Cards are kept separate from the 320x100 Local Ads banners (which feed the mobile tabs); cards use a 16:9 image and appear only in the post row and the sidebar column.<\/li>\n<li>The post row + column now blend your Cards with PubExa network ads (about half and half, shuffled; toggle on the Post row page to show only your own).<\/li>\n<\/ul>\n\n<h4>1.4.23<\/h4>\n\n<ul>\n<li>Your own Local Ads image cards now appear inside the post row and the sidebar column, blended with PubExa network ads (about half and half, shuffled).<\/li>\n<li>New toggle on the Post row page: \"Mix PubExa network ads with my own cards\" (off = show only your own cards).<\/li>\n<li>Local card impressions and clicks are now counted and shown in the existing Local Ads \/ Analytics stats.<\/li>\n<\/ul>\n\n<h4>1.4.22<\/h4>\n\n<ul>\n<li>Moved the Analytics tab to the end of the PubExa menu and tab bar.<\/li>\n<li>Elementor: the Post Column widget now shows a labelled placeholder while editing (it was rendering empty in the editor because ads only load on the live page).<\/li>\n<\/ul>\n\n<h4>1.4.21<\/h4>\n\n<ul>\n<li>Post Column (sidebar) unit: vertical column of post-style ad cards, available as the [pubexa_column] shortcode, a classic \"PubExa post column\" widget (Gutenberg widget areas + classic sidebars), and a dedicated Elementor widget. Up to 12 cards, owner-adjustable (default 4).<\/li>\n<li>Sidebar columns are hidden on phones by default (toggle to show) so they don't duplicate the footer ad row on mobile.<\/li>\n<li>Card units now de-duplicate within themselves only; the same ad may repeat across separate units (helps fill space while ad inventory is small).<\/li>\n<li>Includes the card-body padding fix (caption inset from the card edges).<\/li>\n<\/ul>\n\n<h4>1.4.4<\/h4>\n\n<ul>\n<li>Pointed ad serving and deactivation feedback at the production PubExa ad server.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial public release of PubExa.<\/li>\n<li>Mobile-first contextual ad tabs on scroll: Remote, Local, Hybrid, Preview, No-home, and Off modes.<\/li>\n<li>Desktop ad unit via the [pubexa_ad] shortcode, automatic insertion, or an Elementor widget.<\/li>\n<li>Local Ads manager with country geo-analytics and CTR.<\/li>\n<li>Page-level opt-outs via Elementor Page Settings when Elementor is active.<\/li>\n<\/ul>","raw_excerpt":"Ad manager and ad inserter for WordPress, plus an ad network that pays you. Monetize your site with scroll-in mobile ad tabs. AdSense alternative.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/kn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/338475","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/kn.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/kn.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=338475"}],"author":[{"embeddable":true,"href":"https:\/\/kn.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/progameinc"}],"wp:attachment":[{"href":"https:\/\/kn.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=338475"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/kn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=338475"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/kn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=338475"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/kn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=338475"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/kn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=338475"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/kn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=338475"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}