[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fo2KyFgmQ4LdZYV0iQDuLpPx9hP__yV7Z94ze0qF_dW8":3},{"slug":4,"name":5,"version":6,"author":7,"author_profile":8,"description":9,"short_description":10,"active_installs":11,"downloaded":12,"rating":13,"num_ratings":14,"last_updated":15,"tested_up_to":16,"requires_at_least":17,"requires_php":18,"tags":19,"homepage":25,"download_link":26,"security_score":27,"vuln_count":28,"unpatched_count":28,"last_vuln_date":29,"fetched_at":30,"vulnerabilities":31,"developer":32,"crawl_stats":29,"alternatives":40,"analysis":161,"fingerprints":200},"force-update-check-for-plugins-and-themes","Force Update Check for Plugins and Themes","1.0.1","WP Zone","https:\u002F\u002Fprofiles.wordpress.org\u002Faspengrovestudios\u002F","\u003Cp>Force Update Check for Plugins and Themes forces WordPress to run a theme and plugin update check whenever you visit the WordPress updates page (\u003Ccode>\u002Fwp-admin\u002Fupdate-core.php\u003C\u002Fcode>).\u003C\u002Fp>\n\u003Cp>Force Update Check Features:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Automatic checks (no need to click the “check again” button)\u003C\u002Fli>\n\u003Cli>No configurations or settings page\u003C\u002Fli>\n\u003Cli>Eliminates action for developer or QA\u003C\u002Fli>\n\u003Cli>Get new features and security patches faster\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>How it works\u003C\u002Fp>\n\u003Cp>By default, WordPress checks for updates approximately every 12 hours. This plugin clears the theme\u002Fplugin updates cache and triggers a new update check each time the updates page is visited.\u003C\u002Fp>\n\u003Cp>When activated on your site it runs automatically and has no configurations page or settings to worry about. Each time you visit the updates page WordPress will run a new check.\u003C\u002Fp>\n\u003Cp>Force Update Check for Plugins and Themes is specifically a plugin and theme check and will not force a WordPress core update check.\u003C\u002Fp>\n\u003Cp>Third-party plugins and themes that do not update from the WordPress.org repository may not be cleared by the Force Update Check for Plugins and Themes plugin. If the plugin or theme does not update via the WordPress.org repository, and forcing an update check with this plugin does not work, check with your plugin or theme developer for a force check option.\u003C\u002Fp>\n\u003Cp>Looking for more simple developer tools?\u003C\u002Fp>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fwpzone.co\u002F\" title=\"WP Zone\" rel=\"nofollow ugc\">WP Zone\u003C\u002Fa> has built a whole bunch of add-ons, services, plugins and themes and are committed to quality code that follows WordPress best practices. Check out some of our other developer favorites and don’t forget to leave a ⭐️⭐️⭐️⭐️⭐️ review to help others in the community decide.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwpzone.co\u002Fproduct\u002Fcustom-css-and-javascript-developer-edition\u002F\" title=\"Custom CSS and JavaScript\" rel=\"nofollow ugc\">Custom CSS and JavaScript\u003C\u002Fa> – Quickly add custom site-wide CSS styles and JavaScript code to your WordPress site\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwplayouts.space\u002F\" title=\"WP Layouts\" rel=\"nofollow ugc\">WP Layouts\u003C\u002Fa> – Organize, import, and export your theme layouts from the cloud\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Freplace-image\u002F\" title=\"Replace Image\" rel=\"ugc\">Replace Image\u003C\u002Fa> – Keep the same URL when uploading to the WordPress media library\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fsupport\u002Fplugin\u002Fdonations-for-woocommerce\u002F\" title=\"Potent Donations for WooCommerce\" rel=\"ugc\">Potent Donations for WooCommerce\u003C\u002Fa> – Acceptance donations through your WooCommerce store\u003Cbr \u002F>\nEnjoy!\u003C\u002Fli>\n\u003C\u002Ful>\n","The Force Update Check For Plugins And Themes will run each time this page is loaded. Update statuses may still be cached by third-party updaters.",200,5681,100,5,"2024-08-12T19:51:00.000Z","6.6.5","5.0","5.4",[20,21,22,23,24],"check","checker","force","update","updates","","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fforce-update-check-for-plugins-and-themes.1.0.1.zip",92,0,null,"2026-03-15T15:16:48.613Z",[],{"slug":33,"display_name":7,"profile_url":8,"plugin_count":34,"total_installs":35,"avg_security_score":36,"avg_patch_time_days":37,"trust_score":38,"computed_at":39},"aspengrovestudios",21,40450,91,124,73,"2026-04-04T15:44:36.645Z",[41,65,91,115,139],{"slug":42,"name":43,"version":44,"author":45,"author_profile":46,"description":47,"short_description":48,"active_installs":49,"downloaded":50,"rating":51,"num_ratings":52,"last_updated":53,"tested_up_to":54,"requires_at_least":55,"requires_php":18,"tags":56,"homepage":62,"download_link":63,"security_score":64,"vuln_count":28,"unpatched_count":28,"last_vuln_date":29,"fetched_at":30},"toolkit-for-envato","Envato Toolkit","1.4","KestutisIT","https:\u002F\u002Fprofiles.wordpress.org\u002Fkestutisit\u002F","\u003Cp>It is a 3 files library + Visual UI, to validate the purchase codes of your customers, get details about specific Envato user (country, city, total followers, total sales, avatar), get his license purchase and support expiration dates, license type he bought, check for updates of purchased plugins and themes and get the download links for them.\u003C\u002Fp>\n\u003Cp>Plus – this library has Envato Item Id search feature by providing plugin’s or theme’s name and author. So – yes, this is a tool you, as a developer \u002F author, have been looking for months.\u003C\u002Fp>\n\u003Cp>If you are looking for the library-only version to integrate into your plugin \u002F theme, it’s on GitHub:\u003Cbr \u002F>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FKestutisIT\u002FEnvatoToolkit\" title=\"Envato Toolkit (Standalone)\" rel=\"nofollow ugc\">Envato Toolkit (Standalone)\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>The main purpose of this plugin is to help you to start much easier without having a headache trying to understand \u003Ccode>WordPress - Envato Market\u003C\u002Fcode> plugins code, that is the only one built by Envato, and has so complicated and unclear code, that you never get how it works (see example below).\u003C\u002Fp>\n\u003Cp>When I tried to create plugin’s \u003Ccode>[Check for Update]\u003C\u002Fcode> and \u003Ccode>[Validate Purchase Code]\u003C\u002Fcode> feature-buttons in the plugin myself, and I saw the code of the \u003Ccode>WordPress - Envato Market\u003C\u002Fcode> plugin, I was shocked how badly it is written and how you should not to code.\u003C\u002Fp>\n\u003Cp>For example – you would like to give an error message, if Envato user token is empty, which is a required string, i.e. – \u003Ccode>pAA0aBCdeFGhiJKlmNOpqRStuVWxyZ44\u003C\u002Fcode>. If you like K.I.S.S., PSR-2, D.R.Y., clean code coding standards and paradigms, you’d probably just have these five lines of code, so that every developer would get it:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$token = get_user_meta(get_current_user_id(), 'envato_token', TRUE);\nif($token == \"\")\n{\n    return new \\WP_Error('api_token_error', __('An API token is required.', 'envato-toolkit'));\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Now lets see how the same task traceback looks like in \u003Ccode>WordPress - Envato Market\u003C\u002Fcode> plugin:\u003C\u002Fp>\n\u003Col>\n\u003Cli>\n\u003Cp>\u003Ccode>[Api.php -> request(..)]\u003C\u002Fcode> Check if the token is empty:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>if ( empty( $token ) )\n{\n    return new WP_Error( 'api_token_error', __( 'An API token is required.', 'envato-market' ) );\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Ccode>[Api.php -> request(..)]\u003C\u002Fcode> Parse it from another string:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$token = trim( str_replace( 'Bearer', '', $args['headers']['Authorization'] ) );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Ccode>[Api.php -> request(..)]\u003C\u002Fcode> Parse it one more time – this time from arguments array:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>public function request( $url, $args = array() ) {\n    $defaults = array(\n        'timeout' => 20,\n    );\n    $args = wp_parse_args( $args, $defaults );\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Ccode>[Api.php -> download(..)]\u003C\u002Fcode> Transfer the token variable one more time – this time via params:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>class Envato_Market_API {\n    public function download( $id, $args = array() ) {\n        $url = 'https:\u002F\u002Fapi.envato.com\u002Fv2\u002Fmarket\u002Fbuyer\u002Fdownload?item_id=' . $id . '&shorten_url=true';\n        return $this->request( $url, $args );\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Ccode>[admin.php -> maybe_deferred_download(..)]\u003C\u002Fcode> Pass it again – this time get it to args array from another method call:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>function maybe_deferred_download( $options ) {\n    $args = $this->set_bearer_args();\n    $options['package'] = envato_market()->api()->download( $vars['item_id'], $args );\n    return $options;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Ccode>[admin.php -> set_bearer_args(..)]\u003C\u002Fcode> Wrap the token into multi-dimensional string array:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$args = array(\n    'headers' => array(\n        'Authorization' => 'Bearer ' . $token,\n    ),\n);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Ccode>[admin.php -> set_bearer_args(..)]\u003C\u002Fcode> Pass the wrapped token one more time – this time get it from get_option:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>foreach ( envato_market()->get_option( 'items', array() ) as $item ) {\n    if ( $item['id'] === $id ) {\n        $token = $item['token'];\n        break;\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Ccode>[admin.php -> get_option(..)]\u003C\u002Fcode> So what’s in this \u003Ccode>get_option\u003C\u002Fcode>? – Correct, another call to another method – \u003Ccode>get_options()\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>public function get_option( $name, $default = '' ) {\n    $options = self::get_options();\n    $name = self::sanitize_key( $name );\n    return isset( $options[ $name ] ) ? $options[ $name ] : $default;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Ccode>[admin.php -> get_options()]\u003C\u002Fcode> Finally, after almost 10 steps in the tree, we are finally getting the original\u003Cbr \u002F>\nWordPress method call, but now I’m getting confused again – what is that \u003Ccode>option_name\u003C\u002Fcode> variable here:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>public function get_options() {\n    return get_option( $this->option_name, array() );\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Ccode>[envato-market.php -> init_globals()]\u003C\u002Fcode> Here is it is – the \u003Ccode>option name\u003C\u002Fcode> key name is… Oh wait…\u003Cbr \u002F>\nNo it is not here it. It is equals to another variable, who is is put\u003Cbr \u002F>\nin another clean-up function – look like I’m keep seeing this for the 2 time in the tree – the sanitization of sanitization:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$this->option_name = self::sanitize_key( $this->slug );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Ccode>[envato-market.php -> init_globals()]\u003C\u002Fcode> So the \u003Ccode>option name\u003C\u002Fcode> key name is the name of \u003Ccode>$this->slug\u003C\u002Fcode>.\u003Cbr \u002F>\nNow lets see what is the value of \u003Ccode>$this->slug\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$this->slug        = 'envato-market';\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>So it takes \u003Cstrong>eleven (!)\u003C\u002Fstrong> steps to understand one variable. And the whole code of that plugin is like that. The example above was the headache I had, until I realized that I must write a new Envato API Management Toolkit, instead of trying to use what Envato is giving, because otherwise I won’t get anything working ever.\u003C\u002Fp>\n\u003Cp>And, I believe, that many other developers had the same issue when tried to create update check feature for their plugins or themes.\u003C\u002Fp>\n\u003Cp>So instead of using that library for myself, I decided that I want to help all these developers to save their time, and I’m sharing this code with you. I’m releasing it under MIT license, which allows you to use this code in your plugin without any restrictions for both – free and commercial use.\u003C\u002Fp>\n\u003Cp>Plus – I’m giving a promise to you, that this plugin is and will always be 100% free, without any ads, ‘Subscribe’, ‘Follow us’, ‘Check our page’, ‘Get Pro Version’ or similar links.\u003C\u002Fp>\n\u003Cp>If you created in hi-quality code a valuable additional functionality to the library and you want to share it with everyone – I’m open here to support your efforts, and add your code to the plugin’s library, so that we all together make this plugin better for authors – the better is the plugin, the better plugins authors will make for their customers. The better quality products we will have on the internet, the happier people will be all over the world.\u003C\u002Fp>\n\u003Cp>Finally – the code is poetry – \u003Cstrong>the better is the plugin, the happier is the world\u003C\u002Fstrong>.\u003C\u002Fp>\n\u003Cp>The pseudo-code of example output of the plugin is this:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>Details about you:\n----------------------------------------------------------\nList of all different plugins you bought:\n\u003C?php foreach($plugins AS $pluginId => $plugin): ?>\n    \u003C?='Plugin Id: '.$pluginId.', Name: '.$plugin['name'];?>, Licenses:\n    \u003C?php foreach($plugin['licenses'] AS $license): ?>\n        Code: \u003C?=$license['purchase_code'];?>,\n        License: \u003C?=$license['license'];?>,\n        Purchased: \u003C?=$license['license_purchase_date'];?> \u003C?=$license['license_purchase_time'];?>,\n        Expires: \u003C?=$license['support_expiration_date'];?> \u003C?=$license['support_expiration_time'];?>,\n        Support Status: \u003C?=$license['support_active'];?>\n    \u003C?php endforeach; ?>\n\u003C?php endforeach; ?>\n\nList of all different themes you bought:\n\u003C?php foreach($themes AS $themeId => $theme): ?>\n    \u003C?='Theme Id: '.$themeId.', Name: '.$theme['name'];?>, Licenses:\n    \u003C?php foreach($theme['licenses'] AS $license): ?>\n        Code: \u003C?=$license['purchase_code'];?>,\n        License: \u003C?=$license['license'];?>,\n        Purchased: \u003C?=$license['license_purchase_date'];?> \u003C?=$license['license_purchase_time'];?>,\n        Expires: \u003C?=$license['support_expiration_date'];?> \u003C?=$license['support_expiration_time'];?>,\n        Status: \u003C?=$license['support_active'] == 1 ? \"Supported\" : \"Support Expired\";?>\n    \u003C?php endforeach; ?>\n\u003C?php endforeach; ?>\n\nYour summary:\nYour location is \u003C?=$authorCity;?>, \u003C?=$authorCountry;?>.\nYou've sold your items \u003C?=$authorSales;?> times and you have \u003C?=$authorFollowers;?> followers on Envato.\n\n1. Your Customer's License Details\n----------------------------------------------------------\nPurchase Code: \u003C?=$targetPurchaseCode;?>\nIs Valid License: \u003C?=$isValidTargetLicense ? 'Yes' : 'No';?>\nBuyer Username: \u003C?=$targetLicenseBuyer;?>\nLicense Type: \u003C?=$targetLicenseType;?>\nPurchased At: \u003C?=$targetLicensePurchasedAt;?>\nSupported Until: \u003C?=$targetLicenseSupportedUntil;?>\nSupport Status: \u003C?=$targetLicenseSupportActive == 1 ? \"Supported\" : \"Support Expired\";?>\n\n2. Details About Target Envato User - \u003C?=$targetUsername;?>\n----------------------------------------------------------\n\u003C?=$targetUsername;?> is located in \u003C?=$targetUserCity;?>, \u003C?=$targetUserCountry;?>.\nHe sold his items \u003C?=$targetUserSales;?> times and has \u003C?=$targetUserFollowers;?> followers on Envato.\n\n3. Status of Purchased Plugin ID - \u003C?=$targetPluginId;?>\n----------------------------------------------------------\nPlugin Name: \u003C?=$nameOfTargetPluginId;?>\nPlugin Update Available: \u003C?=$pluginUpdateAvailable ? 'Yes' : 'No';?>\nInstalled Plugin Version: \u003C?=$installedPluginVersion;?>\nAvailable Plugin Version: \u003C?=$availablePluginVersion;?>\nPlugin Update Download URL:\n\u003Ca href=\"\u003C?=$pluginUpdateDownloadUrl;?>\" target=\"_blank\" title=\"Download newest version\">Download newest version\u003C\u002Fa>\n\n4. Status of Purchased Theme ID - \u003C?=$targetThemeId;?>:\n----------------------------------------------------------\nTheme Name: \u003C?=$nameOfTargetThemeId;?>\nTheme Update Available: \u003C?=$themeUpdateAvailable ? 'Yes' : 'No';?>\nInstalled Theme Version: \u003C?=$installedThemeVersion;?>\nAvailable Theme Version: \u003C?=$availableThemeVersion;?>\nTheme Update Download URL:\n\u003Ca href=\"\u003C?=$themeUpdateDownloadUrl;?>\" target=\"_blank\" title=\"Download newest version\">Download newest version\u003C\u002Fa>\n\n5. Envato Item Id of Purchased Plugin\n----------------------------------------------------------\nSearched for Name: \u003C?=$targetPluginName;?>\nSearched for Author: \u003C?=$targetPluginAuthor;?>\nFound Plugin Id: \u003C?=$foundPluginId;?>\n\n6. Envato Item Id of Purchased Theme\n----------------------------------------------------------\nSearched for Name: \u003C?=$targetThemeName;?>\nSearched for Author: \u003C?=$targetThemeAuthor;?>\nFound Theme Id: \u003C?=$foundThemeId;?>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>And the example input of the output above, it this:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$objToolkit = new EnvatoAPIManager($toolkitSettings);\n\n\u002F\u002F Details about you\n$purchasedPlugins = $objToolkit->getPurchasedPluginsWithDetails();\n$plugins = array();\nforeach($purchasedPlugins AS $pluginId => $purchasedPlugin)\n{\n    $purchasedPlugin['licenses'] = $objToolkit->getLicensesByItemId($pluginId);\n    $plugins[$pluginId] = $purchasedPlugin;\n}\n\n$purchasedThemes = $objToolkit->getPurchasedThemesWithDetails();\n$themes = array();\nforeach($purchasedThemes AS $themeId => $purchasedTheme)\n{\n    $purchasedTheme['licenses'] = $objToolkit->getLicensesByItemId($themeId);\n    $themes[$themeId] = $purchasedTheme;\n}\n\n$authorDetails = $objToolkit->getUserDetails($sanitizedEnvatoUsername);\n\u002F\u002F View vars\n$view->plugins = $plugins;\n$view->themes = $themes;\nif($authorDetails != FALSE)\n{\n    $view->authorCity = $authorDetails['city'];\n    $view->authorCountry = $authorDetails['country'];\n    $view->authorSales = $authorDetails['sales'];\n    $view->authorFollowers = $authorDetails['followers'];\n} else\n{\n    $view->authorCity = '';\n    $view->authorCountry = '';\n    $view->authorSales = 0;\n    $view->authorFollowers = 0;\n}\n\n\u002F\u002F 1. Details About Target Purchase Code\n$targetLicenseDetails = $objToolkit->getLicenseDetails($sanitizedTargetPurchaseCode);\n\u002F\u002F View vars\n$view->targetPurchaseCode = esc_html($sanitizedTargetPurchaseCode); \u002F\u002F Ready for print\n$view->isValidTargetLicense = $objToolkit->isValidLicense($sanitizedTargetPurchaseCode);\n$view->targetLicenseBuyer = $targetLicenseDetails['buyer_username'];\n$view->targetLicense = $targetLicenseDetails['license'];\n$view->targetLicensePurchasedAt = $targetLicenseDetails['license_purchase_date'].' '.$targetLicenseDetails['license_purchase_time'];\n$view->targetLicenseSupportedUntil = $targetLicenseDetails['support_expiration_date'].' '.$targetLicenseDetails['support_expiration_time'];\n$view->targetLicenseSupportActive = $targetLicenseDetails['support_active'];\n\n\u002F\u002F 2. Details About Target Envato User\n$targetUserDetails = $objToolkit->getUserDetails($sanitizedTargetUsername);\n\u002F\u002F View vars\n$view->targetUsername = esc_html($sanitizedTargetUsername); \u002F\u002F Ready for print\n$view->targetUserCity = $targetUserDetails['city'];\n$view->targetUserCountry = $targetUserDetails['country'];\n$view->targetUserSales = $targetUserDetails['sales'];\n$view->targetUserFollowers = $targetUserDetails['followers'];\n\n\u002F\u002F 3. Status of Purchased Plugin ID\n$availablePluginVersion = $objToolkit->getAvailableVersion($sanitizedTargetPluginId);\n$pluginUpdateAvailable = version_compare($sanitizedInstalledPluginVersion, $availablePluginVersion, '\u003C');\n\u002F\u002F View vars\n$view->targetPluginId = intval($sanitizedTargetPluginId); \u002F\u002F Ready for print\n$view->installedPluginVersion = esc_html($sanitizedInstalledPluginVersion); \u002F\u002F Ready for print\n$view->nameOfTargetPluginId = esc_html($objToolkit->getItemName($sanitizedTargetPluginId));\n$view->availablePluginVersion = $availablePluginVersion;\n$view->pluginUpdateAvailable = $pluginUpdateAvailable;\n$view->pluginUpdateDownloadUrl = $pluginUpdateAvailable ? $objToolkit->getDownloadUrlIfPurchased($sanitizedTargetPluginId) : '';\n\n\u002F\u002F 4. Status of Purchased Theme ID\n$availableThemeVersion = $objToolkit->getAvailableVersion($sanitizedTargetThemeId);\n$themeUpdateAvailable = version_compare($sanitizedInstalledThemeVersion, $availableThemeVersion, '\u003C');\n\u002F\u002F View vars\n$view->targetThemeId = intval($sanitizedTargetThemeId); \u002F\u002F Ready for print\n$view->installedThemeVersion = esc_html($sanitizedInstalledThemeVersion); \u002F\u002F Ready for print\n$view->nameOfTargetThemeId = esc_html($objToolkit->getItemName($sanitizedTargetThemeId));\n$view->availableThemeVersion = $availableThemeVersion;\n$view->themeUpdateAvailable = $themeUpdateAvailable;\n$view->themeUpdateDownloadUrl = $themeUpdateAvailable ? $objToolkit->getDownloadUrlIfPurchased($sanitizedTargetThemeId) : '';\n\n\u002F\u002F 5. Envato Item Id of Purchased Plugin\n$view->targetPluginName = esc_html($sanitizedTargetPluginName); \u002F\u002F Ready for print\n$view->targetPluginAuthor = esc_html($sanitizedTargetPluginAuthor); \u002F\u002F Ready for print\n$view->foundPluginId = $objToolkit->getItemIdByPluginAndAuthorIfPurchased($sanitizedTargetPluginName, $sanitizedTargetPluginAuthor);\n\n\u002F\u002F 6. Envato Item Id of Purchased Theme\n$view->targetThemeName = esc_html($sanitizedTargetThemeName); \u002F\u002F Ready for print\n$view->targetThemeAuthor = esc_html($sanitizedTargetThemeAuthor); \u002F\u002F Ready for print\n$view->foundThemeId = $objToolkit->getItemIdByThemeAndAuthorIfPurchased($sanitizedTargetThemeName, $sanitizedTargetThemeAuthor);\n\u003C\u002Fcode>\u003C\u002Fpre>\n","Validate purchase code, check for item update & support expiration, download newest version, lookup for user details, search for Envato item id & more",6000,126000,56,9,"2021-04-26T18:00:00.000Z","5.7.15","4.6",[57,58,59,60,61],"api","envato","license","purchase-validator","update-checker","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Ftoolkit-for-envato\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Ftoolkit-for-envato.zip",85,{"slug":66,"name":67,"version":68,"author":69,"author_profile":70,"description":71,"short_description":72,"active_installs":73,"downloaded":74,"rating":75,"num_ratings":76,"last_updated":77,"tested_up_to":78,"requires_at_least":79,"requires_php":80,"tags":81,"homepage":87,"download_link":88,"security_score":13,"vuln_count":89,"unpatched_count":28,"last_vuln_date":90,"fetched_at":30},"stops-core-theme-and-plugin-updates","Easy Updates Manager","9.0.20","David Anderson \u002F Team Updraft","https:\u002F\u002Fprofiles.wordpress.org\u002Fdavidanderson\u002F","\u003Cp>Easy Updates Manager is a light yet powerful plugin that allows you to manage all kinds of update- both on your single site install, or in WordPress Multisite. With a huge number of settings for endless configuration, Easy Updates Manager is an obvious choice for anyone wanting to take control of their website updates.\u003C\u002Fp>\n\u003Cp>\u003Ciframe loading=\"lazy\" title=\"Easy Updates Manager Overview\" src=\"https:\u002F\u002Fplayer.vimeo.com\u002Fvideo\u002F288535460?dnt=1&app_id=122963\" width=\"750\" height=\"422\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write\">\u003C\u002Fiframe>\u003C\u002Fp>\n\u003Ch4>Free Features Include\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Disable all updates with one click\u003C\u002Fli>\n\u003Cli>Enable automatic updates with one click\u003C\u002Fli>\n\u003Cli>Deeply customize your automatic update settings\u003C\u002Fli>\n\u003Cli>Use logs to determine what and when something is updated\u003C\u002Fli>\n\u003Cli>Hide plugin and theme updates (if custom developed)\u003C\u002Fli>\n\u003Cli>Select which plugins and themes can be automatically updated\u003C\u002Fli>\n\u003Cli>Disable core, plugin, theme, and translation updates\u003C\u002Fli>\n\u003Cli>Force Updates to check that automatic updates are working\u003C\u002Fli>\n\u003Cli>Integrate with \u003Ca href=\"https:\u002F\u002Fupdraftplus.com\u002F\" rel=\"nofollow ugc\">UpdraftPlus\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Configure email notification settings\u003C\u002Fli>\n\u003Cli>And much more…\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Go Premium\u003C\u002Fh4>\n\u003Cp>Visit \u003Ca href=\"https:\u002F\u002Feasyupdatesmanager.com\" rel=\"nofollow ugc\">easyupdatesmanager.com\u003C\u002Fa> to upgrade to our premium features.\u003C\u002Fp>\n\u003Cp>\u003Ciframe loading=\"lazy\" title=\"Easy Updates Manager Premium\" src=\"https:\u002F\u002Fplayer.vimeo.com\u002Fvideo\u002F289883791?dnt=1&app_id=122963\" width=\"750\" height=\"422\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write\">\u003C\u002Fiframe>\u003C\u002Fp>\n\u003Cp>Premium features include:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Safe mode: ensures updates are compatible with your WordPress version and your server’s PHP version\u003C\u002Fli>\n\u003Cli>Schedule for automatic updates: runs the updates when you want them to avoid any downtime\u003C\u002Fli>\n\u003Cli>External logging – Get alerts when new updates have been logged\u003C\u002Fli>\n\u003Cli>Anonymization – Control what is sent to the WordPress API\u003C\u002Fli>\n\u003Cli>Delayed updates – Delay automatic updates in the case of hotfixes and frequent releases\u003C\u002Fli>\n\u003Cli>Auto backups: integrates with \u003Ca href=\"https:\u002F\u002Fupdraftplus.com\u002F\" rel=\"nofollow ugc\">UpdraftPlus\u003C\u002Fa> and take a backup before your site is updated\u003C\u002Fli>\n\u003Cli>UpdraftCentral: fully integrates with \u003Ca href=\"https:\u002F\u002Fupdraftplus.com\u002Fupdraftcentral\u002F\" rel=\"nofollow ugc\">UpdraftCentral\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Log clearing schedule: keeps your logs table under control and deletes entries according to your own schedule\u003C\u002Fli>\n\u003Cli>Import\u002FExport settings: exports your settings from one site to another for quick configuration\u003C\u002Fli>\n\u003Cli>Email notification of updates: gives you weekly or monthly reports of pending updates \u003C\u002Fli>\n\u003Cli>White label: disables notices and customizes what the client sees\u003C\u002Fli>\n\u003Cli>Check plugins: runs a check of plugins that have been removed from the WordPress Plugin Directory\u003C\u002Fli>\n\u003Cli>Webhook: integrates with third-party services to run automatic updates via cron or even Zapier\u003C\u002Fli>\n\u003Cli>Export logs: exports logs for printing, or downloads a CSV or JSON file for a date range\u003C\u002Fli>\n\u003Cli>Version control protection: prevent updates from occurring to plugins and themes under version control\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cblockquote>\n\u003Cp>For more information on Easy Updates Manager Premium, \u003Ca href=\"https:\u002F\u002Feasyupdatesmanager.com\" rel=\"nofollow ugc\">check out our website at easyupdatesmanager.com\u003C\u002Fa>.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch4>Translations\u003C\u002Fh4>\n\u003Cp>If you want to contribute to the translation, \u003Ca href=\"https:\u002F\u002Ftranslate.wordpress.org\u002Fprojects\u002Fwp-plugins\u002Fstops-core-theme-and-plugin-updates\" rel=\"nofollow ugc\">please visit our translation section\u003C\u002Fa>. We appreciate all the translation help we can get.\u003C\u002Fp>\n","Manage all your WordPress updates, including individual updates, automatic updates, logs, and loads more. This also works very well with WordPress Mul &hellip;",300000,7698886,96,720,"2025-12-09T10:33:00.000Z","6.9.4","5.1","5.6",[82,83,84,85,86],"disable-updates","disable-updates-manager","easy-updates-manager","update-control","updates-manager","https:\u002F\u002Feasyupdatesmanager.com","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fstops-core-theme-and-plugin-updates.9.0.20.zip",1,"2019-03-28 00:00:00",{"slug":92,"name":93,"version":94,"author":95,"author_profile":96,"description":97,"short_description":98,"active_installs":99,"downloaded":100,"rating":101,"num_ratings":102,"last_updated":103,"tested_up_to":78,"requires_at_least":104,"requires_php":25,"tags":105,"homepage":110,"download_link":111,"security_score":112,"vuln_count":113,"unpatched_count":28,"last_vuln_date":114,"fetched_at":30},"iwp-client","InfiniteWP Client","1.13.5","revmakx","https:\u002F\u002Fprofiles.wordpress.org\u002Frevmakx\u002F","\u003Cp>\u003Ca href=\"https:\u002F\u002Finfinitewp.com\u002F\" title=\"Manage Multiple WordPress\" rel=\"nofollow ugc\">InfiniteWP\u003C\u002Fa> allows users to manage unlimited number of WordPress sites from their own server.\u003C\u002Fp>\n\u003Cp>Main features:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Self-hosted system: Resides on your own server and totally under your control\u003C\u002Fli>\n\u003Cli>One-click updates for WordPress, plugins and themes across all your sites\u003C\u002Fli>\n\u003Cli>Instant backup and restore your entire site or just the database\u003C\u002Fli>\n\u003Cli>One-click access to all WP admin panels\u003C\u002Fli>\n\u003Cli>Bulk Manage plugins & themes: Activate & Deactive multiple plugins & themes on multiple sites simultaneously\u003C\u002Fli>\n\u003Cli>Bulk Install plugins & themes in multiple sites at once\u003C\u002Fli>\n\u003Cli>and more..\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Visit us at \u003Ca href=\"https:\u002F\u002Finfinitewp.com\u002F\" title=\"Manage Multiple WordPress\" rel=\"nofollow ugc\">InfiniteWP.com\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>Check out the \u003Ca href=\"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=s35ZoW95cnU\" rel=\"nofollow ugc\">InfiniteWP Overview Video\u003C\u002Fa> below.\u003C\u002Fp>\n\u003Cp>\u003Cspan class=\"embed-youtube\" style=\"text-align:center; display: block;\">\u003Ciframe loading=\"lazy\" class=\"youtube-player\" width=\"750\" height=\"422\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002Fs35ZoW95cnU?version=3&rel=1&showsearch=0&showinfo=1&iv_load_policy=1&fs=1&hl=en-US&autohide=2&wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\">\u003C\u002Fiframe>\u003C\u002Fspan>\u003C\u002Fp>\n\u003Cp>Credits: \u003Ca href=\"http:\u002F\u002Fprelovac.com\u002Fvladimir\" rel=\"nofollow ugc\">Vladimir Prelovac\u003C\u002Fa> for his worker plugin on which the client plugin is being developed.\u003C\u002Fp>\n","Install this plugin on unlimited sites and manage them all from a central dashboard. This plugin communicates with your InfiniteWP Admin Panel.",200000,8204351,88,177,"2026-02-26T10:35:00.000Z","3.1",[106,107,108,109,24],"backup","multi-site","multiple-admin","security","http:\u002F\u002Finfinitewp.com\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fiwp-client.1.13.5.zip",90,7,"2025-01-07 00:00:00",{"slug":116,"name":117,"version":118,"author":119,"author_profile":120,"description":121,"short_description":122,"active_installs":123,"downloaded":124,"rating":75,"num_ratings":125,"last_updated":126,"tested_up_to":127,"requires_at_least":128,"requires_php":129,"tags":130,"homepage":134,"download_link":135,"security_score":136,"vuln_count":137,"unpatched_count":28,"last_vuln_date":138,"fetched_at":30},"companion-auto-update","Companion Auto Update","3.9.3","Papin Schipper","https:\u002F\u002Fprofiles.wordpress.org\u002Fpapin\u002F","\u003Cp>Companion Auto Update is a powerful and completely free plugin that allows you to manage all the updates on your WordPress site. Our aim is to give you the best control over these updates and stay in the know at all times.\u003C\u002Fp>\n\u003Cp>We understand that you might not always be able to check if your WordPress site has any updates that need to be installed. Especially when you maintain multiple websites keeping them up-to-date can be a lot of work. This plugin can help you with that. We’ll keep your site up-to-date and keep you posted about what’s happening and notify you when we need your help with something.\u003C\u002Fp>\n\u003Cp>If you have a feature suggestion or idea you’d like to see in the plugin, we’d love to hear about it! \u003Ca href=\"https:\u002F\u002Fcodeermeneer.nl\u002Fcontact\u002F\" rel=\"nofollow ugc\">Suggest a Feature\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch4>Main features\u003C\u002Fh4>\n\u003Col>\n\u003Cli>Auto-updating for plugins, themes, core and translation files\u003C\u002Fli>\n\u003Cli>Set at what time you wish to update\u003C\u002Fli>\n\u003Cli>Filter plugins and themes to not be updated\u003C\u002Fli>\n\u003Cli>E-mail notifications about old software, pending updates and completed updates\u003C\u002Fli>\n\u003Cli>An update log with all updates\u003C\u002Fli>\n\u003Cli>Option to delay automatic updates with an x number of days\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch4>Full control over everything\u003C\u002Fh4>\n\u003Cp>Full control, that’s what this plugin is all about. With this plugin you can enable (or disable) automatic updating for plugins, themes, WordPress core updates (both minor and major can be changed separately) and for translation files. Don’t want to run the updater for all plugins? Don’t worry, just disable auto updating for the plugins you’d like to skip and we can even notify you when there’s an update for these plugins so you can go and update them yourself.\u003C\u002Fp>\n\u003Ch4>Scheduling\u003C\u002Fh4>\n\u003Cp>By default we’ll check for updates twice a day but you can change this to several different options if you’d like. When choosing to update on a daily basis you can even select at what time you’d like it to run. Besides the updaters you can also schedule te notifications, want to update every hour but only recieve notifications once a day? No problem!\u003Cbr \u002F>\nSometimes developers will push an update that will cause errors on your site, they’ll often fix it within a day but if the updater has run in the mean time it can cause all kinds of issues. Now you can choose to delay updates with an x number of days to prevent this from happening.\u003C\u002Fp>\n\u003Ch4>Know what’s happening\u003C\u002Fh4>\n\u003Cp>We want you to know what’s happening on your website. This plugin offers settings for various email notifications. We can send you an email when an update is available, when a plugin has been updated or when wordpress has been updated.\u003Cbr \u002F>\nBut if you don’t want to recieve emails about this you can still log in and view the changelog to see what happened.\u003C\u002Fp>\n","Manage all updates on your WordPress site. Stay in the know with several optional e-mail notifications and logs. For free.",50000,4122284,105,"2025-07-10T18:34:00.000Z","6.8.5","5.3.0","7.4",[131,132,133,23,24],"auto","automatic","background","https:\u002F\u002Fwijzijnqreative.nl\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fcompanion-auto-update.3.9.3.zip",89,4,"2025-07-14 20:39:43",{"slug":140,"name":141,"version":142,"author":143,"author_profile":144,"description":145,"short_description":146,"active_installs":147,"downloaded":148,"rating":149,"num_ratings":150,"last_updated":151,"tested_up_to":152,"requires_at_least":153,"requires_php":25,"tags":154,"homepage":159,"download_link":160,"security_score":64,"vuln_count":28,"unpatched_count":28,"last_vuln_date":29,"fetched_at":30},"automatic-updater","Advanced Automatic Updates","1.0.2","Gary Pendergast","https:\u002F\u002Fprofiles.wordpress.org\u002Fpento\u002F","\u003Cp>Advanced Automatic Updates adds extra options to WordPress’ built-in Automatic Updates feature. On top of security updates, it also supports installing major releases, plugins, themes, or even regular SVN checkouts!\u003C\u002Fp>\n\u003Cp>If you’re working on a WordPress Multisite install, it will properly restrict the options page to your Network Admin.\u003C\u002Fp>\n\u003Cp>While this will be useful for the vast majority of sites, please exercise caution, particularly if you have any custom themes or plugins running on your site.\u003C\u002Fp>\n","Adds extra options to WordPress' built-in Automatic Updates feature.",30000,255107,94,61,"2021-06-04T00:46:00.000Z","5.0.25","3.7",[155,156,157,158,24],"core","plugins","stable","themes","http:\u002F\u002Fpento.net\u002Fprojects\u002Fautomatic-updater-for-wordpress\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fautomatic-updater.1.0.2.zip",{"attackSurface":162,"codeSignals":178,"taintFlows":188,"riskAssessment":189,"analyzedAt":199},{"hooks":163,"ajaxHandlers":174,"restRoutes":175,"shortcodes":176,"cronEvents":177,"entryPointCount":28,"unprotectedCount":28},[164,170],{"type":165,"name":166,"callback":167,"file":168,"line":169},"action","admin_init","onAdminInit","ags-force-updates.php",44,{"type":165,"name":171,"callback":172,"file":168,"line":173},"admin_notices","showUpdatesPageNotice",53,[],[],[],[],{"dangerousFunctions":179,"sqlUsage":180,"outputEscaping":182,"fileOperations":28,"externalRequests":28,"nonceChecks":28,"capabilityChecks":28,"bundledLibraries":187},[],{"prepared":28,"raw":28,"locations":181},[],{"escaped":89,"rawEcho":89,"locations":183},[184],{"file":168,"line":185,"context":186},72,"raw output",[],[],{"summary":190,"deductions":191},"The plugin \"force-update-check-for-plugins-and-themes\" v1.0.1 exhibits a generally strong security posture based on the provided static analysis. The absence of AJAX handlers, REST API routes, shortcodes, and cron events significantly limits the potential attack surface. Furthermore, the code demonstrates good practices by exclusively using prepared statements for SQL queries and not performing file operations or external HTTP requests. The lack of any recorded vulnerabilities in its history is also a positive indicator of its development quality.\n\nHowever, there are a few areas that warrant attention. The plugin has no capability checks or nonce checks implemented, which could be a concern if its functionality were to be extended in the future to handle sensitive operations. Additionally, 50% of output escaping is missing, which presents a potential risk for cross-site scripting (XSS) vulnerabilities if user-supplied data is displayed without proper sanitization. While taint analysis showed no issues, the absence of capability and nonce checks, coupled with unescaped output, suggests that the plugin might be too trusting of its environment or user input.\n\nIn conclusion, the plugin is currently in a good security state with no known vulnerabilities and a small attack surface. The primary weaknesses lie in the lack of authorization checks and incomplete output escaping. These are not critical flaws in its current limited functionality but represent potential avenues for exploitation if the plugin's features evolve or if a threat actor can influence the data being outputted. Developers should consider implementing capability checks for any administrative actions and ensuring all output is properly escaped to further harden the plugin.",[192,194,197],{"reason":193,"points":137},"50% of output escaping missing",{"reason":195,"points":196},"No capability checks implemented",2,{"reason":198,"points":196},"No nonce checks implemented","2026-03-16T20:18:04.107Z",{"wat":201,"direct":206},{"assetPaths":202,"generatorPatterns":203,"scriptPaths":204,"versionParams":205},[],[],[],[],{"cssClasses":207,"htmlComments":209,"htmlAttributes":210,"restEndpoints":211,"jsGlobals":212,"shortcodeOutput":213},[208],"notice-warning",[],[],[],[],[]]