[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fWkOXI575ghr8HeH1yEsOdBUGvCJN--eOa9C5VX4YfBA":3},{"slug":4,"display_name":5,"profile_url":6,"plugin_count":7,"total_installs":8,"avg_security_score":9,"avg_patch_time_days":10,"trust_score":11,"computed_at":12,"plugins":13},"kestutisit","KestutisIT","https:\u002F\u002Fprofiles.wordpress.org\u002Fkestutisit\u002F",4,6070,85,30,84,"2026-04-04T15:14:15.771Z",[14,39,59,76],{"slug":15,"name":16,"version":17,"author":5,"author_profile":6,"description":18,"short_description":19,"active_installs":20,"downloaded":21,"rating":22,"num_ratings":23,"last_updated":24,"tested_up_to":25,"requires_at_least":26,"requires_php":27,"tags":28,"homepage":34,"download_link":35,"security_score":9,"vuln_count":36,"unpatched_count":36,"last_vuln_date":37,"fetched_at":38},"toolkit-for-envato","Envato Toolkit","1.4","\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","5.4",[29,30,31,32,33],"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",0,null,"2026-03-15T15:16:48.613Z",{"slug":40,"name":41,"version":42,"author":5,"author_profile":6,"description":43,"short_description":44,"active_installs":45,"downloaded":46,"rating":47,"num_ratings":7,"last_updated":48,"tested_up_to":49,"requires_at_least":26,"requires_php":50,"tags":51,"homepage":57,"download_link":58,"security_score":9,"vuln_count":36,"unpatched_count":36,"last_vuln_date":37,"fetched_at":38},"expandable-faq","Expandable FAQ","6.1.10","\u003Cp>\u003Cstrong>First\u003C\u002Fstrong> – differently than any other similar plugin, this plugin is based on MIT license, which is a holly-grail for premium theme authors on i.e. ThemeForest or similar marketplaces.\u003Cbr \u002F>\nDifferently to standard GPLv2 license you are not required to open-source your theme and you \u003Cstrong>CAN\u003C\u002Fstrong> include this plugin into your premium websites bundle packs.\u003Cbr \u002F>\nI do say here \u003Cstrong>bundle packs\u003C\u002Fstrong>, because you should never have an F.A.Q. to be a part of your theme, because that would be a bad idea – you need to leave your customers a flexibility for the future scale:\u003Cbr \u002F>\nWhat if your customers will decide later go with some kind of fancy \u003Cstrong>knowledge base\u003C\u002Fstrong> system like in Change.org \u003Ccode>\u002Fhelp\u002F\u003C\u002Fcode> part or Envato.com \u003Ccode>Support\u003C\u002Fcode> part – if your customer will grow that big, he won’t need to have F.A.Q. plugin anymore on their website, he will want to replace it with that fancy \u003Cstrong>knowledge base\u003C\u002Fstrong> system.\u003Cbr \u002F>\nSo my advise is to include this plugin in your bundle pack’s \u003Ccode>\u002FOptional Plugins\u002F\u003C\u002Fcode> folder, so that you can tell about in the installation instructions, but make it fully independent from your theme.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Second\u003C\u002Fstrong> – this plugin is fully \u003Cstrong>MVC + Templates\u003C\u002Fstrong> based. This means that it’s code is not related at all to it’s UI, and that allows you easily to override it’s UI templates and Assets (CSS, JS, Images) by your theme very easily (and there is detailed step-by-step instructions given how to do that).\u003Cbr \u002F>\nThis means that you making a theme to be what the theme has to be – a UI part of your website, nothing more.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Third\u003C\u002Fstrong> – it is much more secure than any other plugin’s on the market. It is based on top-end S.O.L.I.D. coding principle with input data validation with data-patterns, output escaping.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Fourth\u003C\u002Fstrong> – this plugin is scalable – it’s source code is fully object-oriented, clean & logical, based on MVC architectural pattern with templates engine, compliant with strict PSR-2 coding standard and PSR-4 autoloaders, and easy to understand how to add new features on your own.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Fifth\u003C\u002Fstrong> – this plugin works well with big databases & high-traffic websites – it is created on optimal BCNF database structure and was tested on live website with 1M customers database and 500,000 active daily views.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Sixth\u003C\u002Fstrong> – it does support official WordPress multisite as network-enabled plugin, as well as it does have support WPML string translation.\u003Cbr \u002F>\nAt this point, if you need more than one language, I’d strongly advise to go with official WordPress multisite setup, because it is free, it is official (so you will never need to worry about the future support), and, most important – WordPress multisite is much more suitable for websites that needs to scale. You don’t want to have that additional translation bottle-neck code layer to be processed via database.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Seventh\u003C\u002Fstrong> – it has nice user experience – it’s has a default design, it does allow you to have more than one F.A.Q. item open at the same time – so it don’t have that annoying \u003Ccode>accordion\u003C\u002Fcode> feature.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>But the most important\u003C\u002Fstrong> is that this plugin is and always be \u003Cstrong>ads-free\u003C\u002Fstrong>. I personally really hate these \u003Cstrong>freemium\u003C\u002Fstrong>, \u003Cstrong>ads-full\u003C\u002Fstrong> or \u003Cstrong>tracking\u003C\u002Fstrong> plugins which makes majority of the plugins on w.org plugins directory (and, actually, many of premium marketplaces). So this is the key features we always maintain:\u003Cbr \u002F>\n1. Never track your data (nor even by putting some kind of GDPR-compliance agreement checkbox, like \u003Ccode>Error Log Monitor\u003C\u002Fcode> plugin),\u003Cbr \u002F>\n2. Never make it pseudo-ads-full (even such a big plugins like \u003Ccode>WooCommerce\u003C\u002Fcode> or \u003Ccode>Contact Form 7\u003C\u002Fcode> has nearly 80% of their home screen or 20% of their main buttons about \u003Ccode>how to install \\ buy other plugins\u003C\u002Fcode>\u003Cbr \u002F>\n– this is a really ugly behavior of pushing-more and going to Facebook-like business, where you get like drug-addicted to company products).\u003C\u002Fp>\n\u003Cp>The goal of this plugin is to full-fill the needs of website-starter, that needs a great tool which can last him for many years until it will grow that big so he would grow-out current plugins and would need some kind of different plugins.\u003C\u002Fp>\n\u003Cp>And, I believe, that many other developers had the same issue when tried to create their first premium theme or set-up a website for their client. Starting with the issues with license type to the moment when F.A.Q. is \u003Ccode>hardcoded\u003C\u002Fcode> into theme code.\u003C\u002Fp>\n\u003Cp>So I wanted to help all these developers to save their time, and I’m releasing this plugin for you to simplify your work. And I’m releasing it under MIT license, which allows you to use this plugin your website bundle 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>Finally – the code is poetry – \u003Cstrong>the better is the web, the happier is the world\u003C\u002Fstrong>.\u003C\u002Fp>\n\u003Ch3>Live Demo\u003C\u002Fh3>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fnativerental.com\u002Fcars\u002Ffaq\u002F\" title=\"Expandable FAQ (Live Demo)\" rel=\"nofollow ugc\">Expandable FAQ (Live Demo)\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch3>GitHub Repository (for those, who want to contribute via “Pull Requests”)\u003C\u002Fh3>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FSolidMVC\u002FExpandableFAQ\" title=\"ExpandableFAQ @GitHub\" rel=\"nofollow ugc\">https:\u002F\u002Fgithub.com\u002FSolidMVC\u002FExpandableFAQ\u003C\u002Fa>\u003C\u002Fp>\n","It’s a MIT-licensed (can be used in premium themes), high quality, native and responsive WordPress plugin to create and view expandable F.A.Q.'s",50,2666,80,"2019-08-12T17:06:00.000Z","5.2.24","5.6",[52,53,54,55,56],"collapse","collapsible","expand","expandable","faqs","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fexpandable-faq\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fexpandable-faq.zip",{"slug":60,"name":61,"version":42,"author":5,"author_profile":6,"description":62,"short_description":63,"active_installs":64,"downloaded":65,"rating":66,"num_ratings":67,"last_updated":68,"tested_up_to":49,"requires_at_least":26,"requires_php":50,"tags":69,"homepage":74,"download_link":75,"security_score":9,"vuln_count":36,"unpatched_count":36,"last_vuln_date":37,"fetched_at":38},"benefits","Benefits","\u003Cp>\u003Cstrong>First\u003C\u002Fstrong> – differently than any other similar plugin, this plugin is based on MIT license, which is a holly-grail for premium theme authors on i.e. ThemeForest or similar marketplaces.\u003Cbr \u002F>\nDifferently to standard GPLv2 license you are not required to open-source your theme and you \u003Cstrong>CAN\u003C\u002Fstrong> include this plugin into your premium websites bundle packs.\u003Cbr \u002F>\nI do say here \u003Cstrong>bundle packs\u003C\u002Fstrong>, because you should never have an benefits section to be a part of your theme, because that would be a bad idea – you need to leave your customers a flexibility for the future scale:\u003Cbr \u002F>\nWhat if your customers will decide later go with some kind of fancy \u003Cstrong>e-commerce marketplace\u003C\u002Fstrong> system like in Amazon.com – if your customer will grow that big, he won’t need to have benefits plugin anymore on their website, he will want to replace it with that fancy \u003Cstrong>e-commerce marketplace\u003C\u002Fstrong> system.\u003Cbr \u002F>\nSo my advise is to include this plugin in your bundle pack’s \u003Ccode>\u002FOptional Plugins\u002F\u003C\u002Fcode> folder, so that you can tell about in the installation instructions, but make it fully independent from your theme.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Second\u003C\u002Fstrong> – this plugin is fully \u003Cstrong>MVC + Templates\u003C\u002Fstrong> based. This means that it’s code is not related at all to it’s UI, and that allows you easily to override it’s UI templates and Assets (CSS, JS, Images) by your theme very easily (and there is detailed step-by-step instructions given how to do that).\u003Cbr \u002F>\nThis means that you making a theme to be what the theme has to be – a UI part of your website, nothing more.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Third\u003C\u002Fstrong> – it is much more secure than any other plugin’s on the market. It is based on top-end S.O.L.I.D. coding principle with input data validation with data-patterns, output escaping.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Fourth\u003C\u002Fstrong> – this plugin is scalable – it’s source code is fully object-oriented, clean & logical, based on MVC architectural pattern with templates engine, compliant with strict PSR-2 coding standard and PSR-4 autoloaders, and easy to understand how to add new features on your own.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Fifth\u003C\u002Fstrong> – this plugin works well with big databases & high-traffic websites – it is created on optimal BCNF database structure and was tested on live website with 1M customers database and 500,000 active daily views.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Sixth\u003C\u002Fstrong> – it does support official WordPress multisite as network-enabled plugin, as well as it does have support WPML string translation.\u003Cbr \u002F>\nAt this point, if you need more than one language, I’d strongly advise to go with official WordPress multisite setup, because it is free, it is official (so you will never need to worry about the future support), and, most important – WordPress multisite is much more suitable for websites that needs to scale. You don’t want to have that additional translation bottle-neck code layer to be processed via database.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Seventh\u003C\u002Fstrong> – it has nice user experience – it’s has a default design, it does allow you to have more than 3 benefits via different slider’s slides, as well as fading in and out description on mouse hover – so it is not static like what you usually get with Gutenberg.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>But the most important\u003C\u002Fstrong> is that this plugin is and always be \u003Cstrong>ads-free\u003C\u002Fstrong>. I personally really hate these \u003Cstrong>freemium\u003C\u002Fstrong>, \u003Cstrong>ads-full\u003C\u002Fstrong> or \u003Cstrong>tracking\u003C\u002Fstrong> plugins which makes majority of the plugins on w.org plugins directory (and, actually, many of premium marketplaces). So this is the key features we always maintain:\u003Cbr \u002F>\n1. Never track your data (nor even by putting some kind of GDPR-compliance agreement checkbox, like \u003Ccode>Error Log Monitor\u003C\u002Fcode> plugin),\u003Cbr \u002F>\n2. Never make it pseudo-ads-full (even such a big plugins like \u003Ccode>WooCommerce\u003C\u002Fcode> or \u003Ccode>Contact Form 7\u003C\u002Fcode> has nearly 80% of their home screen or 20% of their main buttons about \u003Ccode>how to install \\ buy other plugins\u003C\u002Fcode>\u003Cbr \u002F>\n– this is a really ugly behavior of pushing-more and going to Facebook-like business, where you get like drug-addicted to company products).\u003C\u002Fp>\n\u003Cp>The goal of this plugin is to full-fill the needs of website-starter, that needs a great tool which can last him for many years until it will grow that big so he would grow-out current plugins and would need some kind of different plugins.\u003C\u002Fp>\n\u003Cp>And, I believe, that many other developers had the same issue when tried to create their first premium theme or set-up a website for their client. Starting with the issues with license type to the moment when benefits section is \u003Ccode>hardcoded\u003C\u002Fcode> into theme code.\u003C\u002Fp>\n\u003Cp>So I wanted to help all these developers to save their time, and I’m releasing this plugin for you to simplify your work. And I’m releasing it under MIT license, which allows you to use this plugin your website bundle 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>Finally – the code is poetry – \u003Cstrong>the better is the web, the happier is the world\u003C\u002Fstrong>.\u003C\u002Fp>\n\u003Ch3>Languages\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>English \u003Cem>(official)\u003C\u002Fem>\u003C\u002Fli>\n\u003Cli>Russian \u003Cem>(official)\u003C\u002Fem>\u003C\u002Fli>\n\u003Cli>Lithuanian \u003Cem>(official)\u003C\u002Fem>\u003C\u002Fli>\n\u003Cli>Arabian RLT \u003Cem>(raw translation)\u003C\u002Fem>\u003C\u002Fli>\n\u003Cli>Bulgarian \u003Cem>(translated by Martin Petkov)\u003C\u002Fem>\u003C\u002Fli>\n\u003Cli>Czech \u003Cem>(translated by Lukáš Smrček)\u003C\u002Fem>\u003C\u002Fli>\n\u003Cli>French \u003Cem>(translated by Edner Zephir)\u003C\u002Fem>\u003C\u002Fli>\n\u003Cli>German \u003Cem>(translated by Websoft AG team)\u003C\u002Fem>\u003C\u002Fli>\n\u003Cli>Greek \u003Cem>(translated by Alexandros Tsapournias)\u003C\u002Fem>\u003C\u002Fli>\n\u003Cli>Italian \u003Cem>(translated by NetHome, LTD team)\u003C\u002Fem>\u003C\u002Fli>\n\u003Cli>Korean \u003Cem>(translated by Eric Jazz)\u003C\u002Fem>\u003C\u002Fli>\n\u003Cli>Portuguese \u003Cem>(translated by HK – Agência de Publicidade)\u003C\u002Fem>\u003C\u002Fli>\n\u003Cli>Romanian \u003Cem>(translated by Marius Stoica)\u003C\u002Fem>\u003C\u002Fli>\n\u003Cli>Spanish \u003Cem>(translated by Ana Victoria Rodríguez Guerrero, Edner Zephir & Anthony Ortega)\u003C\u002Fem>\u003C\u002Fli>\n\u003Cli>Swedish \u003Cem>(translated by Kristian Salov)\u003C\u002Fem>\u003C\u002Fli>\n\u003Cli>Turkish \u003Cem>(translated by Levent Şane)\u003C\u002Fem>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Live Demo\u003C\u002Fh3>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fnativerental.com\u002Fcars\u002F\" title=\"Benefits (Live Demo)\" rel=\"nofollow ugc\">Benefits (Live Demo)\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch3>GitHub Repository (for those, who want to contribute via “Pull Requests”)\u003C\u002Fh3>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FSolidMVC\u002FBenefits\" title=\"Benefits @GitHub\" rel=\"nofollow ugc\">https:\u002F\u002Fgithub.com\u002FSolidMVC\u002FBenefits\u003C\u002Fa>\u003C\u002Fp>\n","It’s a MIT-licensed (can be used in premium themes), high quality, native and responsive WordPress plugin to create and view slider-based benefits",10,1554,100,2,"2019-08-12T16:15:00.000Z",[70,60,71,72,73],"benefit","offer","offers","slider","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fbenefits\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fbenefits.zip",{"slug":77,"name":78,"version":79,"author":5,"author_profile":6,"description":80,"short_description":81,"active_installs":64,"downloaded":82,"rating":66,"num_ratings":83,"last_updated":84,"tested_up_to":49,"requires_at_least":26,"requires_php":50,"tags":85,"homepage":87,"download_link":88,"security_score":9,"vuln_count":36,"unpatched_count":36,"last_vuln_date":37,"fetched_at":38},"deals","Deals","6.1.10-1","\u003Cp>\u003Cstrong>First\u003C\u002Fstrong> – differently than any other similar plugin, this plugin is based on MIT license, which is a holly-grail for premium theme authors on i.e. ThemeForest or similar marketplaces.\u003Cbr \u002F>\nDifferently to standard GPLv2 license you are not required to open-source your theme and you \u003Cstrong>CAN\u003C\u002Fstrong> include this plugin into your premium websites bundle packs.\u003Cbr \u002F>\nI do say here \u003Cstrong>bundle packs\u003C\u002Fstrong>, because you should never have an deals section to be a part of your theme, because that would be a bad idea – you need to leave your customers a flexibility for the future scale:\u003Cbr \u002F>\nWhat if your customers will decide later go with some kind of fancy \u003Cstrong>e-commerce marketplace\u003C\u002Fstrong> system like in Amazon.com – if your customer will grow that big, he won’t need to have deals plugin anymore on their website, he will want to replace it with that fancy \u003Cstrong>e-commerce marketplace\u003C\u002Fstrong> system.\u003Cbr \u002F>\nSo my advise is to include this plugin in your bundle pack’s \u003Ccode>\u002FOptional Plugins\u002F\u003C\u002Fcode> folder, so that you can tell about in the installation instructions, but make it fully independent from your theme.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Second\u003C\u002Fstrong> – this plugin is fully \u003Cstrong>MVC + Templates\u003C\u002Fstrong> based. This means that it’s code is not related at all to it’s UI, and that allows you easily to override it’s UI templates and Assets (CSS, JS, Images) by your theme very easily (and there is detailed step-by-step instructions given how to do that).\u003Cbr \u002F>\nThis means that you making a theme to be what the theme has to be – a UI part of your website, nothing more.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Third\u003C\u002Fstrong> – it is much more secure than any other plugin’s on the market. It is based on top-end S.O.L.I.D. coding principle with input data validation with data-patterns, output escaping.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Fourth\u003C\u002Fstrong> – this plugin is scalable – it’s source code is fully object-oriented, clean & logical, based on MVC architectural pattern with templates engine, compliant with strict PSR-2 coding standard and PSR-4 autoloaders, and easy to understand how to add new features on your own.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Fifth\u003C\u002Fstrong> – this plugin works well with big databases & high-traffic websites – it is created on optimal BCNF database structure and was tested on live website with 1M customers database and 500,000 active daily views.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Sixth\u003C\u002Fstrong> – it does support official WordPress multisite as network-enabled plugin, as well as it does have support WPML string translation.\u003Cbr \u002F>\nAt this point, if you need more than one language, I’d strongly advise to go with official WordPress multisite setup, because it is free, it is official (so you will never need to worry about the future support), and, most important – WordPress multisite is much more suitable for websites that needs to scale. You don’t want to have that additional translation bottle-neck code layer to be processed via database.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Seventh\u003C\u002Fstrong> – it has nice user experience – it’s has a default design, it does allow you to have more than 3 deals via different slider’s slides, as well as fading in and out description on mouse hover – so it is not static like what you usually get with Gutenberg.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>But the most important\u003C\u002Fstrong> is that this plugin is and always be \u003Cstrong>ads-free\u003C\u002Fstrong>. I personally really hate these \u003Cstrong>freemium\u003C\u002Fstrong>, \u003Cstrong>ads-full\u003C\u002Fstrong> or \u003Cstrong>tracking\u003C\u002Fstrong> plugins which makes majority of the plugins on w.org plugins directory (and, actually, many of premium marketplaces). So this is the key features we always maintain:\u003Cbr \u002F>\n1. Never track your data (nor even by putting some kind of GDPR-compliance agreement checkbox, like \u003Ccode>Error Log Monitor\u003C\u002Fcode> plugin),\u003Cbr \u002F>\n2. Never make it pseudo-ads-full (even such a big plugins like \u003Ccode>WooCommerce\u003C\u002Fcode> or \u003Ccode>Contact Form 7\u003C\u002Fcode> has nearly 80% of their home screen or 20% of their main buttons about \u003Ccode>how to install \\ buy other plugins\u003C\u002Fcode>\u003Cbr \u002F>\n– this is a really ugly behavior of pushing-more and going to Facebook-like business, where you get like drug-addicted to company products).\u003C\u002Fp>\n\u003Cp>The goal of this plugin is to full-fill the needs of website-starter, that needs a great tool which can last him for many years until it will grow that big so he would grow-out current plugins and would need some kind of different plugins.\u003C\u002Fp>\n\u003Cp>And, I believe, that many other developers had the same issue when tried to create their first premium theme or set-up a website for their client. Starting with the issues with license type to the moment when deals section is \u003Ccode>hardcoded\u003C\u002Fcode> into theme code.\u003C\u002Fp>\n\u003Cp>So I wanted to help all these developers to save their time, and I’m releasing this plugin for you to simplify your work. And I’m releasing it under MIT license, which allows you to use this plugin your website bundle 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>Finally – the code is poetry – \u003Cstrong>the better is the web, the happier is the world\u003C\u002Fstrong>.\u003C\u002Fp>\n\u003Ch3>Live Demo\u003C\u002Fh3>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fnativerental.com\u002Fcars\u002F\" title=\"Deals (Live Demo)\" rel=\"nofollow ugc\">Deals (Live Demo)\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch3>GitHub Repository (for those, who want to contribute via “Pull Requests”)\u003C\u002Fh3>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FSolidMVC\u002FDeals\" title=\"Deals @GitHub\" rel=\"nofollow ugc\">https:\u002F\u002Fgithub.com\u002FSolidMVC\u002FDeals\u003C\u002Fa>\u003C\u002Fp>\n","It’s a MIT-licensed (can be used in premium themes), high quality, native and responsive WordPress plugin to create and view slider-based deals",1645,1,"2019-08-12T18:36:00.000Z",[86,77,71,72,73],"deal","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fdeals\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fdeals.zip"]