| 开发者 | jacobis1036 |
|---|---|
| 更新时间 | 2026年8月26日 06:17 |
| PHP版本: | 8.0 及以上 |
| WordPress版本: | 7.1 |
| 版权: | GPLv2 or later |
| 版权网址: | 版权信息 |
[mvlt_whatsapp] shortcode and a Gutenberg block./wp-content/plugins/ or install the ZIP from the admin.No, and this case is expected. MasVirtual Lead Tracking detects the other plugin's links and measures them without changing them, which is its default behaviour. You can turn off MasVirtual Lead Tracking's own floating button and keep only the measurement.
Yes, that is a design requirement. Nothing that depends on the visitor is generated in PHP: attribution is resolved in the browser and travels over REST.
Because it is true: white on the WhatsApp green gives 2.0:1 and does not reach the recommended 3:1. It is the color pair Meta uses in its own interface and the one people recognise, so it ships as the default knowingly. If you prefer legibility over familiarity, darken the background.
No, unless you had ticked the deletion checkbox under Settings. Deactivating never deletes anything.
localStorage and never expires, so when
somebody already in your funnel returned and tapped the button again, the click was
filed in their record and nothing else happened. No new lead, and the bubble only ever
looked at leads in the "New" stage created in the last few hours — so the advisor never
found out that one of their own customers was writing again. From an incognito window
the same person did show up, because the reference was gone and a second lead was born.
That asymmetry was the giveaway.en_US catalogue: the dashboard, the funnel,
the conversion screens, the WhatsApp settings, every warning and every error message.
Other languages still go through translate.wordpress.org as usual.abierto_por_visitante()
looks for an open lead belonging to the same visitor within a window, and nothing ever
called it. The second deduplication layer the code documents has never run: the only
one in effect is the browser reference.vista parameter writes the chosen view to user meta, so loading a crafted
URL while logged in flipped someone's preference behind their back. The damage was small —
their board moved — but a GET that writes without checking where the request came from is
CSRF regardless, and the links are generated by the plugin, so signing them costs nothing.
An absent or expired nonce now falls back to the saved view instead of killing the page: a
stale bookmark is not an attack.$wpdb->prepare(), including the table names. Fifty-two
call sites interpolated the table name into the SQL string, which was the only option
before WordPress 6.2 introduced the %i identifier placeholder. This plugin requires 6.4,
so there was no reason left to keep doing it. Where the IN (…) list has a variable number
of placeholders, those are still built with array_fill() — they are generated %d and
%s tokens, never data.fecha() was already a
strict allow-list — exact YYYY-MM-DD plus checkdate() — but doing it in that order
keeps the intent visible on the line itself.Menu::SLUG.data- attributes you can put on your
own links. If you were using data-walead-* attributes or the window.walead object,
they are now data-mvlt-* and window.mvlt.is_admin() — and a request to
/wp-json is not. It is now registered alongside the other REST routes, the one place that
runs in both contexts.usermeta row per
advisor.select values on reload and on back-navigation, so the screen could read
"Lost" while the query filtered nothing — and the only hint was the absence of the
"Clear filters" link, which nobody looks at. Reported twice as "the filter is broken",
and both times it was this. The filter form now declares autocomplete="off", so what
the controls show is always what was applied.gclid, but
a row was queued for it anyway and re-evaluated on every single export, forever. The
"pending export" counter kept a number that matched no real work — the worst kind of
counter, the one that teaches you to ignore it. Rows whose problem is irreversible
are now discarded with their reason, and each one leaves a record in its lead's
history. Rows that a human can still fix — a missing Google Ads action name, a
conversion time entered wrong — stay pending on purpose, because discarding those
would take the fix out of the hands of the person who can make it.localStorage key holding the browser-proposed visitor identifier is now
wl_vp instead of sharing the wl_v name with the first-party cookie. They were
always two different things — the cookie is the identity the server decides, and this
is only a proposal — but the shared name made the privacy section look like it
contradicted what an auditor sees in the inspector.plugins_loaded,
and that question read a plugin option — which pulls in the defaults, which carry
translated strings. Asking for a translation before init makes WordPress load the
text domain too early and complain about it. The same call also ran
current_user_can() before authentication plugins had finished registering, which is
an answer worth not trusting. Both checks now happen inside the hooks that render the
bubble, which run well after init.load_plugin_textdomain(): WordPress has loaded translations for directory
plugins by itself since 4.6, and calling it before init emits a notice since 6.7.mvlt/v1, authenticated requests included, and that produced three failures that
look nothing alike:PATCH wrote and the following GET read a frozen list. It looked like
saving was failing, and it wasn't./turno, which distributes sales reps by strict rotation, handed the same rep to
everybody. That is the worst of the three because nobody would ever have noticed.aria-label, for screen reader users.DONOTCACHEPAGE, fires litespeed_control_set_nocache and sends
X-LiteSpeed-Cache-Control: no-cache, which covers LiteSpeed, WP Rocket, W3 Total
Cache, WP Super Cache and Comet Cache.wp mvlt importar-mv brings the leads from the
previous setup preserving their state. The single estado field, which mixed funnel
position and outcome, is split into MasVirtual Lead Tracking's stage/outcome pair. It also brings the
gclid as first touch and respects the original click time, without which imported leads
would be neither exportable nor useful for any report by date. It has --en-seco, it is
idempotent, and it deliberately does not queue conversions: the ones already reported
from the previous setup would be duplicated under a different Order ID.Parameters:TimeZone, headers without quotes, and the UTC offset in four digits. The
time was also not being written in the right zone: it was formatted in UTC with the
local offset appended, which shifted every conversion by five hours in Colombia and
moved small-hours ones to the wrong day.Ad User Data and Ad Personalization, required by the EU user
consent policy.document.cookie. A cookie set
over HTTP does not fall under the seven-day cap Safari applies to anything a script
writes, so the attribution window is respected on iOS. And the server recognises a
returning visitor even if the browser lost localStorage, which previously counted them
as a new visitor on every load.