{"id":17,"date":"2026-09-16T10:28:31","date_gmt":"2026-09-16T10:28:31","guid":{"rendered":"https:\/\/docs.latw.ai\/uncategorized\/installation\/"},"modified":"2026-09-16T10:28:31","modified_gmt":"2026-09-16T10:28:31","slug":"installation","status":"publish","type":"post","link":"https:\/\/docs.latw.ai\/pl\/esti-to-wordpress\/installation\/","title":{"rendered":"Installation"},"content":{"rendered":"<h1>Installation and first run<\/h1>\n<h2>Requirements<\/h2>\n<ul>\n<li>WordPress 6.0 or newer<\/li>\n<li>PHP 7.4 or newer<\/li>\n<li>An Esti CRM client API account: a <strong>company identifier<\/strong> and an <strong>API token<\/strong><\/li>\n<li>A license key for this plugin, issued in your account dashboard<\/li>\n<li>Working WP-Cron (the default on most hosts). The import runs in the background through scheduled events.<\/li>\n<\/ul>\n<p>No external services, libraries or accounts beyond Esti are needed.<\/p>\n<h2>1. Install the plugin<\/h2>\n<ol>\n<li>In the admin, go to <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>.<\/li>\n<li>Choose the plugin ZIP file and press <strong>Install Now<\/strong>.<\/li>\n<li>Press <strong>Activate<\/strong>.<\/li>\n<\/ol>\n<p>Activation registers the offer post type, rebuilds the permalinks and schedules a synchronization every six hours.<\/p>\n<p>Alternatively, upload the unpacked <code>offer-synchronizer-for-esti-crm<\/code> folder to <code>\/wp-content\/plugins\/<\/code> over FTP and<br \/>\nactivate it on the <strong>Plugins<\/strong> screen.<\/p>\n<h2>2. Enter the API credentials<\/h2>\n<p>After activation two new menu entries appear:<\/p>\n<ul>\n<li><strong>Esti To WordPress<\/strong> \u2014 settings and the sync log<\/li>\n<li><strong>Offers<\/strong> \u2014 the imported offers (read only)<\/li>\n<\/ul>\n<p>Open <strong>Esti To WordPress \u2192 Settings<\/strong>, tab <strong>General<\/strong>, and fill in:<\/p>\n<ul>\n<li><strong>Company identifier<\/strong> \u2014 your Esti CRM account identifier<\/li>\n<li><strong>API token<\/strong> \u2014 the token issued by Esti CRM<\/li>\n<\/ul>\n<p>Ask your Esti CRM contact for both if you do not have them. Press <strong>Save Changes<\/strong>.<\/p>\n<p>Then open the <strong>License<\/strong> tab, paste your license key and press <strong>Activate<\/strong>. No synchronization runs until the key is<br \/>\nactive \u2014 see <a href=\"\/esti-to-wordpress\/settings#license\">License<\/a>.<\/p>\n<h2>3. Optional: set the archive address<\/h2>\n<p>Still on the <strong>General<\/strong> tab, <strong>Archive slug<\/strong> decides the address the offers live under. The default is <code>offers<\/code>, which<br \/>\nproduces:<\/p>\n<pre><code>https:\/\/example.com\/offers\/                     the listing\nhttps:\/\/example.com\/offers\/apartment-warsaw-123 a single offer<\/code><\/pre>\n<p>Set it to <code>oferty<\/code>, <code>nieruchomosci<\/code> or anything else before you go live. Changing it later rebuilds the permalinks<br \/>\nautomatically, but every previously published or indexed offer link changes with it, so decide early.<\/p>\n<h2>4. Run the first synchronization<\/h2>\n<p>At the bottom of the settings screen press <strong>Sync now<\/strong>.<\/p>\n<p>The screen confirms that the synchronization has started. It does not finish while you watch: offers are fetched <strong>100<br \/>\nat a time, with a 30-second pause between pages<\/strong>, so a catalogue of roughly 600 offers takes a few minutes. You can<br \/>\nleave the screen.<\/p>\n<p>To watch progress, open <strong>Esti To WordPress \u2192 Sync log<\/strong>. The run stays marked <strong>In progress<\/strong> until its last page is<br \/>\nimported. See <a href=\"\/esti-to-wordpress\/synchronization-and-log\">Synchronization and the sync log<\/a>.<\/p>\n<h2>5. Check the result<\/h2>\n<ul>\n<li><strong>Offers<\/strong> in the admin menu lists what was imported.<\/li>\n<li>Visit <code>https:\/\/example.com\/offers\/<\/code> (or your own slug) to see the archive.<\/li>\n<\/ul>\n<p>If the archive shows &#8220;Page not found&#8221;, go to <strong>Settings \u2192 Permalinks<\/strong> and press <strong>Save Changes<\/strong> once. That rebuilds<br \/>\nthe rewrite rules.<\/p>\n<h2>6. Now that offers exist<\/h2>\n<p>Some settings only become useful after the first run, because they are built from the offers already imported:<\/p>\n<ul>\n<li><strong>Import filter \u2192 Offer types<\/strong> and <strong>Offer subtypes<\/strong> list the values found in your catalogue.<\/li>\n<li>The archive filter bar fills its <strong>Property type<\/strong> and <strong>Location<\/strong> dropdowns the same way.<\/li>\n<\/ul>\n<p>So the usual order is: import everything once, then narrow the import filter if you need to.<\/p>\n<h2>Updating the plugin<\/h2>\n<p>Deactivating and reactivating the plugin, or updating it, keeps every imported offer and every setting. Deactivation<br \/>\nonly removes the scheduled runs; activating again schedules them anew.<\/p>\n<h2>Removing the plugin<\/h2>\n<p>Deleting the plugin removes its settings, the agent directory, the value dictionary and the log. <strong>Imported offer posts<br \/>\nare deliberately kept<\/strong>, so that existing URLs do not disappear from search results overnight. If you want them gone as<br \/>\nwell, delete them from the <strong>Offers<\/strong> screen before deleting the plugin.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Installation and first run Requirements WordPress 6.0 or newer PHP 7.4 or newer An Esti CRM client API account: a company identifier and an API token\u2026<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_latwm_translated_slug":"","footnotes":""},"categories":[2],"tags":[],"class_list":["post-17","post","type-post","status-publish","format-standard","hentry","category-esti-to-wordpress"],"_links":{"self":[{"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/posts\/17","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/comments?post=17"}],"version-history":[{"count":1,"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/posts\/17\/revisions"}],"predecessor-version":[{"id":44,"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/posts\/17\/revisions\/44"}],"wp:attachment":[{"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/media?parent=17"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/categories?post=17"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/tags?post=17"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}