{"id":54,"date":"2026-04-25T18:15:55","date_gmt":"2026-04-25T18:15:55","guid":{"rendered":"https:\/\/docs.fasterthemes.com\/best-classifieds-wordpress-theme\/2026\/04\/25\/updates-and-license\/"},"modified":"2026-04-25T18:15:55","modified_gmt":"2026-04-25T18:15:55","slug":"updates-and-license","status":"publish","type":"post","link":"https:\/\/docs.fasterthemes.com\/best-classifieds-wordpress-theme\/2026\/04\/25\/updates-and-license\/","title":{"rendered":"Updates &#038; License"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">Updates &#038; License <em>[Pro]<\/em><\/h1>\n\n\n<p>How updates work, how the license validates, what to do if something breaks.<\/p>\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n<h2 class=\"wp-block-heading\">How updates reach you<\/h2>\n\n\n<svg viewBox=\"0 0 720 240\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"max-width:100%;height:auto;display:block;margin:1rem auto;font-family:system-ui,sans-serif;\">\n  <rect x=\"20\" y=\"20\" width=\"200\" height=\"80\" rx=\"8\" fill=\"#FAFAF7\" stroke=\"#1E40AF\" stroke-width=\"1.5\"\/>\n  <text x=\"120\" y=\"50\" text-anchor=\"middle\" font-size=\"13\" font-weight=\"600\">Your WordPress site<\/text>\n  <text x=\"120\" y=\"70\" text-anchor=\"middle\" font-size=\"10\" fill=\"#5a6f84\">BC Pro plugin running<\/text>\n  <text x=\"120\" y=\"86\" text-anchor=\"middle\" font-size=\"10\" fill=\"#5a6f84\">checks daily for updates<\/text>\n\n  <line x1=\"220\" y1=\"60\" x2=\"280\" y2=\"60\" stroke=\"#94a3b8\" stroke-width=\"1.5\"\/>\n  <polygon points=\"276,56 286,60 276,64\" fill=\"#94a3b8\"\/>\n  <text x=\"240\" y=\"50\" font-size=\"9\" fill=\"#5a6f84\">license key<\/text>\n  <text x=\"240\" y=\"76\" font-size=\"9\" fill=\"#5a6f84\">site URL<\/text>\n\n  <rect x=\"280\" y=\"20\" width=\"200\" height=\"80\" rx=\"8\" fill=\"#FAFAF7\" stroke=\"#1E40AF\" stroke-width=\"1.5\"\/>\n  <text x=\"380\" y=\"50\" text-anchor=\"middle\" font-size=\"13\" font-weight=\"600\">fasterthemes.com<\/text>\n  <text x=\"380\" y=\"70\" text-anchor=\"middle\" font-size=\"10\" fill=\"#5a6f84\">WPDigiPro license server<\/text>\n  <text x=\"380\" y=\"86\" text-anchor=\"middle\" font-size=\"10\" fill=\"#5a6f84\">validates + responds<\/text>\n\n  <line x1=\"280\" y1=\"80\" x2=\"220\" y2=\"80\" stroke=\"#94a3b8\" stroke-width=\"1.5\"\/>\n  <polygon points=\"226,76 216,80 226,84\" fill=\"#94a3b8\"\/>\n  <text x=\"226\" y=\"100\" font-size=\"9\" fill=\"#5a6f84\">version, download URL<\/text>\n\n  <rect x=\"540\" y=\"20\" width=\"160\" height=\"80\" rx=\"8\" fill=\"#FAFAF7\" stroke=\"#10b981\" stroke-width=\"1.5\"\/>\n  <text x=\"620\" y=\"50\" text-anchor=\"middle\" font-size=\"13\" font-weight=\"600\">Update applied<\/text>\n  <text x=\"620\" y=\"70\" text-anchor=\"middle\" font-size=\"10\" fill=\"#5a6f84\">via standard<\/text>\n  <text x=\"620\" y=\"86\" text-anchor=\"middle\" font-size=\"10\" fill=\"#5a6f84\">WP plugin update flow<\/text>\n\n  <line x1=\"480\" y1=\"60\" x2=\"540\" y2=\"60\" stroke=\"#94a3b8\" stroke-width=\"1.5\"\/>\n  <polygon points=\"536,56 546,60 536,64\" fill=\"#94a3b8\"\/>\n\n  <rect x=\"20\" y=\"140\" width=\"680\" height=\"80\" rx=\"8\" fill=\"#fff\" stroke=\"#cbd5e1\"\/>\n  <text x=\"40\" y=\"166\" font-size=\"12\" font-weight=\"600\" fill=\"#1a1a1a\">Daily cron schedule<\/text>\n  <text x=\"40\" y=\"186\" font-size=\"11\" fill=\"#5a6f84\">\u00b7 `bcpro_daily_license_check` runs once a day<\/text>\n  <text x=\"40\" y=\"204\" font-size=\"11\" fill=\"#5a6f84\">\u00b7 Calls fasterthemes.com \u2192 checks license is still active \u2192 updates `bcpro_license` option<\/text>\n<\/svg>\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n<h2 class=\"wp-block-heading\">License lifecycle<\/h2>\n\n\n<h3 class=\"wp-block-heading\">Activation<\/h3>\n\n\n<p>When you paste a license key at <strong>Appearance \u2192 BC Pro License \u2192 Activate<\/strong>:<\/p>\n\n\n<ol class=\"wp-block-list\">\n<li>The plugin sends a request to <code>https:\/\/fasterthemes.com\/?wpdigipro-action=wpdigipro-activate&amp;license-key={base64}&amp;registered-site={base64}&amp;reference=1955<\/code><\/li>\n<li>The server validates: key exists, not refunded, not at install limit<\/li>\n<li>Response includes <code>license_status: active<\/code>, <code>scheme: &lt;expiry_timestamp&gt;<\/code><\/li>\n<li>The plugin stores the response in <code>wp_options.bcpro_license<\/code><\/li>\n<\/ol>\n\n\n<h3 class=\"wp-block-heading\">Daily check<\/h3>\n\n\n<p>A WordPress cron job runs <code>BCPro_License::maybe_check_license()<\/code> daily. This:<\/p>\n\n\n<ol class=\"wp-block-list\">\n<li>Calls <code>?wpdigipro-action=wpdigipro-check<\/code> with the same key<\/li>\n<li>If the server returns <code>licenseStatus: active<\/code>, the local status stays &#8220;active&#8221;<\/li>\n<li>If the server returns <code>licenseStatus: deactive<\/code> AND <code>status: error<\/code>, the local status flips to &#8220;inactive&#8221; (auto-updates stop, but Pro features keep working until you fix the license)<\/li>\n<\/ol>\n\n\n<h3 class=\"wp-block-heading\">Deactivation<\/h3>\n\n\n<p>Click <strong>Deactivate License<\/strong> in the admin to free the seat for use on another site:<\/p>\n\n\n<ol class=\"wp-block-list\">\n<li>Plugin sends <code>?wpdigipro-action=wpdigipro-deactive<\/code><\/li>\n<li>Server marks the install record inactive<\/li>\n<li>Local <code>bcpro_license<\/code> is cleared<\/li>\n<\/ol>\n\n\n<p>You can re-activate on the same or a different site any time.<\/p>\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n<h2 class=\"wp-block-heading\">Update process<\/h2>\n\n\n<h3 class=\"wp-block-heading\">Auto updates<\/h3>\n\n\n<p>WordPress&#8217;s standard plugin update flow handles this. When BC Pro detects a new version:<\/p>\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Plugins<\/strong> page shows &#8220;There is a new version of Best Classifieds Pro available. View details or update now.&#8221;<\/li>\n<li>Click <strong>Update now<\/strong>.<\/li>\n<li>WordPress downloads from <code>wpdigipro.com\/wp-content\/uploads\/...zip<\/code>, extracts, replaces files.<\/li>\n<li>The license is preserved (lives in <code>wp_options<\/code>, untouched by plugin reinstall).<\/li>\n<\/ol>\n\n\n<h3 class=\"wp-block-heading\">Manual update<\/h3>\n\n\n<p>If auto-update fails (filesystem permissions, etc.):<\/p>\n\n\n<ol class=\"wp-block-list\">\n<li>Download the new zip from your FasterThemes account.<\/li>\n<li>Deactivate Pro at <strong>Plugins<\/strong>.<\/li>\n<li>Delete the old plugin (your license\/settings stay safe \u2014 they&#8217;re in DB, not files).<\/li>\n<li>Upload + activate the new zip.<\/li>\n<li>The license should re-bind automatically.<\/li>\n<\/ol>\n\n\n<p>If it doesn&#8217;t, re-paste the license key at <strong>Appearance \u2192 BC Pro License<\/strong>.<\/p>\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n<h2 class=\"wp-block-heading\">Update notifications and changelogs<\/h2>\n\n\n<p>The plugin&#8217;s update screen shows the changelog from <code>readme.txt<\/code>. Major changes are emailed to license owners (FasterThemes account \u2192 Email Preferences).<\/p>\n\n\n<p>Subscribe to release notifications at <a href=\"https:\/\/fasterthemes.com\/blog\">fasterthemes.com\/blog<\/a> for context on bigger changes.<\/p>\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n<h2 class=\"wp-block-heading\">Moving sites (staging \u2192 production, or rebranding)<\/h2>\n\n\n<p>You have two options:<\/p>\n\n\n<h3 class=\"wp-block-heading\">Option A \u2014 Activate on both temporarily<\/h3>\n\n\n<p>If your single-site license includes a small grace period (we allow up to 3 active installs at once for transition periods), just activate on the new site without deactivating the old. The license server logs both. Once the move is complete, deactivate on the old site.<\/p>\n\n\n<h3 class=\"wp-block-heading\">Option B \u2014 Deactivate, then activate<\/h3>\n\n\n<p>Cleaner audit trail. Deactivate on the old site first (Appearance \u2192 BC Pro License \u2192 Deactivate). Activate on the new site. The license is now tied to the new URL.<\/p>\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p><strong><code>http<\/code> vs <code>https<\/code>:<\/strong> A license activated on <code>http:\/\/example.com<\/code> won&#8217;t auto-bind to <code>https:\/\/example.com<\/code> \u2014 they&#8217;re distinct URLs to the server. Deactivate-and-reactivate after enabling SSL.<\/p><\/blockquote>\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p><strong><code>www<\/code> vs no-www:<\/strong> Same. Pick one canonical URL per site.<\/p><\/blockquote>\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n<h2 class=\"wp-block-heading\">Renewals<\/h2>\n\n\n<p>License is <strong>lifetime<\/strong> \u2014 no renewals required. Updates and support continue forever as long as the plugin and license server exist.<\/p>\n\n\n<p>If you bought before the lifetime change, your license expiry date is shown at <strong>Appearance \u2192 BC Pro License<\/strong>. Renew via your FasterThemes account.<\/p>\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n<h2 class=\"wp-block-heading\">Troubleshooting license issues<\/h2>\n\n\n<h3 class=\"wp-block-heading\">&#8220;License key invalid&#8221;<\/h3>\n\n\n<p>Common causes:<\/p>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Extra whitespace.<\/strong> Re-copy the key from the email; paste; re-activate.<\/li>\n<li><strong>Wrong key.<\/strong> You may have multiple licenses; check the email subject lines.<\/li>\n<li><strong>Site URL changed.<\/strong> A license for <code>https:\/\/oldsite.com<\/code> rejects activation from <code>https:\/\/newsite.com<\/code>. Deactivate on old, activate on new.<\/li>\n<\/ul>\n\n\n<h3 class=\"wp-block-heading\">&#8220;Failed to check license: cURL error 28: Operation timed out&#8221;<\/h3>\n\n\n<p>Your host blocks outbound HTTPS to <code>fasterthemes.com<\/code>, or it&#8217;s super slow.<\/p>\n\n\n<p>Test from SSH:<\/p>\n\n\n<pre class=\"wp-block-code\"><code>curl -I --max-time 10 https:\/\/fasterthemes.com<\/code><\/pre>\n\n\n<p>If timeout: ask your host to allowlist <code>fasterthemes.com:443<\/code>. Or switch to a host that doesn&#8217;t lock down outbound calls (most managed WP hosts don&#8217;t).<\/p>\n\n\n<h3 class=\"wp-block-heading\">License works but Pro features missing<\/h3>\n\n\n<p>The license check is independent of feature loading. If the license card shows Active but Pro UI is missing:<\/p>\n\n\n<ul class=\"wp-block-list\">\n<li>Verify the <strong>Best Classifieds<\/strong> theme is the active one (not a child or different theme)<\/li>\n<li>Check <strong>Plugins<\/strong> for an &#8220;inactive&#8221; status on Best Classifieds Pro<\/li>\n<li>Look for PHP errors in the WP debug log (<code>\/wp-content\/debug.log<\/code> if <code>WP_DEBUG_LOG<\/code> is on)<\/li>\n<\/ul>\n\n\n<h3 class=\"wp-block-heading\">Auto-update fails with &#8220;Download failed. A valid URL was not provided.&#8221;<\/h3>\n\n\n<p>This was a known bug fixed in core WPDigiPro 4.9.18+. If you&#8217;re on an older version of the WPDigiPro infrastructure, manually update by downloading the zip and uploading via Plugins \u2192 Add New \u2192 Upload.<\/p>\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n<h2 class=\"wp-block-heading\">Rolling back to a previous version<\/h2>\n\n\n<p>If a release breaks something:<\/p>\n\n\n<ol class=\"wp-block-list\">\n<li>Download the previous version from your FasterThemes account (we keep all releases archived).<\/li>\n<li><strong>Plugins<\/strong> \u2192 deactivate Pro \u2192 delete it.<\/li>\n<li>Upload the older zip \u2192 activate.<\/li>\n<li>Pin to that version: <strong>Classifieds Pro \u2192 Settings \u2192 Updates \u2192 Pause auto-updates<\/strong> (we add this in 1.1+).<\/li>\n<\/ol>\n\n\n<p>Then file a bug report at <a href=\"mailto:support@fasterthemes.com\">support@fasterthemes.com<\/a> with the version that broke and what you saw.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>How updates work, how the license validates, what to do if something breaks.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-54","post","type-post","status-publish","format-standard","hentry","category-reference"],"_links":{"self":[{"href":"https:\/\/docs.fasterthemes.com\/best-classifieds-wordpress-theme\/wp-json\/wp\/v2\/posts\/54","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/docs.fasterthemes.com\/best-classifieds-wordpress-theme\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/docs.fasterthemes.com\/best-classifieds-wordpress-theme\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/docs.fasterthemes.com\/best-classifieds-wordpress-theme\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/docs.fasterthemes.com\/best-classifieds-wordpress-theme\/wp-json\/wp\/v2\/comments?post=54"}],"version-history":[{"count":0,"href":"https:\/\/docs.fasterthemes.com\/best-classifieds-wordpress-theme\/wp-json\/wp\/v2\/posts\/54\/revisions"}],"wp:attachment":[{"href":"https:\/\/docs.fasterthemes.com\/best-classifieds-wordpress-theme\/wp-json\/wp\/v2\/media?parent=54"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/docs.fasterthemes.com\/best-classifieds-wordpress-theme\/wp-json\/wp\/v2\/categories?post=54"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/docs.fasterthemes.com\/best-classifieds-wordpress-theme\/wp-json\/wp\/v2\/tags?post=54"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}