Before you start

Industrial is a multi-purpose WordPress theme for industrial, construction, manufacturing and renewable-energy sites, and it ships twelve complete starter sites. You pick one, import it, and then replace its words and pictures with yours.

Ten minutes spent on this chapter saves an hour later. Two things catch people out, and both are here: the plugin that travels beside the theme, and the fact that importing a demo adds a whole site's worth of content to the site it runs on.

What you downloaded

Your purchase is a single file, industrial_main.zip. Unzip it on your computer. Inside:

File or folder What it is
industrial.zip The theme — this is the one you upload in Appearance
industrial-child.zip The optional child theme, for editing theme files
plugins/anps_theme_plugin.zip The Anps Theme Plugin — required
plugins/js_composer.zip WPBakery Page Builder, if you want the legacy builder
plugins/revslider.zip Slider Revolution, used by the demo sliders
documentation/index.html This manual, which works with no connection
licensing/ The GPL text and the split-licence statement

The same manual is published at docs.themes.anpsthemes.com/industrial, which is the copy that is updated with each release. The copy in your download is the one that works offline.

Do not upload industrial_main.zip to WordPress. It is the wrapper, not the theme, and WordPress will reject it with "The package could not be installed". Unzip it first and upload industrial.zip.

What your site needs

Everything below is ordinary shared hosting. The numbers matter most during a demo import, which creates several hundred posts and pages and copies every image the demo uses into your media library in one run.

What Recommended Why
WordPress 6.0 or newer The theme is built and tested against it
PHP 8.0 or newer Older versions no longer receive security fixes
Memory limit 256M Resizing a full-width hero image is the high-water mark of an import
Upload max filesize 32M Demo media and larger images
Max post size 32M Keep it at or above the upload limit
Max execution time 600 seconds An import runs for minutes; a shorter limit kills it part way
Max input vars 3000 Below this, saving a long builder page silently drops part of the layout
ZipArchive Required Without it the theme cannot unpack demo content or install plugins
mysqli Required Database access
GD or Imagick Required Every thumbnail and crop is generated from your images
Uploads folder Writable The demo's media is saved into it
cURL Recommended Plugin downloads and licence checks; some hosts block the fallback
HTTPS Recommended Forms, logins and anything you sell

You do not have to check any of this by hand. Once the theme is active, Appearance → Theme Options → System Requirements prints your server's real values beside the ones above, and under every row that falls short it prints a sentence you can forward to your host unchanged. See What your server needs.

The setup wizard shows the same check as its second step, and the demo import screen repeats it as a warning.

How the theme, plugin and demos fit together

Three parts, and it is worth knowing which does what before you customise anything.

Industrial, the theme, is the design layer: the templates, the header and footer, the type scale, the colour options and the per-demo styling. It is what an update replaces, which is why your own code belongs in the child theme or in Custom CSS.

Anps Theme Plugin carries the working parts: the Portfolio and Team post types, all 87 Elementor widgets, all 32 WPBakery elements, the theme's own sidebar widgets, and the demo importer. It is required. With the theme active and the plugin missing you get a plain site and a notice telling you so.

The demo packs ship inside the theme. Each one is a real site that a designer built and exported: pages, media, menus, content, widgets and theme settings. Importing a pack reproduces that site here.

The plugin is not optional. Post types, widgets, elements and the demo importer are all in it. Install it before you do anything else.

How to read this manual

Read Installing the theme and The setup wizard now, then The twelve demos and Importing a demo — in that order, because your choice of page builder decides which demos you can use, and an import is easiest to get right the first time.

After that the manual is reference, not a course. Go to the chapter for the job in front of you:

Admin paths are written as arrow chains, like Appearance → Theme Options → Header Options. Anything in code type is a slug, a setting name or a file path — something you type or search for, not something you translate.

Installing the theme

Two files go on to the site: the theme, industrial.zip, and the plugin, plugins/anps_theme_plugin.zip. Install the theme first, activate it, and let the setup wizard take care of the plugin — that is the shortest correct route. The rest of this chapter is for the cases where you would rather do it by hand, or where the upload is refused.

Before you upload anything, confirm the download is unzipped and you can see industrial.zip as a file of its own. See Before you start for what is in the package.

Installing the theme from the WordPress admin

The one requirement is that the host's upload limit is larger than industrial.zip. Check the file's size on your computer against the limit printed on the upload screen; if it is too small, use the FTP route below.

  1. Go to Appearance → Themes → Add New → Upload Theme.
  2. Choose industrial.zip and select Install Now.
  3. When the upload finishes, select Activate.

Activation is the moment the theme starts running, and it is what opens the wizard. Nothing is written to your content.

Do not upload industrial_main.zip. That file is the wrapper around the whole purchase: theme, plugin, child theme, licence text and this manual. WordPress inspects it, finds no style.css at the top level and answers "The package could not be installed". Unzip it on your computer and upload the industrial.zip inside it.

If the upload fails before it finishes, the limit being hit is almost always upload_max_filesize or post_max_size. Both are listed in What your server needs, and the FTP route below avoids them entirely.

Installing the theme over FTP

Use this when the admin upload is refused, or when you already work over FTP.

  1. Unzip industrial.zip on your computer. You get a folder named industrial.
  2. Connect to the site with an FTP or SFTP client, or open the host's file manager.
  3. Upload the whole industrial folder into wp-content/themes/, so the theme's own style.css ends up at wp-content/themes/industrial/style.css.
  4. Go to Appearance → Themes and activate Industrial.

Keep the folder named industrial. The child theme names its parent as Template: industrial, and the licence and update check reads the parent theme's folder. Renaming the folder detaches the child theme and stops the update check from recognising the site.

Upload the folder in full. A part-uploaded theme usually shows as a broken admin screen rather than a clear error, because PHP files are missing rather than malformed.

Installing the Anps Theme Plugin

The Anps Theme Plugin carries the Portfolio and Team post types, every Elementor widget and WPBakery element, the theme's own sidebar widgets, and the demo importer. Without it the theme renders plain pages and no demo can be imported. It is not optional.

The wizard's Plugins step installs it for you. To do it by hand:

  1. Go to Plugins → Add New → Upload Plugin.
  2. Choose plugins/anps_theme_plugin.zip from your download.
  3. Select Install Now, then Activate Plugin.

The plugin is versioned separately from the theme and is updated alongside it — see Licence, updates and support.

The required-plugins notice

Once the theme is active, WordPress shows a notice across the admin listing the plugins the theme registers. It reads "This theme requires the following plugins" for the two page builders, and "This theme recommends the following plugins" for the rest, with a link to Appearance → Install Plugins. That screen installs and activates in one action.

The required plugins notice lists everything the theme uses and installs them in one pass.
The required plugins notice lists everything the theme uses and installs them in one pass.

The theme registers nine plugins:

Plugin Marked required What it is for
WPBakery Page Builder Yes The legacy builder; needed only if you choose it
Elementor Page Builder Yes The primary builder
Anps Theme Plugin No, but the theme needs it Post types, widgets, elements, demo importer
Slider Revolution No The sliders in the demo home pages
Font Awesome No The icon set the icon pickers offer
Contact form 7 No The demo contact forms
WooCommerce No Shop, products, cart and checkout
Newsletter No The newsletter sign-up used by some demos
Envato Market No A marketplace plugin the list still carries. The theme does not use it: updates and licensing run through ANPS Club

The notice asks for both builders; you want one. Appearance → Install Plugins marks WPBakery and Elementor as required because the theme ships layouts for both. Running both at once is not supported, and the demo importer refuses to run while two builders are active. The wizard's Plugins step leaves out the builder you did not pick, which is why it is the easier route. See The setup wizard.

Anps Theme Plugin is not flagged required on that screen, but the theme depends on it. Install it whatever else you skip.

What happens when you activate the theme

Activation sets a flag that lasts 30 minutes. The next ordinary admin page you open sends you once to Appearance → Setup Wizard, and the flag is cleared whether or not you go through the wizard.

That expiry is deliberate. If you activate the theme and then close the tab, the wizard does not lie in wait: the flag lapses, and opening wp-admin two days later lands you on the dashboard as usual. The redirect is also skipped when you activate several themes at once, and for users who cannot install plugins.

Nothing else happens on activation. No content is created, no option is overwritten, and no demo is imported until you ask for one in Importing a demo.

Using the child theme instead

industrial-child.zip is a child theme: a style.css and a functions.php that borrow everything from Industrial and give you somewhere safe to put your own code. Install it exactly as you installed the parent — Appearance → Themes → Add New → Upload Theme — and activate the child instead of the parent.

The parent must stay installed. It is where the templates, the framework and the Theme Options panel live; the child only overrides.

With the child active, everything still works as documented: Theme Options, the setup wizard, the demo importer, the licence screen and all the builder elements, because all of it is in the parent theme and the plugin.

It matters because a theme update replaces the entire industrial folder. Anything you edited inside it — a template, a stylesheet, a function — is gone after the update. The same edit in the child theme survives every update. If you are only changing colours, fonts or a few rules, you do not need the child theme at all: use Appearance → Theme Options → Custom CSS. See The child theme and custom code.

Switching to the child counts as activating a theme. If you have not finished or dismissed the wizard yet, it prompts once more. Once the wizard is complete or you have dismissed it, switching changes nothing.

If the child theme is offered as "Broken" with a missing-parent message, the parent is either not installed or its folder is not named industrial. Troubleshooting covers the rest of the install-time failures.

The setup wizard

The wizard does the four things that have to happen before you have a working site, in the order they have to happen in: check the server, choose a page builder, install the plugins, import a demo. It is the quickest way through a new install, and the best diagnostic you have, because each step reports what actually happened rather than assuming it worked. Nothing in it is compulsory: every step can be skipped, and everything it does can also be done by hand from Theme Options.

When the wizard opens, and when it stops

Activating the theme sets a flag that lives for 30 minutes. The next ordinary admin page you open takes you to the wizard once, and the flag is cleared at that point either way. Once the wizard has been finished or dismissed, no flag is set again, so a later theme switch does not reopen it.

If you activate the theme and walk away, the flag lapses. The wizard does not ambush you on the dashboard days later, and it never interrupts a bulk theme activation or a user who is not allowed to install plugins.

Selecting I'll set it up myself on the first step ends it there and then: the wizard is marked complete, it stops prompting, and the Finish step confirms that it will not open again.

Reopening the wizard later

The wizard is a normal admin screen and stays available at Appearance → Setup Wizard (themes.php?page=anps-setup), and from the Setup Wizard link at the top of the Theme Options sidebar.

It remembers the furthest step you reached, so returning drops you back where you got to rather than at the beginning. The step rail across the top links back to steps you have already seen; steps ahead of you are not links, because jumping forward would skip the work a later step depends on. Going back to an earlier step does not rewind your progress.

Other plugins' admin banners are suppressed on this screen only, so what you read here is the theme's own reporting and nothing else.

Wizard step 1: Welcome

A plain statement of what the wizard is about to do, in order: check the server and say what to ask your host for, ask which page builder you want and explain what that rules in and out, install the plugins one at a time and report each one, and import a demo if you want a finished site to start from. Two actions: Start setup, and I'll set it up myself.

The wizard opens on the welcome step and tells you what it is about to do.
The wizard opens on the welcome step and tells you what it is about to do.

Wizard step 2: Server

This is the same measurement as Appearance → Theme Options → System Requirements, presented as a verdict instead of a table. Three outcomes:

The server step reports only the checks that fall short, each with the value to ask your host for.
The server step reports only the checks that fall short, each with the value to ask your host for.

Verdict What it means
Pass The server can run the theme and complete a demo import
Warning It will work, but some limits are below what the theme is built against
Fail At least one value is below the floor where something genuinely breaks

When everything passes you get one line of confirmation plus the summary of your PHP version, memory limit, execution time and ZipArchive availability. When it does not, the step lists only the rows that need attention — failures first — with your value, the needed value, and a sentence written to be forwarded to your host unchanged.

Two things to know about the buttons. Continue anyway is real: a warning is not a wall, and plenty of sites on lower limits import a demo without trouble. The risk is stated so that if the import does stop part way through, you already know why. Re-run the check measures again rather than re-reading a stored verdict, so after your host changes something the new values appear immediately.

The link under the table opens the System Requirements screen, which lists every check including the ones that passed. Full detail on each row, and on what breaks when it is too low, is in What your server needs.

Wizard step 3: Page builder

Elementor or WPBakery — one of them, not both.

The page builder step states the Demo 11 and Demo 12 consequence before anything is installed.
The page builder step states the Demo 11 and Demo 12 consequence before anything is installed.

The consequence is printed on the step before anything is installed: Demo 11 and Demo 12 are Elementor layouts and cannot be imported while WPBakery is active. Demos 1 to 10 work with either builder. Running two builders at once is not supported, and the demo importer refuses to run at all in that state.

Choice What you get
Elementor All twelve demos, and every element the theme adds from here on
WPBakery Page Builder Demos 1 to 10; choose it if you know WPBakery or are moving an existing site across

Elementor is pre-selected on a fresh install. If one builder is already active it is pre-selected instead and marked Active, and selecting it does not reinstall anything.

Use this builder records the choice and installs that builder if it is not already installed. If the install fails, the wizard does not trap you on this step: it carries the reason forward and shows it once at the top of the Plugins step, where you can try again.

Decide later moves on without recording a choice and without installing anything. The Plugins step then offers both builders, and the Finish step says no builder was chosen.

Changing builder later is not a setting. Pages are stored in the format of the builder that made them. Switching builders on a site that already has content leaves the old pages unrenderable by the new builder, and the demo pages would have to be imported again. Decide here.

Wizard step 4: Plugins

A list of every plugin the theme registers, minus the builder you did not choose. Each row shows its real state:

The plugins step: tick what to install. Required plugins are ticked and cannot be cleared.
The plugins step: tick what to install. Required plugins are ticked and cannot be cleared.

Row state Meaning Checkbox
Not installed Not present on the site Ticked, and you can untick it
Installed, not active Present but switched off Ticked, and you can untick it
Active Nothing to do None; the row shows a tick instead

Rows the theme marks as required — the page builder — are ticked and locked, so the tick is a statement rather than a suggestion. Everything else is ticked by default and is yours to untick. Already-active plugins are never reinstalled.

The button counts what you selected, so it reads "Install and activate 3 plugins" rather than something vague, and is disabled with "Nothing selected" if you clear the list. What happens when you press it:

When the queue finishes, the wizard moves to the Demo content step, and every row has ended in a definite state rather than still spinning.

Continue without installing skips the step. If you skip it, install the Anps Theme Plugin from Plugins → Add New → Upload Plugin before importing anything — the importer is in that plugin.

If the theme's plugin list cannot be read at all — usually another plugin interfering with the installer — the step says so and points you at Appearance → Install Plugins instead.

Wizard step 5: Demo content

A grid of the twelve demos, each with a Preview link to the live demo site and an Import button. What each demo looks like is covered in The twelve demos.

The demo step shows all twelve demos, with any your current builder cannot use marked unavailable.
The demo step shows all twelve demos, with any your current builder cannot use marked unavailable.

A demo your current builder cannot handle is greyed out with its button disabled, and the reason is printed on the card: activate Elementor, deactivate WPBakery, or both. That is the same rule the importer itself applies, so the grid never offers an import that would be refused.

Three warnings can appear above the grid, and each is worth reading before you press anything:

A demo has already been imported on this site. Importing again does not replace the first import. It adds a second copy of every page, post and menu. Delete the existing content first if that is not what you want.

A previous import did not finish. The site may be partly imported. Check its content before importing again — importing on top of a partial import leaves duplicates behind.

This server may not finish an import. The server check found limits below what an import needs. It may still work; if it stops part way, raise the limits with your host and try again.

An import brings in the demo's pages, posts, menus, widgets and theme settings, and takes a few minutes. The overlay says so and asks you to keep the tab open. When it finishes you land on the Finish step; if the importer refuses the demo, you come back to this step with the reason, so you can pick another one.

Continue without importing goes straight to Finish. You can import later from Appearance → Theme Options → Dummy Content, which is documented in Importing a demo.

Wizard step 6: Finish

A short account of what was done: which builder was chosen or that none was, and whether demo content is in place. A successful import prints the importer's own log here, which is the thing to copy into a support request if anything looks wrong.

The final step summarises what was done and links to the licence screen.
The final step summarises what was done and links to the licence screen.

Then four links: View your site, to see what you actually have; Theme Options, for colours, typography, header, footer and layout; ANPS Club Licence, to enter your key; and the online Documentation.

If no demo was imported, the step also links to Theme Options → Dummy Content. If you chose to set the theme up yourself, it confirms the wizard will not open again but stays under Appearance. Enter your licence key next — it is what turns on automatic updates. See Licence, updates and support.

The wizard's side column

Every step carries the same side column. Its lower card, Need a hand?, holds three links: the online documentation, ANPS Club support, and the System Requirements screen.

Hosting recommendations in the wizard

Above that card you may see one or more partner cards — hosting and service recommendations. They are worth understanding precisely:

The side column carries the help links and, unless you have turned them off, the hosting recommendations.
The side column carries the help links and, unless you have turned them off, the hosting recommendations.

What your server needs

The theme measures your server in thirteen places and prints the results at Appearance → Theme Options → System Requirements. The setup wizard runs the same measurement as its second step, and the Dummy Content screen repeats it as a warning before an import.

All three read one measurement, so they cannot disagree with each other about whether this server can import a demo.

Every number below is an ordinary shared-hosting setting. None of it requires a bigger plan or a different host in most cases — these are values a support agent changes in a minute or two, once asked precisely.

The thirteen checks

The Recommended column is what the theme is built and tested against. The last column is what actually goes wrong on a site below it.

The System Requirements screen prints your own values beside the ones the theme wants.
The System Requirements screen prints your own values beside the ones the theme wants.

Check Recommended What breaks when it is lower
PHP version 8.0 Older branches receive no security fixes, and some theme features do not run at all
WordPress version 6.0 The theme is tested against 6.0 and newer; below that, blocks, editor screens and core functions the theme calls may be missing
Memory limit 256M A demo import stops part way through. Resizing a full-width hero image is the high-water mark of a run, so the failure lands mid-import with the site half populated
Upload max filesize 32M Demo media and larger images fail to upload; the theme zip itself may be refused by Add New → Upload Theme
Max post size 32M A large upload or a long builder page is rejected outright. Keep it at or above the upload limit, or the upload limit is the one that does not apply
Max execution time 600 An import takes minutes; a shorter limit kills the request part way and leaves the site half imported, with no error page to explain it
Max input vars 3000 Saving a long builder page silently drops part of the layout — no warning, and sections missing after the save
ZipArchive Available The theme cannot unpack demo content or install plugins. The wizard's Plugins step and every import fail
MySQLi Available No database access; WordPress does not run without the mysqli extension
cURL Available Plugin downloads and licence checks fall back to a slower transport that some hosts block entirely, so updates appear to be unavailable
Image library (GD or Imagick) GD or Imagick WordPress cannot create the image sizes the theme uses, so every thumbnail renders at full size: a grid of 300-pixel tiles each downloading a 2000-pixel photograph
Uploads directory writable Writable No demo media and no uploaded image can be saved. An import runs and produces content with no pictures
HTTPS Enabled Browsers mark the site as not secure, and some payment and font services refuse to load

Either image library is enough; the theme needs one working resizer, not both. mysqli and ZipArchive are pass-or-fail: an extension is present or it is not.

Each row is graded against two thresholds, not one. The Recommended value is the upper one; below it there is a lower floor where something genuinely breaks. That is why a row can be marked as needing attention without being fatal.

Grade Meaning
Pass At or above the recommended value
Warning Below recommended, at or above the floor. The site works; an import may not finish
Fail Below the floor. Expect the failure described in the table above

The floors are lower than most people assume:

Check Recommended Fails below
PHP version 8.0 7.4
WordPress version 6.0 5.6
Memory limit 256M 128M
Upload max filesize 32M 8M
Max post size 32M 8M
Max execution time 600 60
Max input vars 3000 1000

A missing required extension — ZipArchive, mysqli, or both image libraries — is a failure with no middle ground. A missing cURL and a site not served over HTTPS are recommendations, so they show as warnings rather than failures.

A warning is not a reason to stop. Plenty of sites on 128M of memory import a demo without trouble. The point of the grade is that if the import does stop half way, you know the answer before you open a support ticket.

The WP_MEMORY_LIMIT trap

The most common wasted afternoon on this screen: adding

define( 'WP_MEMORY_LIMIT', '256M' );

to wp-config.php, reloading System Requirements, and finding the memory row unchanged.

WP_MEMORY_LIMIT asks PHP to raise the limit for this request. PHP can only grant it up to the ceiling the host has set. If the host caps memory_limit at 128M, the constant achieves nothing at all, and the row keeps reporting 128M because that is genuinely all the memory the import can use.

The same applies to ini_set() calls in a plugin or .htaccess, and to upload_max_filesize and post_max_size, which PHP will not let a script raise at runtime at all.

The memory row therefore has to be fixed on the server. Ask your host to raise memory_limit to 256M — the row's own hint says exactly that, in words you can forward.

Why max_input_vars has its own row

max_input_vars caps how many separate fields PHP accepts in one request. It does not reject a request that exceeds the cap — it takes the fields up to the limit and silently discards the rest.

WPBakery posts one input per shortcode attribute. A long page with thirty sections, each with a background, spacing, colour and typography setting, can pass a few thousand inputs in one save. Past the limit, the tail of the page is dropped before PHP hands the request to WordPress, so the page saves successfully and comes back missing its last sections. No error is raised anywhere, in any log, because as far as PHP is concerned nothing went wrong.

That failure is undiagnosable from the symptom, which is why the check has its own row rather than being folded into a general "PHP settings" note. If a long page keeps losing its bottom half on save, this is the row to read.

Elementor stores its layout as one JSON field and is not exposed to this in the same way, but the limit is worth raising regardless: WordPress menus and widget screens hit it too, on sites with large menus.

Unlimited and unknown values

Some servers report no limit rather than a number, and the screen handles both honestly:

Value on your server How the row reads
memory_limit, upload_max_filesize or post_max_size of -1 Unlimited, and the row passes
max_execution_time of 0 Unlimited, and the row passes — 0 genuinely means no time limit
A negative max_execution_time or max_input_vars Unlimited, and the row passes
max_input_vars that cannot be read Unknown, and the row passes rather than claiming a value nobody measured

The distinction in the last two rows matters. For execution time, 0 means "no limit" and is reported as such. For max_input_vars there is no meaningful zero, so a 0 means the value could not be read — and a value that was never measured is not reported as a failure.

What to send your host

Two things on the screen are written to be copied out.

The hint under a row that is not passing. Every non-passing row prints one sentence naming the directive, the value to set it to, and what it affects. It is written to be forwarded to a hosting support agent unchanged, without editing and without explaining the theme. The memory hint also states that WP_MEMORY_LIMIT cannot raise the limit above the host's ceiling, which saves the round trip where support suggests exactly that.

The summary line under the table. One line naming your PHP version, memory limit, maximum execution time and whether ZipArchive is available — the four values every support conversation starts by asking for. Paste it into a support request and the first reply can be an answer rather than a question. See Licence, updates and support for what else to include.

The same summary appears on the wizard's Server step, so you can grab it before you have imported anything.

If a value is below what an import needs and you cannot get it raised, Importing a demo explains what a part-finished import leaves behind and how to clear it, and Troubleshooting covers the symptoms these limits produce once the site is live.

The twelve demos

Industrial ships twelve complete starter sites. Each one is a real site that was built and exported: its pages, its posts, its portfolio and team entries, its menus, its widgets and its theme settings. Importing one reproduces that site on your install, and you then replace its words and pictures with yours.

Your page builder decides which demos you can import, so read the builder column before you fall in love with a layout.

The demo catalogue

Twelve demos, in the order the theme lists them. The preview links open the demo as a live site.

Demo Preview Builder What it is
Demo 1 demo-1 Elementor or WPBakery Industrial and construction layout; full-width menu header, theme default colours, a "Get a quote" button in the header
Demo 2 demo-2 Elementor or WPBakery Same site with a classic header and an orange accent colour
Demo 3 demo-3 Elementor or WPBakery Classic header, transparent over the home slider, blue accent
Demo 4 demo-4 Elementor or WPBakery Full-width menu header, transparent on the front page, blue accent
Demo 5 demo-5 Elementor or WPBakery Vertical side menu instead of a horizontal header, blue accent
Demo 6 demo-6 Elementor or WPBakery Classic header, solid on the front page, blue accent
Demo 7 demo-7 Elementor or WPBakery Full-width menu header, transparent on the front page, blue accent
Demo 8 demo-8 Elementor or WPBakery Classic header, blue accent, its own front-page composition
Demo 9 demo-9 Elementor or WPBakery Full-width menu header, yellow accent
Demo 10 demo-10 Elementor or WPBakery Classic header, yellow accent
Demo 11 demo11e Elementor only Industrial automation and robotics supplier: sectors, solutions, case studies and an insights blog
Demo 12 demo12 Elementor only Solar EPC contractor: services, built projects, a savings calculator and its own header and banner design

Preview before you import, not after. An import takes minutes and adds a site's worth of content. Open the preview links first and pick one demo. Importing a second demo to compare them leaves you with two of everything — see Importing a demo.

What demos 1 to 10 have in common

Demos 1 to 10 are ten designs over one content set. Each of them brings the same 27 pages — About us, Services, Projects, Gallery, Contact us, a set of industry pages (Oil, Chemical, CNC, Manufacturing, Energy engineering, Material engineering), an FAQ, element demonstration pages and the WooCommerce pages — together with nine portfolio projects, three team members, sixteen products, six posts, one contact form and a Slider Revolution slider.

What differs between them is the front page design, the header type, the accent colour and the theme options that go with them. So the choice between Demo 3 and Demo 7 is a design choice, not a content choice: you can change the header type and the colours afterwards from Theme Options without reimporting.

If you cannot decide, import the one whose front page is closest to what you want and treat the rest as settings.

Demo 11, the automation supplier

Demo 11 is a newer, sparser design for an industrial automation and robotics supplier. It brings a front page built from a hero slider, a trust strip, a KPI strip, sector and solution sections and an insights feed; a Solutions page; an About page; a Contact page with locations and contact channels; a Case Studies page; four portfolio entries used as sector case studies — Automotive, Electronics, Logistics and Precision Manufacturing — and five blog posts.

Its sections come from 31 Elementor widgets of its own, named demo11_* in the Industrial Elements category. They are ordinary widgets: you can drag them into any Elementor page, not only the imported ones.

Demo 11 sets the Demo 11 portfolio single style and the Style 2 blog single style, a blue accent colour and a fixed header height. It does not ship a Slider Revolution slider; its hero is an Elementor widget.

Demo 12, the solar contractor

Demo 12 is a solar EPC contractor — engineering, procurement and construction. It brings a front page with a full-bleed hero slider, a scrolling marquee, an expanding services explorer, featured projects, a savings calculator, a track record band and testimonials; Services, Projects, About, News and Contact pages; nine portfolio entries written as delivered solar plants; and eight posts. Its 24 demo12_* Elementor widgets are also in Industrial Elements and usable anywhere.

Demo 12 differs from the other eleven in three ways worth knowing before you import it:

Demo 12 does not ship a Slider Revolution slider either.

Which builder each demo needs

Demos 1 to 10 exist in two versions inside the theme, one for each builder. The importer picks the version that matches the builder you have active, so the same demo number gives you an Elementor site or a WPBakery site depending on which plugin is running.

Demos 11 and 12 exist in one version only. The rule the importer enforces is strict:

Demo 11 and Demo 12 need Elementor active and WPBakery inactive. Not one or the other — both conditions. With WPBakery still active the importer refuses them even if Elementor is installed and running.

The demo screen shows the reason under any demo you cannot pick: "Activate Elementor to import this demo", "Deactivate WPBakery to import this demo", or both.

With two page builders active the importer does nothing at all. It refuses every demo, not only 11 and 12, with "Please activate only one page builder". Both builders are registered as required plugins, so a site that installed everything the theme offered has both — deactivate the one you are not using before you import.

Choosing a demo you can live with

What you can change afterwards, without reimporting:

What you cannot change afterwards:

Elementor is the builder to choose for a new site. WPBakery is supported for sites already built on it, and Demos 11 and 12 — the two newest designs — are Elementor-only. See Building pages with Elementor and, if you are working on an existing WPBakery site, Building pages with WPBakery.

The setup wizard asks you to choose a builder before it shows you the demos, for this reason. When you have chosen, go to Importing a demo.

Importing a demo

Importing a demo is the fastest way to a finished-looking site, and it is the single most consequential thing you will do in this theme. Read this chapter before you press Import, not after.

What an import does to your site

An import runs for minutes — it downloads every image the demo uses, so it is as slow as your server and your connection make it. Do not close the tab and do not refresh.

It adds a whole site's worth of content:

What arrives Where it lands
Pages Pages, including the demo's front page, its inner pages and the WooCommerce pages
Posts and categories Posts
Portfolio projects Portfolio
Team members Team (demos 1 to 10)
Products Products, when WooCommerce is active
Media Your media library, downloaded from the demo server
Menus Appearance → Menus
Elementor templates Templates → Saved Templates, where a demo uses them
Contact forms Contact, when Contact Form 7 is active
Slider Revolution sliders Slider Revolution, for the demos that ship one

It also overwrites settings you may have set already:

What is overwritten To what
Theme options The demo's own colours, fonts, header, footer and layout settings
Every widget area Emptied first, then filled with the demo's widgets
Primary menu assignment The demo's menu
Permalink structure /%postname%/, and the rules are flushed
Front page and posts page The demo's Home page, and its News or Blog page
Feed setting Feeds switched to excerpts
Blog post meta options Category and author meta on posts cleared

An import permanently deletes your WooCommerce pages. Before it copies anything in, the importer deletes the pages WooCommerce has registered as Shop, Cart, Checkout, My account and Terms. They are deleted outright, not put in the trash, and the demo's own versions take their place. If your shop pages carry content you need, an import is not a safe operation on that site.

Apart from those WooCommerce pages, the import does not remove your existing pages and posts. That is the trap:

A second import leaves you with two of everything. Importing again does not replace the first import. You get a second Home page, a second set of inner pages, a second menu and a second copy of the media. Delete the first import's content before you import again, or start from a clean install.

Before you import a demo

  1. Install the plugins first. The demo's pages are made of builder elements and plugin widgets. Import with the plugins missing and you get pages of raw shortcode text or unstyled blocks. See The setup wizard for the plugin step.
  2. Have exactly one page builder active. Elementor, or WPBakery, never both. See The twelve demos.
  3. Back up if the site has anything on it. A database export plus wp-content/uploads is enough. There is no undo and no "remove demo content" button.
  4. Check the server. An import is the heaviest thing this theme ever asks of your host: hundreds of posts and a few hundred image downloads and resizes in one request. Read What your server needs and fix the memory limit and the execution time before you start, not after an import dies half way.
  5. Import on a clean install if you can. It is faster than cleaning up.

The two places you can import from

The same importer, reached two ways:

Where Path
The setup wizard's demo step Appearance → Setup Wizard, step 5
The Theme Options screen Appearance → Theme Options → Dummy Content

Both read the same catalogue of twelve demos and apply the same rules, so a demo you cannot select in one is not selectable in the other. Each demo has a Preview link that opens the live demo in a new tab and an Import button that starts the run.

The wizard sends you to its final step when the import succeeds and back to the demo step when it is refused, so you can pick another demo. The Dummy Content screen reports the outcome in place.

Warnings on the import screen

Three warnings can appear above the demo grid. None of them is decoration.

"A demo has already been imported on this site." The theme recorded a finished import. Importing again adds a second copy of everything rather than replacing the first. This one appears in the wizard.

"A demo import was started and did not finish." The previous run was killed part way through — usually by the execution time limit or by exhausted memory. Your site is now partly imported, and importing again on top of a partial import leaves duplicates behind. Before you retry:

"One or more issues with server found." The server check did not pass. The import may still finish; if it stops part way, this is why. It is the same check as What your server needs.

When the importer refuses

The importer stops before touching anything and prints its own reason. It refuses in these cases:

Reason What to do
Two page builders active Deactivate the builder you are not using, then import
Demo 11 or Demo 12 without Elementor Activate Elementor
Demo 11 or Demo 12 with WPBakery active Deactivate WPBakery
No supported page builder active Activate Elementor, or WPBakery for a legacy site
A demo file is missing from the theme Re-upload the theme; the download is incomplete

The reason shown is the importer's own message, captured while the import ran and carried over to the screen you land on. So a refusal never looks like a silent failure: if you get no message and the demo did not arrive, treat it as an interrupted import rather than a refusal, and work through the interrupted list above.

One more message is worth recognising. If a page's Elementor layout data could not be read after the import, the screen names the affected pages and tells you not to open them in Elementor — Elementor would offer to convert them, and that replaces the layout for good. Send that message to support unchanged. Support is at club.anpsthemes.com/help; see also Troubleshooting.

After the import finishes

Check these four things straight away, in this order:

  1. The front page. Open the site. The importer sets the demo's Home page as the front page and its News or Blog page as the posts page. If you land on a list of posts instead, set them yourself at Settings → Reading.
  2. The menu. The importer assigns one imported menu to the Primary Navigation location. Demos with more than one menu may not get the one you expected. Check Appearance → Menus → Manage Locations.
  3. Permalinks. The importer sets /%postname%/ and flushes the rules. If an inner page or a portfolio item gives a 404, open Settings → Permalinks and press Save Changes without altering anything.
  4. The images. They were downloaded from the ANPS demo server during the import. If your host blocks outbound connections you will see broken images and an incomplete media library; that is a hosting issue, not a theme one.

The demo's photographs are not yours to keep. They are licensed for the demo sites only and are placeholders on your install. Replace them with your own images before the site goes public — see Going live, which also covers the logo and favicon, which after an import still point at the ANPS demo server.

With the content in, the rest of the manual is reference. If something looks broken rather than merely unfinished, go to Troubleshooting.

Theme Options, screen by screen

Everything the theme lets you set without touching code lives in one panel. This chapter is the map: what each screen is for, how saving works, and the detail on the screens that do not get a chapter of their own.

Where Theme Options lives

The panel is at Appearance → Theme Options. Its own sidebar lists every screen, and the heading at the top of that sidebar shows the theme version you are running, which is the number to quote when you ask for support.

The Theme Options sidebar. The Setup Wizard link sits at the top.
The Theme Options sidebar. The Setup Wizard link sits at the top.

Opening the panel with no screen chosen lands you on Color Management. The first link in the sidebar is not a settings screen at all: it reopens the setup wizard.

Many of the same settings are also in Appearance → Customize → Theme options, where you see the result live before you save. The Customizer carries a subset, not the whole panel; where a setting exists in both, they read and write the same option, so it does not matter which one you use.

The sixteen Theme Options screens

Screen What it controls
Color Management Every colour in the theme, plus five starting schemes
Typography The three font roles and the font size of each element
Update Google Fonts Refetches the Google font list the pickers offer
Custom Fonts Uploads your own font files as a ZIP
Custom CSS A stylesheet of your own, loaded after the theme's
Page Layout Boxed or full width, background, default sidebars, headings, blog columns
Page Setup Home slider, 404 page, excerpt length, portfolio and team slugs, post meta
Header Options Header type, top bar, sticky behaviour, search icon, heading background
Footer Options Footer on or off, column counts, fixed footer, mobile columns
WooCommerce Cart icon, shop columns, products per page, product gallery behaviour
Logos & Media Every logo variant, favicon, home screen icon, text logo
Dummy Content Imports one of the twelve demos
Theme Update A page of links about updating; no settings
Import/Export Moves the theme's settings between sites
Import/Export Widgets Moves the contents of your widget areas between sites
System Requirements What your server provides against what the theme needs

Colours and fonts are covered in Colours and typography. Header Options and Footer Options are covered in Header, top bar and footer. Page Layout and Page Setup are covered in Page layout and page setup. Dummy Content is the same importer the wizard uses and is covered in Importing a demo. The rest are below.

How each screen saves

Each screen is its own form with its own Save button — the floating Save button at the top right and Save all changes at the foot of the page do the same thing. "All changes" means all changes on this screen. Nothing on any other screen is touched, and moving to another screen with unsaved changes discards them.

A screen can only write the settings it draws. That matters in one case you will meet: a screen that offers a choice your site does not currently use — a demo may have set the footer style or a font the picker has not fetched — shows that stored value as the selected option, so saving the screen writes it back unchanged rather than resetting it to the first item in the list.

Seven screens have no Save button because they hold no settings of their own: Update Google Fonts, Custom Fonts, Dummy Content, Theme Update, Import/Export, Import/Export Widgets and System Requirements. Each has its own action button instead, and pressing it acts at once.

The Update Google Fonts screen

The Google font list is a snapshot, stored on your site rather than read live. The theme fetches it when it is first activated, and the screen shows how many fonts are currently in it.

Press Update Google Fonts to fetch the current list. It takes a while on a slow connection, and it needs outbound HTTP from your server; if your host blocks that, the list stays as it was. Do this before you go hunting for a font you cannot find in Typography.

The Custom CSS editor

Appearance → Theme Options → Custom CSS is the right place for small visual changes: a colour the options do not expose, a margin you want tighter, a element you want hidden on one page.

The Custom CSS screen is a code editor with syntax highlighting, and its contents survive a theme update.
The Custom CSS screen is a code editor with syntax highlighting, and its contents survive a theme update.

It is a code editor, not a plain box — WordPress's own editor, with line numbers and syntax highlighting, so a missing brace is visible as you type. If you have turned syntax highlighting off in Users → Profile, you get a plain textarea and the CSS still saves the same way.

What you write here is stored by WordPress itself, in the same place as Appearance → Customize → Additional CSS, and the two show the same stylesheet. It is stored per active theme, so it survives theme updates — the update replaces the theme's files, not your CSS.

Switching to the child theme starts a fresh sheet. WordPress keeps custom CSS against whichever theme is active, so CSS written while the parent theme was active does not appear once you activate the child theme. Copy it across before you switch. For anything larger than a handful of rules, use the child theme's stylesheet instead — see The child theme and custom code.

WooCommerce display options

These settings do nothing until WooCommerce is installed and active. They cover how the theme presents the shop; WooCommerce's own settings, under WooCommerce → Settings, still handle payment, shipping and tax.

The theme's own WooCommerce display settings, separate from WooCommerce's.
The theme's own WooCommerce display settings, separate from WooCommerce's.

Setting Effect
Display shopping cart icon in header Never, only on shop pages, or on every page
How many products in column Three or four products per row on shop and category pages
Products per page How many products before pagination; 12 by default
Product image zoom Magnifies the main product image on hover
Product image lightbox Opens the product image full size when clicked
Product thumbnails slider Turns the gallery thumbnails into a slider instead of a grid

The colours of the cart's item counter are on the Color Management screen. See Shop and products for the rest of the shop.

Appearance → Theme Options → Logos & Media holds one primary logo and a set of variants. Only the primary logo is required: where a variant is empty, the primary logo is used instead.

Logos and Media holds every logo variant, the favicon and the text-based logo.
Logos and Media holds every logo variant, the favicon and the text-based logo.

Upload Where it appears
Logo Everywhere, unless a more specific logo below applies
Front page logo The front page only — useful when the front page has a transparent header over a dark hero
Sticky logo While the header is in its sticky state, after you scroll
Transparent Sticky logo The sticky state when the sticky header is transparent
Mobile logo Screens narrower than 1200px
Front page mobile logo The front page, on screens narrower than 1200px
Favicon The browser tab
Home screen icon When a visitor adds the site to an Android or iOS home screen; 152×152px

Logo, front page logo, sticky logo and transparent sticky logo each take a height in pixels; width follows the image's own proportions. Leave the height empty to let the image set its own size.

Text Based Logo is for sites with no logo image. Type the wording into the small editor — bold, italic, underline, colour and size are available — and pick the font it is set in. A text logo is used only when no logo image is uploaded for the case in hand.

Individual pages can override the logo, the sticky logo and the mobile logo; see Header, top bar and footer.

The Dummy Content screen

This is the demo importer, the same one the wizard's fifth step runs. It lists the twelve demos, disables the ones your current page builder rules out and prints the reason on the button, and warns you when the server check has not passed or when a previous import stopped part way through.

The Dummy Content screen offers the same twelve demos as the wizard, with the same availability rules.
The Dummy Content screen offers the same twelve demos as the wizard, with the same availability rules.

Importing twice does not replace the first import. It adds a second copy of every page, post, menu and widget. Read Importing a demo before you press the button.

What the Theme Update screen says

A page of links, with nothing to set. Updates for this theme are delivered through your ANPS Club licence: enter your key once at Appearance → ANPS Club Licence and updates then arrive in Dashboard → Updates like any other. See Licence, updates and support.

The text on this screen is out of date. It describes updating through the marketplace plugin and an API token, which is not how this theme is updated. Use the ANPS Club licence screen.

Exporting and importing theme settings

Appearance → Theme Options → Import/Export moves a configured theme from one site to another — a staging site to a live one, or your last build to your next.

The Export box holds the settings as JSON. It contains every option whose name begins with anps_: colours, fonts, sizes, header and footer configuration, layout, portfolio and team settings, logo URLs. The two cached font lists are left out deliberately, because the receiving site fetches its own. Export downloads the same content as anps-theme-options.json; Copy to clipboard takes it without a file.

It is settings only. Pages, posts, menus, images and widgets are not in it.

To import, paste the JSON into the Import box or choose a .json file, then press Import.

Importing overwrites your current settings and cannot be undone. Every setting present in the file replaces the one on this site. Settings not mentioned in the file are left alone, which means an import does not reset a site to a known state — it applies one configuration over another. Export your current settings first, so you have something to go back to.

Logo and background uploads travel as URLs. If the images do not exist at the same addresses on the new site, upload them there and reselect them.

Exporting and importing widgets

Widgets are separate, on Appearance → Theme Options → Import/Export Widgets, because they live in a different part of the database.

Export downloads anps-widgets.txt: every widget area on the site that has widgets in it, with each widget's settings. Widgets that point at a navigation menu are written down by the menu's slug rather than its internal number, so they still find the right menu on the other site — provided a menu with that slug exists there. Choose a file and press Import to bring them in.

A widget import adds; it does not replace. Widgets in the file are added to their widget areas alongside whatever is already there. Importing the same file twice gives you two of everything. Clear the widget areas first if you want the file's contents and nothing else.

Widget areas are created by other settings — the number of footer columns, for example, decides how many footer widget areas exist. Set those before you import, or the widgets have nowhere to land. See Widgets and sidebars.

Reading the System Requirements screen

Thirteen checks, with your server's current value beside the value the theme is built against. Under any row that falls short, the screen prints a sentence you can send to your host unchanged.

"Recommended" is what the theme is built and tested against, not a hard floor. A value below it is a warning, not necessarily a failure — but the limits that govern time, memory and upload size are the ones that decide whether a demo import finishes. What your server needs goes through each check and what to do about it.

This screen also carries the one line that turns hosting recommendations back on if you have switched them off everywhere.

Opening the wizard from Theme Options

The wizard is still there after first activation, at the top of the Theme Options sidebar or directly at Appearance → Setup Wizard. It does not open by itself once you have finished it or chosen "I'll set it up myself", and nothing in it is destructive to visit: every step can be skipped, and the demo step is the only one that changes your content. See The setup wizard.

Colours and typography

Two screens carry most of the theme's visual identity: Appearance → Theme Options → Color Management sets every colour, and Appearance → Theme Options → Typography sets the fonts and their sizes. Three smaller screens sit beside them — Update Google Fonts, Custom Fonts and Custom CSS.

If you imported a demo, both screens already hold that demo's values. Changing them changes the whole site at once, including pages built in Elementor or WPBakery, because the theme writes these colours and fonts into the stylesheet it generates on every page load.

Starting from a colour scheme

The top of the Color Management screen offers five schemes: Default, Orange, Green, Red and Yellow. Picking one fills the colour fields below with that scheme's values.

A scheme is a starting point, not a mode. Once applied, every colour is still yours to change, and the theme does not remember which scheme you came from.

A scheme replaces the colours below it. Any colour you have already tuned by hand is overwritten. The change is written when you save, so if you picked a scheme by accident, leave the screen without saving.

The main theme colours

These are the colours the whole site is built from.

Colour Management. Every colour here feeds the stylesheet the theme prints on the front end.
Colour Management. Every colour here feeds the stylesheet the theme prints on the front end.

Colour What it affects Default
Text color Body copy 898989
Primary color The theme's accent: icons, links, active states 3498db
Hovers color The hover state of anything using the primary colour 2a76a9
Headings color Headings in content, sidebars and breadcrumbs 000000
Heading divider color The short rule the theme draws under section headings 69cd72
Important background color The highlight background used on emphasised items 69cd72
Important text color The highlighted row in the footer opening-hours widget 32853a
Text on top of primary color Text and icons drawn over a primary-coloured background ffffff
Mobile address bar color The browser chrome colour on mobile, through the theme-color meta tag empty

Mobile address bar colour is the one with no visible effect on the page itself: it tints the browser's own bar on Android and iOS. Leave it empty and the theme omits the tag.

Header and menu colours

Colour What it affects Default
Menu text color Top-level menu items ffffff
Menu background color The bar the menu sits in 16242e
Page header background color The heading band under the header on inner pages f8f9f9
Page title color The page title in that band 4e4e4e
Top bar text color Text and icons in the top bar 8c8c8c
Top bar background color The top bar itself 16242e
Submenu background color Drop-down and mega menu panels ffffff
Submenu text color Items inside those panels 8c8c8c
Submenu text hover color Those items under the pointer fff
Submenu divider color The rule between submenu items ececec
Shopping cart item number background color The counter bubble on the cart icon 3daaf3
Shopping cart item number text color The figure inside that bubble 2f4d60

The Header Options screen carries a second, smaller set of colour fields that apply to one header type or to the front page only. Those are described in Header, top bar and footer; where both are set, the Header Options value wins for the case it covers.

Colour What it affects Default
Footer background color The main footer band 171717
Footer text color Text in footer widgets 7f7f7f
Footer border color Rules and separators inside the footer 2e2e2e
Footer heading text color Widget titles in the footer ffffff
Copyright footer text color The narrow band under the footer 9C9C9C
Copyright footer background color That band's background empty

Leaving the copyright background empty lets the footer background show through, which is what most of the demos do.

Button colours

The theme draws five button styles, and the screen shows a live example of each above its colours.

Button Colours you can set
Normal button Background, text, hover background, hover text
Button with gradient Background, text, hover background, hover text
Dark button Background, text, hover background, hover text
Light button Background, text, hover background, hover text
Button minimal Text and hover text only — it has no background

Which style a given button uses is chosen in the element that draws it, in Elementor or WPBakery, not here. These settings decide what each style looks like everywhere it is used.

How colours are stored and entered

Every colour field uses WordPress's own colour picker. Press Select Color to open it, drag to a colour, or type a hex value into the field it reveals.

Colours are stored without a leading #3498db, not #3498db. If you paste a value with a hash, the theme strips it. Three-digit shorthand such as fff is accepted and stored as you typed it. A value that is not a valid hex colour is ignored on save and the previous colour is kept, so if a colour does not change after saving, check what you pasted.

Editing colours with a live preview

Most of these colours are also in Appearance → Customize → Theme options, under Main theme colors and Button colors, where the site redraws as you drag. They are the same settings under different controls: change one in the Customizer and Color Management shows the new value, and the reverse.

Two things on the Color Management screen are not in the Customizer: the five predefined schemes, and the mobile address bar colour. Everything else has a Customizer equivalent.

The three font roles

The theme uses three fonts and assigns every piece of text to one of them.

Role Used for Demo value
Font type 1 Headings, page titles, buttons, tabs, prices, filter controls Montserrat
Font type 2 Body copy and everything not claimed by the other two PT Sans
Navigation font type The main menu and mega menu titles Montserrat

Set these three well and the rest follows. There is no per-element font setting; anything finer belongs in Custom CSS or the child theme.

The logo has a fourth font of its own, but only when you use a text logo rather than an image — it is on the Logos & Media screen, described in Theme Options, screen by screen.

Font sizes per element

Sizes are in pixels, and every field on the lower half of the Typography screen sets one.

Typography sets the three font roles and the size of each element that uses them.
Typography sets the three font roles and the size of each element that uses them.

Field Applies to Default
Body font size Body copy, and the base size other text is measured against 14
Menu font size Top-level menu items 13
Submenu font size Drop-down and mega menu items 12
Top bar font size Everything in the top bar 12
Content heading 1 to 5 h1 to h5 inside page and post content 31, 24, 21, 18, 16
Page heading 1 font size The page title in the heading band 36
Single blog page heading 1 font size The post title on a single post 36
Footer font size Footer widget text 14
Copyright footer font size The copyright band 14

The same sizes appear in Appearance → Customize → Theme options → Typography, where you can watch them change. The font families are not in the Customizer — those are only on the Typography screen.

Choosing a font in the picker

Each of the three font fields is a search box, not a long drop-down. Click it and type: the list filters as you type, keeping its group headings, and the arrow keys and Enter select without the mouse. The groups are System fonts, Custom fonts and Google fonts.

System fonts need nothing: they are already on the visitor's machine. A Google font is fetched from fonts.googleapis.com when the page loads. A custom font is served from your own site.

The Google font list and how to refresh it

The Google font list is a copy held on your site, not a live feed. The theme fetches it once, when it is first activated, which is why the picker already offers hundreds of fonts on a new site — unless your server could not reach Google at that moment, in which case the Google group is empty. Google keeps adding fonts; your copy does not follow.

If a font you know exists is missing from the picker, go to Appearance → Theme Options → Update Google Fonts and press Update Google Fonts. The screen reports how many fonts are in the list. The fetch needs outbound HTTP access from your server and takes a moment; if it does not change the count, your host is probably blocking the request.

Do this before you start choosing fonts, not after. A font that is not in the list cannot be selected.

Uploading your own font

Appearance → Theme Options → Custom Fonts takes a ZIP archive, by dragging it onto the drop area or clicking to choose a file. The upload runs in place, with a progress bar, and the list of installed fonts refreshes when it finishes.

Custom Fonts takes a ZIP by drag and drop and adds the family to every font picker.
Custom Fonts takes a ZIP by drag and drop and adds the family to every font picker.

What the ZIP must contain:

myfonts.zip
    - MyFont-Regular.ttf
    - MyFont-Regular.woff2
    - MyFont-Bold.ttf
    - MyFont-Bold.woff2

The archive is unpacked into the theme's fonts folder and the ZIP itself is deleted. Every file sharing a base name becomes one font family named after that base name, so the example above installs two families, MyFont-Regular and MyFont-Bold, and both appear under Custom fonts in the picker. The theme does not pair a regular with its bold: if you want bold text in a custom face, select the bold family where you want it, in Custom CSS.

The screen refuses an upload that is not a .zip, and refuses a file whose name already exists in the fonts folder — rename it or remove the old one. If the theme's fonts folder is not writable, the drop area is replaced by a red notice naming the folder; that is a file permission fix on the server.

Keep the ZIP. Uploaded fonts are stored inside the theme folder, and updating the theme replaces that folder. Re-upload your fonts after a theme update, and check the Typography screen still shows them.

When to stop using these screens

These two screens cover colour and type across the whole site. One element that needs a different colour, one heading that needs different spacing — that is Custom CSS, not a global setting. Anything beyond styling belongs in the child theme; see The child theme and custom code.

Page layout and page setup

Two screens hold the settings that decide how ordinary pages and posts are put together: Appearance → Theme Options → Page Layout for the shape of the page, and Appearance → Theme Options → Page Setup for the pieces of content attached to it — the slider, the 404 page, the portfolio and team slugs and the post meta.

Almost everything here is a default. Individual pages and posts can override the sidebars, the title band and the breadcrumbs from meta boxes on the editor screen; the last section of this chapter lists exactly what can be overridden and what cannot.

Boxed or full width

Full width is the default and is what every demo uses: the site fills the window. Ticking Boxed version narrows the site to a centred column with a shadow, and reveals the background settings below it, because a boxed site has visible space around it to fill.

Page Layout holds the site-wide defaults that a single page can override.
Page Layout holds the site-wide defaults that a single page can override.

Boxed is ignored while the vertical menu is in use — the vertical header assumes the full window.

Backgrounds and patterns behind a boxed site

With boxed on, you get ten thumbnails to pick from. Nine are tiling patterns that ship with the theme. The first, the blank one, means "I will supply my own background", and choosing it reveals three more fields:

Field What it does
Custom background type Stretched, Tiled or Custom color
Custom background image/pattern The image, for Stretched or Tiled
Background color The colour, for Custom color

Stretched scales one image to cover the window and holds it still as the page scrolls. Tiled repeats the image at its own size. Custom color ignores the image and paints the area in a flat colour.

These three do nothing unless the blank thumbnail is the one selected — pick a pattern and the pattern wins.

Shadows on elements

Display shadow on certain elements is on by default. It adds a soft drop shadow to cards, buttons and similar blocks across the site. Turning it off gives a flatter look in one move, without any CSS.

Default sidebars for pages and for posts

The screen has two identical groups: Page Sidebars, which sets the default for every page, and Post Sidebars, which sets the default for every post. Each offers a left sidebar and a right sidebar, chosen from the widget areas registered on your site.

You get a left sidebar, a right sidebar, both, or neither:

You want Set
Content only, full width Leave both on *** Select ***
A sidebar on the right Right sidebar only
A sidebar on the left Left sidebar only
Two sidebars Both

The list contains every registered widget area, including any you have created yourself. Widgets and sidebars covers creating them and filling them.

Each group has two checkboxes for small screens, where there is no room for a column beside the content:

Both can be overridden per page.

The page title band and breadcrumbs

Two checkboxes, both on by default:

The front page never shows either, whatever these say. The image behind the band is set on the Header Options screen — see Header, top bar and footer.

Comments on pages

Enable page comments decides whether pages can be commented on. It is on by default, and it is about pages only: comments on posts are WordPress's own setting, under Settings → Discussion and in each post's Discussion box.

Blog columns and the single post style

Blog Layout sets the default for the blog, category, tag and archive listings: one, two, three or four posts in a row. One column gives the classic full-width blog; three or four suit a news grid.

Single post style sets how one post is laid out. Style 1 and Style 2 are the two general treatments; Demo 12 (Solar) is the layout that demo imports and can be used on any site. More on both in News and the blog.

The WPBakery column class

Visual Composer → Default column class decides which Bootstrap tier WPBakery columns are rendered at. Medium is the default: the theme rewrites WPBakery's vc_col-sm-* classes to vc_col-md-* as the page is drawn, so a row of columns stacks on tablets instead of staying side by side. Small leaves WPBakery's own classes alone.

The change applies as pages are rendered, so it affects existing WPBakery pages as well as new ones.

This affects the WPBakery builder only. Elementor manages its own breakpoints — see Building pages with WPBakery if you are working on a WPBakery site.

The front page slider setting

Slider shortcode on the Page Setup screen takes a Slider Revolution slug — slider-1, for example — and the theme puts that slider at the top of the front page, above the content, without you editing the page. Leave it empty if your front page provides its own hero. See Slider Revolution.

Choosing the 404 page

404 error page picks one of your existing pages to show when a visitor asks for an address that does not exist. Build the page first — with whichever builder you use, so it can carry a search box, your best links and your own wording — then select it here.

Excerpt length in listings

Excerpt length is the number of words shown in listings when a post has no hand-written excerpt. The default is 40. The theme appends an ellipsis, not a "read more" link.

It applies wherever WordPress generates an excerpt, so changing it changes the blog, archives and search results together.

The scroll-to-top button

Add "scroll to top" button puts a small arrow in the bottom corner of every page that returns the visitor to the top. It is off by default. Worth turning on for long pages, which most builder-made front pages are.

Portfolio slug and single style

Portfolio slug is the segment in a project's address. Empty means /portfolio/; set it to projects and projects live at /projects/….

Page Setup covers the 404 page, excerpt length and the portfolio and team slugs.
Page Setup covers the 404 page, excerpt length and the portfolio and team slugs.

Change the slug before you launch, not after. Every project's address changes with it, and old links stop working unless you add redirects. After changing it, go to Settings → Permalinks and press Save — the new slug does not take effect until WordPress rebuilds its rules, and until it does every project returns a 404.

Portfolio single style picks the layout of one project's page: Style 1, Style 2, Style 3, Demo 11, or Demo 12 (Solar). The last two are the layouts those demos use and are available to any site. Portfolio shows what each does and covers the per-project fields — the project info table, the short text and the breadcrumb parent — which are meta boxes on the project, not settings here.

Team slug and single pages

Team slug works exactly like the portfolio slug, defaulting to /team/, and needs the same permalink save afterwards.

Team single page decides whether a team member has a page of their own. On, and a member's name links to their page. Off, and members appear only in the team elements you place on pages. See Team.

Post meta on archives and on single posts

The bottom of the Page Setup screen has two groups of checkboxes that decide which details are printed beside a post. All are on by default.

Meta On archives On a single post
Comments yes yes
Categories yes yes
Author yes yes
Date yes yes
Tags yes

The two groups are independent, which is the point: a tidy grid of posts with only the date, and the full attribution on the post itself, is a common and sensible combination.

What a single page can override

The table below is the whole of it. Anything not listed is global.

Setting Overridden per page by
Left and right sidebar Sidebars box, on pages, posts and team members
Sidebars after content on mobile Sidebars box
Hide sidebars on mobile Sidebars box
Page title band Page title and breadcrumbs box — Disable heading
Breadcrumbs Page title and breadcrumbs box — Disable breadcrumbs
Heading background image Page title and breadcrumbs box
Top bar and above-menu bar Header options box, pages only
Header and footer entirely Blank page box, pages only

In the Sidebars box, an empty selection means "use the global default" and None means "no sidebar on this page" — they are not the same thing, and None is how you give one page full-width content on a site that otherwise has a sidebar.

Boxed layout, background, shadows, blog columns, single post styles, excerpt length, slugs and post meta have no per-page equivalent. They are decided once, on these two screens. See Theme Options, screen by screen for the rest of the panel.

Menus and the mega menu

A menu in WordPress is a list you build once and then point at a place in the theme. Industrial reads the navigation in the header from one menu location, and adds a single extra field to menu items: a Megamenu checkbox that turns a drop-down into a full-width panel of columns.

Nothing here needs a page builder. Menus are built at Appearance → Menus and the theme renders whatever you put there.

The theme registers its locations from the header style, so the list you see at the bottom of Appearance → Menus depends on which header you chose in Appearance → Theme Options → Header Options.

Header style Locations registered What it is for
Any style except logo-in-the-middle Primary Navigation The one navigation in the header
Logo in the middle Left Navigation and Right Navigation The items to the left and to the right of the logo

Left Navigation is the same internal location as Primary Navigation (primary), so a menu already assigned to the primary location stays assigned when you switch to the logo-in-the-middle header; you then only have to fill the right-hand one. If you also switch the header to the vertical layout, only the left-hand menu is drawn — the vertical header has one navigation — so Right Navigation is listed but unused. See Header, top bar and footer for the header styles themselves.

Everything else that looks like a menu — the links in the top bar, the footer columns, the services list beside a page — is a widget, not a theme location. Drop one of these into the relevant widget area:

Widget What it renders
Navigation Menu WordPress's own, the full menu with its nesting
AnpsThemes - Simple Navigation Menu The menu's top-level links as a plain list
AnpsThemes - Menu The menu as two columns. One level only

See Widgets and sidebars.

Creating the header menu

  1. Go to Appearance → Menus and click create a new menu. Name it and click Create Menu.
  2. Add pages, posts, projects, categories or custom links from the panels on the left. Drag an item to the right to make it a child.
  3. Under Menu Settings, tick the location — Primary Navigation, or Left Navigation and Right Navigation on the logo-in-the-middle header.
  4. Save Menu.

Depth is not limited. Ordinary drop-downs work at any nesting level; a mega menu uses exactly three levels, described below.

Until a menu is assigned to a location, the header prints a notice instead of navigation. "Primary menu not selected. Go to Appearance - Menus and select a menu." appears in place of the menu, and "No menu items added. Add them under Appearance - Menus." appears if the assigned menu is empty. Both are visible to your visitors, so assign the menu before you launch.

A demo import creates the demo's menus and assigns one of them to the primary location for you, so on an imported site this is already done.

Per-item fields the theme adds

The theme adds exactly one field to a menu item: Megamenu, a checkbox that appears only on top-level items. Expand an item in the menu editor and it sits just above the Remove / Cancel row.

The theme also makes use of two of WordPress's own optional fields, both hidden until you switch them on in Screen Options at the top of the Menus screen:

Field What the theme does with it
Description Printed under the label of a top-level item as small grey text. Shortcodes inside it are expanded. Descriptions on sub-items are discarded.
CSS Classes Added to the item's <li>, for your own Custom CSS to target.

Title Attribute, Link Target and Link Relationship are passed through to the link unchanged.

Descriptions and the Megamenu checkbox both need the theme's menu walker. It is on by default. If Enable menu walker (mega menu) is unticked at Appearance → Theme Options → Header Options, WordPress renders the menu itself: drop-downs still work, but mega menus and item descriptions do not. Untick it only when you are running a third-party mega menu plugin, which needs the theme to keep out of the way.

Building a mega menu

A mega menu is one top-level item whose drop-down is a full-width panel divided into columns. The theme builds the columns from the menu structure — you do not add column classes by hand.

Three levels, each with a fixed job:

Level Becomes
Top level, Megamenu ticked The item in the navigation bar that opens the panel
Second level One column. Its label is the column heading, linked to its URL
Third level The links listed inside that column

To build one:

  1. Switch on CSS Classes and Description in Screen Options if you intend to use them.
  2. Add the parent item — say Shop. Expand it, tick Megamenu, and Save Menu.
  3. Add the column items as children of Shop. Give each one the heading text you want and a real URL, because the heading is a link. A custom link with # as the URL works if the heading should go nowhere.
  4. Add the links as children of each column item.
  5. Save Menu.

The panel divides the twelve-column grid evenly between the columns, so the number of second-level items decides their width:

Second-level items Column width
2 Half each
3 A third each
4 A quarter each
6 A sixth each

Use 2, 3, 4 or 6. Any other number — five, for instance — does not divide twelve and the columns come out unstyled.

Text inside a mega menu

A third-level item is a row in its column, so a short line of text is added the same way a link is: add the item, put the words in the Navigation Label and set the URL to #.

The Description field is not an option here. The theme prints descriptions only on top-level items, and it escapes their HTML before expanding shortcodes, so markup typed into a description appears as literal text. There is no image field and no image shortcode in the plugin, so a mega menu column holds headings and links, not pictures. If a drop-down needs images, build that section on a page instead — see Building pages with Elementor.

Mega menus do not work on the logo-in-the-middle header. That header renders its two menus without the theme's walker, so the Megamenu checkbox has no effect on it. Every other header style supports mega menus.

Search and cart in the navigation

Two things the theme injects into the end of the menu, both set at Appearance → Theme Options → Header Options:

Setting Effect
Display search icon in menu (desktop)? Adds a magnifier at the end of the menu that opens a search field
Display search on mobile and tablets? Adds a full-width search box inside the mobile panel

The shopping-cart icon is added in the same place but is configured with the shop settings — see Shop and products.

Mobile menu behaviour

Below 1200 pixels wide the theme moves the whole navigation out of the header and into an off-canvas panel:

Which item positions the desktop menu takes — left, centre or right — and whether the header sticks on scroll are header settings, not menu settings. They are in Theme Options, screen by screen under Header Options.

Building pages with Elementor

Elementor is the builder Industrial is built around. Every demo ships an Elementor version of its pages, the theme's two newest demos exist only as Elementor layouts, and all new element work in the theme and plugin happens here. If you are starting a site from scratch, this is the chapter to use.

The plugin registers 87 widgets of its own into Elementor. They sit beside Elementor's widgets, not instead of them: a page is normally a mixture of the two.

Getting Elementor onto the site

Elementor Page Builder is one of the theme's required plugins, so you do not have to find it yourself. Either take the Plugins step of the setup wizard and let it install and activate Elementor for you, or install it from Plugins → Add New in the usual way. The free version from the WordPress plugin directory is what the theme is built against; Elementor Pro is optional and the theme does not need it.

Never run Elementor and WPBakery at the same time. With two page builders active the demo importer refuses to run, and Demos 11 and 12 refuse to import even when Elementor is active if WPBakery is still switched on. Pick one builder for the site and deactivate the other. See The twelve demos.

Creating a page and opening the editor

Add the page first, then build it.

  1. Pages → Add New, give the page a title and publish or save it.
  2. Press Edit with Elementor.
  3. Build the page out of sections or containers, then Update.

The page title you typed is not part of the Elementor canvas. It is printed by the theme in the page-title band above the content, together with the breadcrumb trail, and it is controlled from the Page title and breadcrumbs box on the WordPress edit screen — see header, footer and page title below.

The Industrial Elements category

Open the widget panel and the theme's widgets are grouped under Industrial Elements. Internally the category is anps-em, which is the name you would use in code; in the panel it is the plain-language title.

The fastest way to place one is to type into the panel's search box. Every widget the theme adds is named after what it renders — Anps Heading, Anps Portfolio, Solar - Savings Calculator — so searching for "portfolio", "team" or "solar" narrows the list immediately. The complete list of names is in Element and widget reference, generated from the plugin so it cannot drift out of date.

How the theme's widgets differ from Elementor's own

Elementor's widgets are generic and carry a large Style tab. The theme's widgets are the opposite: they render the theme's own markup and class names, and then mostly get out of the way.

Elementor's widgets Industrial Elements
Typography Set per widget in the Style tab Follows Theme Options → Typography
Colours Set per widget, or from the Elementor kit Follows the theme's colour options, with a few per-widget overrides
Spacing Full padding and margin controls The theme's section rhythm, adjusted on the parent section
Content Text you type, or Elementor's own loop widgets Several query your Portfolio, Team and posts directly

The practical consequence: when you change the primary colour or the body font in Colours and typography, the theme's widgets change with it across every page, and widgets you styled by hand in Elementor do not. Prefer the theme's widget where one exists for the job, and reach for Elementor's when you need something the theme has no element for.

Colour controls on the theme's widgets are wired to Elementor's global colours, so leaving one empty is the normal state — it means "use the site's colour".

Widgets that query your content

Six of the general widgets build their own list of posts rather than taking typed content. What they query is fixed; only the filtering and the layout are yours to set.

Widget What it lists The settings that matter
Anps Portfolio Portfolio items, optionally one portfolio_category Number of items, 2/3/4/6 in a row, category filter bar on or off, order, mobile columns
Anps Recent Portfolio Portfolio items, optionally one category Number of items, order
Anps Team Team members Items in a column, number of members (-1 for all), specific member IDs
Anps Team With Description Team members, with their biography As above
Anps Blog Published posts, optionally one category Posts per page, 1–4 columns, order; this one paginates
Anps Recent Blog Published posts, newest first Number of posts, category IDs, items in a row, carousel on or off, excerpt length

Two details catch people out. Anps Recent Blog takes category IDs as a comma-separated list (3,7,12), while Anps Blog takes a single category chosen from a dropdown. And the portfolio widget's filter bar is built from the categories actually used by the items it found, so a filter button only appears once at least one item carries that category.

With the filter bar switched on, the grid is re-laid out in the browser as you filter. Four- and six-column grids drop the title-and-excerpt overlay and show a link icon on hover instead, because there is no room for text at that size.

See Portfolio, Team and News and the blog for the content these widgets read.

The Demo 11 and Demo 12 widget sets

Of the 87 widgets, 31 are named for Demo 11 and 24 carry the Solar - prefix of Demo 12. They are whole page bands rather than small parts: a hero, a stats strip, a case-study row, a savings calculator.

They are registered on every site, and their styling is compiled into the theme's stylesheet rather than loaded per demo, so you can drop one onto any page and it will render. What you cannot assume is that it will look right. Each was designed against its own demo's palette, type treatment and content proportions, and several read content that only that demo's import creates. Treat them as part of the demo, not as a general toolkit.

Demo 12's widgets all open their Style tab with an Accent color pair. It does not paint one element: it redefines the accent variable for everything the widget renders — kicker bars, rules, badges, buttons, icons — from one control. Left empty it follows the primary colour theme option, which is what you normally want.

One Demo 11 widget, Insights Modern, uses Elementor's nested elements and only appears in the panel while Elementor's Nested Elements feature is enabled. It holds a real sidebar you drop other widgets into, rather than a fixed list of links.

Demo 12's global colours and fonts live in an Elementor kit. The importer points Elementor's active kit at the imported one and clears the cached CSS. If you later delete or recreate the kit from Elementor's own panel, the demo's colours and container width go with it.

Full-width sections and the theme's page container

The theme wraps page content in its own container, about 1170 pixels wide by default. An ordinary Elementor section therefore sits inside that container, and setting a section to full width inside a boxed parent does nothing useful on its own.

Two ways out, depending on which layout element you are using:

A full-bleed hero usually also wants the gap above it removed. That is the Spacing options box on the page edit screen: Remove Header Margin and Remove Footer Margin.

Whether the page is boxed at all, and which sidebars appear beside the content, come from Page layout and page setup — not from Elementor. A page with a sidebar has a narrower content column, and the Elementor canvas narrows with it.

The theme owns the header, the top bar, the page-title band and the footer. These are theme templates chosen in Theme Options, not Elementor templates, so you do not build them in the editor. Set them up once in Header, top bar and footer and every page inherits them.

Per page, the WordPress edit screen gives you three boxes that change what the theme prints around the Elementor content:

Box What it does
Page title and breadcrumbs Disables the breadcrumb trail or the whole page-title band, and sets that band's background image, video, colours and logo
Header options Forces the top bar and the above-menu row on or off for this page, overriding the global setting
Blank page Disable Header and Disable Footer — for a landing page you want to build entirely in Elementor

Header options and Blank page appear on pages only. Page title and breadcrumbs also appears on posts, portfolio items and team members, so a single project or profile can drop its title band as well.

Disable Header removes more than the header. The same switch suppresses the top bar, the header, the page-title band and the breadcrumbs, because the theme treats all four as the page's top furniture. If you only wanted the title band gone, use Disable heading in the Page title and breadcrumbs box instead.

Neither switch removes the theme's content container. For a page with no container at all, use one of Elementor's own page templates in the Template dropdown on the page edit screen.

Turning the theme's Elementor widgets off

anps-framework passes the whole widget registry through a filter before registering anything:

add_filter( 'anps_widgets_filter', function( $widgets ) {
    unset( $widgets['demo12_calculator'] );

    return $widgets;
} );

The array is keyed by the widget's internal name — the right-hand column of the Elementor table in Element and widget reference — so you can drop one widget, drop a whole demo's set, or return an empty array to remove all 87.

This is for sites that have finished importing and want a shorter widget panel, and for developers replacing a widget with their own version of it. It is not a performance setting: the widgets are only loaded when Elementor asks for them. Put the filter in the child theme's functions.php, never in the theme, or the next update will remove it.

Removing a widget does not remove it from pages that use it. A page built with a widget you have filtered out renders nothing where that widget was, and Elementor shows it as missing in the editor. Edit the pages first.

Building pages with WPBakery

WPBakery Page Builder is fully supported. Demos 1 to 10 each ship a WPBakery version of their pages, the plugin maps 32 elements into the builder, and the theme overrides several of WPBakery's own templates so they match the rest of the design. If your site was built with WPBakery, nothing has been taken away from you and this chapter is the reference for it.

What is true, and worth saying plainly: new element work in Industrial goes into Elementor. Demos 11 and 12 exist only as Elementor layouts, and the widgets written for them have no WPBakery equivalent. For a brand-new site, start with Building pages with Elementor. For an existing WPBakery site, carry on here — there is no need to migrate.

Installing WPBakery Page Builder

WPBakery is one of the theme's required plugins and is installed for you.

The theme installs its own copy and puts WPBakery into theme mode, so there is no purchase key to register and no licence panel to fill in. New versions arrive through the theme's required-plugins notice when you update the theme, not from WPBakery's own updater.

Deactivate Elementor before you use WPBakery. With two page builders active the demo importer refuses to run at all, and a page saved by one builder cannot be opened by the other. Choose one per site.

Which demos import as WPBakery pages

Demos 1 to 10 exist twice over: once as WPBakery content and once as Elementor content. The importer looks at which builder is active and imports the matching set, so the demo you see in the preview is what you get either way.

Active builder Demos 1–10 Demos 11 and 12
WPBakery WPBakery pages Refused
Elementor Elementor pages Elementor pages
Both Refused Refused

The refusal for Demos 11 and 12 is deliberate, not a bug: those layouts are built entirely from Elementor widgets and would import as empty pages. See The twelve demos and Importing a demo.

Importing a demo does not convert anything. If you import a WPBakery demo and later switch the site to Elementor, the imported pages stay as WPBakery shortcodes. There is no converter, in either direction. Rebuilding the pages is the only route.

Backend editor and frontend editor

Open any page and WPBakery offers two editors for the same content.

Editor What it is When to use it
Backend editor A schematic of rows, columns and elements in the admin Almost always: it is faster, and settings are easier to reach
Frontend editor The same page edited over the live rendering Fine-tuning spacing and backgrounds, where seeing the result matters

Both write the same content, and you can move between them on the same page. Switching a page to the Classic Mode editor shows you the shortcodes underneath; that is useful for copying a block of layout from one page to another, and dangerous for anything else, because a mistyped closing tag breaks the row that contains it.

Rows, columns and the theme's grid

A WPBakery page is rows, rows hold columns, columns hold elements. The theme adds three things to that.

Full-width rows. The row's own Row stretch setting, set to stretch the row, takes it out of the theme's content container and runs it edge to edge. The theme keeps such rows visible rather than clipping them, so backgrounds and absolutely positioned images inside a stretched row are not cut off.

Row and column classes. The Extra class name field on a row or column accepts the theme's spacing helpers, which the demos use heavily:

Class Effect
no-padding Removes the row's top and bottom padding
no-top-padding Removes only the top padding
padding-small A shallower band, 50 pixels top and bottom, on screens 1000 pixels and wider
padding-top-small 30 pixels of top padding on screens 1000 pixels and wider
no-padding-mobile Removes the column's top padding below 1000 pixels
no-margin-mobile Removes the top margin below 1000 pixels
bg-image-bottom Anchors the row's background image to the bottom edge

Where columns stack. Appearance → Theme Options → Page Layout has a Visual Composer section with one setting, Default column class. On Medium - vc_col-md, the default, the theme rewrites the vc_col-sm-* classes WPBakery writes into vc_col-md-*, so a row of columns stacks on tablets rather than holding its shape. On Small - vc_col-sm the classes are left as WPBakery wrote them and the columns stack only on phones. Medium matches the demos. See Page layout and page setup.

The Anps Shortcodes category

Add an element and the theme's elements are grouped under Anps Shortcodes. The full list, with the shortcode tag each one writes, is in Element and widget reference — generated from the plugin, so it is always complete.

Eleven of them are child elements and do not appear in the main list: you add Contact info, Contact info card, Google maps, Info, List, Logos, Social icons, Testimonials or Timeline first, and then add items inside it. If you cannot find Testimonial item in the element picker, that is why — it only exists inside a Testimonials container.

The theme also changes two things about WPBakery's own elements. It removes WPBakery's Google Maps element, because the theme's Google maps element is the one the demos use and the one that is styled. And it replaces WPBakery's templates for Button, Toggle and the Tabs / Tour / Accordion family so they inherit the theme's colours and shapes; the Button element gains the theme's button styles and a shadow option.

Elements that need more than their name

Most elements do what their title says. These are the ones worth reading about before you place them.

Element What it does, and the settings that decide it
Blog A paginated grid of posts. One category from a dropdown, posts per page, 1–4 columns, order. This is the element for a blog page built in the builder
Recent blog A short strip of the newest posts. Takes category IDs as a comma-separated list, not a name; items per row; a slider switch; and an excerpt length in characters, 130 by default
Portfolio The project grid. 2, 3, 4 or 6 in a row, an optional category, and a filter bar built from the categories the found items actually use. At 4 and 6 across, items show a link icon on hover instead of a title and excerpt
Recent portfolio The same content without the filter bar, for a teaser row on another page
Team Staff cards. Number per column, number of members (-1 for all), or an explicit list of member IDs when you want a particular few in a particular order
Team with description The same, with each member's biography shown
Counter A number that counts up when it scrolls into view. Set the Max number it stops at and the animation duration in milliseconds, 5000 by default; the text under it is the element's content
Testimonials A container for Testimonial children. Style, random order, autoplay and an autoplay interval belong to the container; the quote, name, job title and photo belong to each child
Table A plain-text table with striped, bordered and alternate-heading switches. Rows are typed into the content field, so keep it to small comparison tables rather than long data
Timeline A container of Timeline item children, each with a year, a title and a body. Items render in the order you place them, not by year
Gallery A grid of images from the media library with a chosen number per row
Logos A row of client logos; each Logo child holds an image and an optional link

The remaining elements — alerts, buttons, headings, icons, quotes, downloads, call-to-action bands, contact information, appointment and subscribe forms, the 404 block, the Twitter feed — are short enough that their fields explain themselves.

WooCommerce in a WPBakery page

The plugin adds no WooCommerce elements of its own. Product listings inside a builder page come from WooCommerce's own elements, which appear in the element picker once WooCommerce is active.

What the theme controls is how shop pages look: products per row, products per page, the cart icon in the header, and the product-image zoom, lightbox and thumbnail slider. Those live in Appearance → Theme Options → WooCommerce, not in the builder. See Shop and products.

What the elements actually are, and what happens without WPBakery

Every element in Anps Shortcodes is a shortcode with a visual wrapper around it. Placing Counter writes [counter max="120"]…[/counter] into the page; the builder screen is a form for that shortcode's attributes. This is why the reference table lists the tag beside each name, and why an element can be used outside the builder — in a text widget, or in a page's content if you ever turn the builder off for it.

The theme's shortcodes are registered by the Anps Theme Plugin whether or not WPBakery is active. WPBakery's own rows and columns are not.

Deactivating WPBakery breaks the layout of every page built with it. The theme's own elements carry on rendering, because the plugin registers their shortcodes independently. But [vc_row] and [vc_column] have nothing left to render them, so they appear on the page as literal text and the content loses its grid. Reactivate WPBakery and the pages return exactly as they were — nothing is lost, but do not deactivate it on a live site expecting a graceful fallback.

One shortcode has no element at all: [anps_current_year] prints the current year, for a footer copyright line that does not need editing every January.

Portfolio

Projects live in their own post type, portfolio, provided by the Anps Theme Plugin. A project has a title, a body, categories, a featured image, an optional gallery or video, and a small table of facts — client, location, year, whatever you choose. You then place a grid of projects on a page.

With the theme active and the plugin missing there is no Portfolio menu at all. See Before you start.

Adding a project

  1. Portfolio → Add New.
  2. Type the project name as the title.
  3. Write the body. The body is what a visitor reads on the project's own page, and on some single styles it is the whole page, so if you are building the project with Elementor this is where you build it.
  4. Fill in the Excerpt. The project grids print the excerpt in the hover panel, so a sentence is enough. If the Excerpt box is not visible, switch it on in Screen Options, or in the three-dot menu → PreferencesPanels on the block editor.
  5. Tick a category in the Categories box.
  6. Set a Featured image.
  7. Publish.

Repeat for each project. Nothing on this list is compulsory except the title, but a project with no featured image and no gallery shows an empty tile in a grid.

The featured image is the tile in every project grid, and it is the banner background on the Demo 12 single style. The theme crops it to a registered size of 359 × 283 pixels for grids, so upload something at least that big and landscape. Do not upload a 5000-pixel photograph — see Going live for why image weight matters.

If a project has no featured image, the grids fall back to the first image of its gallery. If it has neither, the tile is blank.

Project categories

Projects use their own taxonomy, portfolio_category, shown in the editor as Categories under the Portfolio menu. These are separate from post categories; a project cannot be filed under a blog category and vice versa.

Categories fill the filter bar above a project grid — each category with at least one project becomes a button, and the grid filters in place without reloading — and a grid can be restricted to one branch of the tree, so a page about one service shows only that service's work. Category names become the filter labels verbatim, so keep them short.

A project can carry a gallery of images in addition to its featured image. The box is called Gallery images and sits in the side column of the editor.

Click Add gallery images, select as many as you want, and click Add to gallery. Drag the thumbnails to reorder them; the first one is what a visitor sees before interacting. A thumbnail's Delete link removes it from this project without removing the file from your media library.

On a project page the gallery renders as one large image with a caption, a full-screen button, and — when there are two or more images — a row of five thumbnails you can scroll through. The caption comes from the image's Caption field in the media library, falling back to its Title.

A video instead of an image

The side column also has a Featured video box: a single text field that takes a YouTube or Vimeo address.

What to paste Example
A YouTube watch address https://www.youtube.com/watch?v=dQw4w9WgXcQ
A Vimeo address https://vimeo.com/76979871

Paste the full address from the browser bar. Short youtu.be links do not work, and the field is not a shortcode field — the old manual's [youtube] and [vimeo] shortcodes are not part of this theme.

The three media boxes are not independent. The theme picks exactly one: the gallery if it has anything in it, otherwise the featured video if an address is set, otherwise the featured image. So a project with both a gallery and a video shows the gallery — clear the gallery to let the video through.

The featured video on a project's own page is rendered through WPBakery. On the Style 1 and Style 2 single layouts the player is produced by WPBakery's video element, so a project video only appears there if WPBakery Page Builder is active. Project grids and blog listings embed YouTube and Vimeo without WPBakery. If you are on Elementor and want a video on a project page, add Elementor's own Video widget to the project body instead.

Fields in the project side column

Two more boxes, both specific to this post type.

Project info table

A repeater of icon-and-text rows. Each row has an icon picked from the Font Awesome library and a line of text beside it. Use it for the facts that are the same shape on every project: client, location, year, value, duration.

Click Select icon to open the picker; it has a search box, so type user, map or calendar and choose from the results. Type the text in the field below it, and use + and to add and remove rows. The text field accepts a little markup — <strong>, <em>, <span>, <b>, <i>, <br> and links — so you can bold a label or link a client name.

The info table only prints on the Style 1 single layout. On Style 2, Style 3, Demo 11 and Demo 12 the template does not draw it, so rows you enter there are stored but never shown. If you need the facts on those layouts, place them in the project body with a builder element.

A dropdown of your published pages. Whatever you pick is inserted into the breadcrumb trail on the project's own page, between the home link and the project title — so a project can read Home / Our projects / Harbour crane rather than Home / Harbour crane. The same box appears on posts and does the same thing there.

On the Demo 12 single style this setting has a second job: the "all projects" button in the previous/next footer links to the page you chose here. If you leave it unset, that button looks for a published page with the slug projects, and falls back to the home page.

The portfolio slug

Appearance → Theme Options → Page Setup has a Portfolio slug field. It sets the URL segment for a project: with portfolio in the field a project sits at /portfolio/harbour-crane/, with projects at /projects/harbour-crane/.

Changing the slug changes every project address. Links you or anyone else has already published to a project will stop working. Change it before you launch, not after, and if you must change it later set up redirects. After changing it, visit Settings → Permalinks and click Save Changes so WordPress rewrites its rules.

Portfolio single styles

The same Page Setup screen has a Portfolio single style dropdown. It decides the layout of every project page on the site; it is not a per-project setting.

Style Layout Draws the media boxes Draws the info table
Style 1 Title and body in a narrow left column, media and the info table in a wider right column Yes Yes
Style 2 Media full width at the top, then the title, then the body underneath Yes No
Style 3 The body and nothing else No No
Demo 11 The body and nothing else No No
Demo 12 (Solar) A photographic banner built from the featured image, then the body, then a previous/next project footer No No

Styles 3 and Demo 11 are deliberately bare: they hand the whole page to the editor, which is the right choice when each project is built with Elementor and needs its own arrangement of sections.

Demo 12 suppresses the theme's own page heading band, because its banner already carries the project title and the breadcrumb trail. Demo 11 suppresses the page heading too. On the other three styles the page heading behaves as it does everywhere else — see Page layout and Page Setup.

The sidebars set for pages apply to project pages, and every style narrows its column to make room for them.

Project archives

The portfolio post type has no archive page. There is no /portfolio/ listing that shows every project, and a link to one will 404. Projects are listed by putting a grid on an ordinary page, which is what all twelve demos do.

Project categories do have archives, at /portfolio_category/<category-slug>/. They are rendered by the theme's generic archive template — the same one that renders blog categories — so they look like a blog listing rather than a project grid. They are useful as a fallback, not as a designed page. Build the page you actually want to link to.

Putting projects on a page

Both builders ship the same two elements — in Elementor under the Industrial Elements category, in WPBakery under Anps Shortcodes. A third grid, Anps Demo 11 Portfolio Grid, is Elementor only.

Element What it does
Anps Portfolio / Portfolio The main grid, with the category filter bar
Anps Recent Portfolio / Recent Portfolio A compact recent-projects block with a heading

Anps Portfolio settings:

Setting What it does
Number of portfolio posts How many projects to show. Leave empty for the site default
Show in row 2, 3, 4 or 6 tiles across on desktop
Portfolio categories All, or one category to restrict the grid to
filter On shows the category filter bar above the grid, Off hides it
Order By Default, Date, Id, Title or Name
Order Ascending or descending
Mobile view 1 or 2 tiles across on phones
Colour settings Tile background, text and title colours for the hover panel

At 2 and 3 across, hovering a tile reveals the project title, its excerpt and a Read more button. At 4 and 6 across the tiles are too small for that, so hovering shows a link icon and the whole tile becomes the link.

See Building pages with Elementor or Building pages with WPBakery, and Element and widget reference for every element by name.

Team

Staff live in their own post type, team, provided by the Anps Theme Plugin. A member is a title, a photo, a job title, a short description and an optional set of social links. You then place a grid of members on a page.

It is a small post type with no categories and no tags. If you need to group people — by department, by office — make one grid per group and pick the members by ID.

Adding a team member

  1. Team → Add New.
  2. Type the person's name as the title.
  3. Fill in the Excerpt. This is the one-or-two-line description printed under the name in a grid. If the Excerpt box is not visible, switch it on in Screen Options, or in the three-dot menu → PreferencesPanels on the block editor.
  4. Write the body if the member has a page of their own. It appears beside the photo on that page, and nowhere else.
  5. Set a Featured image — the photograph.
  6. Fill in Team subtitle with the job title.
  7. Add Social accounts if you have them.
  8. Publish.

The photograph

The featured image is the portrait. The theme crops it to 455 × 355 pixels for the standard grid and 458 × 450 for the with-description layout, so upload something at least 460 pixels wide. Both crops are landscape-to-square rather than tall portrait, so a photograph framed tightly around a head will be cut at the chin. Frame a little loose and let the crop do its work.

A member with no featured image still appears in a grid, with a gap where the photograph should be.

Team subtitle

A single text field in the main editing column, below the body. It is intended for the role — Managing Director, Site Foreman, Head of Compliance — and it prints in small type under the name in every grid and on the member's own page.

Leave it empty and nothing is printed; the name simply sits closer to the description.

The Social accounts box in the side column is a repeater. Each row is an icon plus a link.

The picker is the whole Font Awesome library, not a fixed list of networks, so any network with a Font Awesome brand icon is available — and so is any other icon, if you want an envelope for an email address rather than a social profile.

Social links only appear on a member's own page. The team grids print the photograph, the name, the subtitle and the description, and nothing else. If you have turned member pages off, the links you enter here are stored but never shown anywhere.

The team slug and member pages

Two settings at Appearance → Theme Options → Page Setup:

Setting What it does
Team slug The URL segment for a member page. With team a member sits at /team/jane-smith/
Team single page Ticked, the photograph and the name in every grid link to the member's own page. Unticked, they are plain and the page is no longer reachable through a query

Untick Team single page when your team is a wall of faces rather than a set of biographies. The grid then prints exactly the same content but stops inviting a click that leads nowhere useful.

Changing the team slug changes every member address. Do it before you launch. After changing it, visit Settings → Permalinks and click Save Changes so WordPress rewrites its rules.

What a member page shows

When member pages are on, a member page puts the photograph, the social icons, the subtitle and the excerpt in a narrow left column, and the body in a wider right column. There is no setting to change the arrangement; if you want something else, build it with a builder on an ordinary page.

Putting the team on a page

Two elements, in both builders, plus a Demo 12 variant.

With Elementor

Search the widget panel under Industrial Elements:

Widget What it does
Anps Team The standard grid
Anps Team With Description Up to three members beside a block of text
Solar - Team Grid The Demo 12 team layout

Anps Team settings:

Setting What it does
Number of items in column 2, 3, 4 or 6 members across
Number of team members How many to show. -1 shows all of them
Team member id/s A comma-separated list of post IDs, for example 12, 40, 7. Leave empty for all members, newest first

Filling in Team member id/s does two things: it limits the grid to those people, and it orders them exactly as you typed them. That is the only way to control the order — there is no order setting — so use it whenever the sequence matters. A post ID is visible in the address bar while you edit the member, as the post= number.

Anps Team With Description settings:

Setting What it does
Team member id/s Which members to show, in that order
Title The heading of the text panel beside them
Text The body of the text panel
Button text and Button url An optional link under the text
Target Whether the button opens in a new tab
Title color and Description color Colours for the panel's heading and text

The with-description layout shows at most three members. The limit is fixed in the element, not a setting. Listing more IDs than three shows the first three. It also omits the description under each name — only the photograph, the name and the subtitle are printed, because the prose is in the panel beside them.

See Building pages with Elementor.

With WPBakery

The same two elements are in the Anps Shortcodes group of the element picker, named Team and Team with description, with the same settings. See Building pages with WPBakery. WPBakery has no equivalent of the Demo 12 grid.

Both are listed with every other element in Element and widget reference.

News and the blog

Posts are ordinary WordPress posts. What the theme adds is the presentation: how many columns the listing uses, how much of each post it shows, which byline details appear, and three single-post layouts. It also adds two media boxes — a featured video and an image gallery — which stand in for the post formats other themes use.

Adding a news post

  1. Posts → Add New.
  2. Type the headline as the title.
  3. Write the body.
  4. Fill in the Excerpt. The listing prints it when the site is set to show excerpts, and several elements print it too. If the box is not visible, switch it on in Screen Options, or in the three-dot menu → PreferencesPanels on the block editor.
  5. Tick a category in Categories and add Tags if you use them.
  6. Set a Featured image.
  7. Publish.

The side column also carries Breadcrumbs parent page, a dropdown of your pages. Whatever you pick is inserted into the breadcrumb trail on this post, between the home link and the headline — so a post can read Home / News / New depot opens.

The page heading boxes in the same column override the global page heading for this post only; they are described in Page layout and Page Setup.

Post categories and tags

Posts use WordPress's own categories and tags, which are not shared with projects. Both have archives — /category/<slug>/ and /tag/<slug>/ — rendered with the same template and the same column setting as the main listing, so they need no separate configuration. The page heading of a category archive is the category name; a tag archive reads Posts tagged "name".

The featured image on a post

The featured image is the picture above the headline in the listing, and above the headline again at the top of a post on the Style 1 layout. On the Demo 12 layout it is the background of the photographic banner, so pick something that still reads with white text over it. Landscape works best; the listing renders the image at WordPress's large size, so upload at least 1024 pixels wide.

A video or a gallery at the top of a post

The theme does not use WordPress post formats. Instead the side column of the post editor has two boxes, and a post can use either in place of its featured image. Both also appear on projects — see Portfolio.

A single text field that takes a YouTube or Vimeo address.

What to paste Example
A YouTube watch address https://www.youtube.com/watch?v=dQw4w9WgXcQ
A Vimeo address https://vimeo.com/76979871

Paste the address from the browser bar. Short youtu.be links do not work, and this is not a shortcode field — the [youtube] and [vimeo] shortcodes the old manual mentioned are not part of this theme.

Click Add gallery images, select as many as you like, and click Add to gallery. Drag the thumbnails to reorder them; a thumbnail's Delete link takes it out of this post without removing the file from your media library. On the listing the gallery becomes a carousel in place of the featured image; on a post it becomes a large image with a caption and a row of thumbnails. Captions come from the image's Caption field in the media library, falling back to its Title.

Which one wins

The theme picks exactly one, in this order: the gallery if it has anything in it, otherwise the featured video if an address is set, otherwise the featured image. So a post with both a gallery and a video shows the gallery — clear the gallery to let the video through.

The Demo 12 single post layout ignores both boxes. It draws its banner from the featured image only. A gallery or video on such a post still appears in the listing, but not on the post itself — put it in the body with a builder element instead.

The posts page and how to assign it

WordPress decides where posts are listed, not the theme. At Settings → Reading, Your homepage displays either shows Your latest posts on the front page, or lets you pick A static page as the homepage and a second page as the Posts page. Create an empty page called News or Blog and select it there.

That page is used for three things and nothing else: its title becomes the page heading of the listing, its sidebar boxes decide the listing's sidebars, and its address becomes the listing's address. Its content is never printed — the listing template replaces it, so there is no point building a layout on it. Every demo creates and assigns a posts page for you. If you want a listing with sections above or below it, build an ordinary page and drop the blog element into it, as described at the end of this chapter.

Blog listing layout

Appearance → Theme Options → Page Layout has a Blog Layout section.

Setting What it does
Columns 1, 2, 3 or 4 posts across. Applies to the posts page and the category, tag, author and date archives. Search results have a layout of their own and ignore it
Single post style The layout of a post's own page — see below

One column gives the classic wide listing with the image above the headline. Three and four columns give card grids, at which width the excerpt is the only sensible choice for the body.

How much of a post the listing shows

Two settings decide this, and one is not where you would expect.

Setting Where What it does
For each post in a feed, include Settings → Reading Full text prints the whole post body in the listing. Excerpt prints the trimmed excerpt
Excerpt length Appearance → Theme Options → Page Setup How many words an automatic excerpt keeps. Default 40

The listing reuses the feed setting. A fresh WordPress install has For each post in a feed, include set to Full text, so every post appears in full in the listing with a Read More button under it. Set it to Excerpt for a normal blog listing. A demo import sets it to Excerpt for you.

Excerpt length applies only to excerpts WordPress generates from the body. If you have typed something into a post's Excerpt box, that text is used verbatim and the word limit is ignored. Trimmed excerpts end in an ellipsis.

Single post styles

The Single post style dropdown in Page Layout sets the layout of every post page on the site. It is not a per-post setting.

Style What it looks like
Style 1 Media, headline, byline, body. A footer table listing categories and tags, and the author's biography if they have written one
Style 2 Headline first, then the author with their avatar and the byline, then the media, then the body. No footer table
Demo 12 (Solar) A photographic banner carrying the headline, date, author and a reading-time estimate, then a narrow centred article, the tags, the author biography, and a previous/next article footer

Style 2 and Demo 12 both suppress the theme's own page heading band, because their own header already carries the title. The author biography comes from the Biographical Info field at Users → Profile; leave it empty and the block is not printed.

Which post meta shows where

Archives and single posts are configured separately, both at Appearance → Theme Options → Page Setup.

Post meta on blog / categories / tag / archive pages controls the byline in the listing:

Setting Shows
Author posted by: Name
Date The publication date, in your Settings → General date format
Comments The comment count
Categories The post's categories, as links

Post meta on single post controls a post's own page:

Setting Shows
Author, Date, Comments In the byline under the headline
Categories In the footer table, not the byline
Tags In the footer table, and only when the post has tags

All nine are on by default. The difference worth remembering is that on a listing the categories sit in the byline, while on a post they sit in the footer table — so unticking Categories under one heading has no effect on the other. That footer table only exists on Style 1: Style 2 prints no categories or tags at all, and Demo 12 prints tags at the end of the article, honouring the Tags setting but not the Categories one.

Comments on posts

Comments on posts are governed entirely by WordPress. Settings → Discussion sets the site default and the Discussion box on an individual post overrides it. A post shows its comment section when comments are open, and keeps showing existing comments after you close them. The theme styles the list and the form, and moves the comment box to the bottom of the form so the name and email fields come first; there is nothing to configure. The Enable page comments checkbox in Page Layout applies to pages, not posts, and unticking it does not affect the blog.

Page Layout has a Post Sidebars section with its own left and right dropdowns. These apply to single posts, categories, tags and archives — the blog side of the site — while Page Sidebars applies to pages. Each also has options to hide the sidebars on mobile or move them below the content there. On the posts page and on archives, the sidebar boxes on the page you assigned as the Posts page override the global setting. Building the widget areas themselves is covered in Widgets and sidebars.

Putting posts on a page

Both builders ship the same two elements — in Elementor under the Industrial Elements category, in WPBakery under Anps Shortcodes.

Element What it does
Anps Blog / Blog A paginated listing, the same one the posts page uses
Anps Recent Blog / Recent Blog A compact recent-posts block with a heading, optionally a slider

Anps Blog takes a Blog category to restrict itself to, Posts per page, Order By and Order, and Columns — 1, 2, 3 or 4 across, overriding the global setting for this instance. It renders each post through the same templates as the posts page, so everything above — the byline settings, the excerpt-or-full-text rule, the media precedence — applies to it unchanged.

See Building pages with Elementor or Building pages with WPBakery, and Element and widget reference for every element by name.

Shop and products

Industrial sells through WooCommerce. WooCommerce does the work — products, cart, checkout, payments, tax, shipping, orders — and the theme supplies the templates and a short list of display settings. Nothing about selling is built into the theme itself, so if WooCommerce is not active none of this chapter applies.

Installing WooCommerce

WooCommerce is optional. The theme lists it among the plugins it can install for you, but it does not require it, and a site that does not sell anything should leave it out.

Install it either from the plugin step of Appearance → Setup Wizard or from Plugins → Add New. Activate it and WooCommerce starts its own onboarding wizard, which is separate from the theme's: store address, industry, currency, payment methods, shipping zones and tax rates. Work through it before you add products. None of it is a theme setting and none of it is affected by the theme.

The theme replaces WooCommerce's stylesheets entirely. WooCommerce's own CSS is not loaded; every button, grid, notice and form on the shop is styled by Industrial. A CSS snippet copied from a general WooCommerce guide may target classes the theme never uses. Add your own rules under Appearance → Theme Options → Custom CSS, or in the child theme — see The child theme and custom code.

The pages a shop needs

WooCommerce needs four pages, and it creates them during its own setup:

Page What it is
Shop The product listing
Cart The basket
Checkout The order form
My account Login, orders and addresses

Check which page is assigned to each role at WooCommerce → Settings → Advanced, under Page setup. If a page is missing or unassigned, the cart or checkout will appear empty for no obvious reason; that screen is the first place to look.

The Shop page is also the page whose sidebar and page-heading settings govern the product listing, so it matters as more than a placeholder.

A demo import destroys these four pages and rebuilds them. The importer deletes the pages currently assigned as Shop, Cart, Checkout, My account and Terms — permanently, not to the trash — then recreates them from the demo and re-assigns the options. It also empties every widget area before it runs. If you configured WooCommerce first, that configuration is lost; the deletion happens as soon as the import starts, before the importer checks whether it is allowed to proceed, so it happens even on an import that is then refused. Import the demo first, then set up your shop. See Importing a demo.

Where the theme's shop settings live

Appearance → Theme Options → WooCommerce holds every shop setting the theme has. There are six, in three groups.

Group Setting What it does
Settings Display shopping cart icon in header? Where the basket icon appears: Never display, only on Woo pages, Display everywhere
Layout How many products in column? 4 columns or 3 columns of products on desktop
Layout Products per page How many products a listing shows before pagination. Default 12
Product Product image zoom Magnifies the main product image on hover
Product Product image lightbox Opens the product images full size when clicked
Product Product thumbnails slider Turns the row of product thumbnails into a carousel

The same settings also appear in the Customizer under Theme Options, if you would rather change them with a live preview. See Theme Options, screen by screen.

Leave the cart dropdown on "*** Select ***" and no icon appears. The field starts unset, and an unset value is treated as Never display. Choose one of the three real options explicitly.

The product listing layout

How many products in column? sets the desktop grid only. Narrower screens are fixed, so the choice is between two desktop arrangements:

Screen Products across
Phones 2
Tablets 3
Desktop 4 or 3, whichever you chose

WooCommerce has a products-per-row setting of its own in Appearance → Customize → WooCommerce → Product Catalog. It has no effect here; the theme sets the column widths itself. Use the theme's setting.

Products per page overrides whatever WooCommerce would show, on the Shop page, product category archives and product tag archives alike.

Each product tile shows the sale badge and the image in one block with the Add to cart button, then the product name, then the star rating and the price. Above the grid, the result count and the sort dropdown share one row.

Four theme-wide changes to the listing are worth knowing, because they are not settings and cannot be switched off from the admin:

The product page layout

A product page is two equal columns: the image gallery on the left, the product summary on the right. Underneath, full width, come the product tabs (Description, Additional information, Reviews), then up-sells, then related products.

The summary column reads top to bottom: title, price, star rating, short description, product meta (SKU, categories, tags), then the Add to cart form. The theme deliberately moves the Add to cart form below the meta and lifts the rating up under the price; WooCommerce's own order is different, and neither change is a setting.

The short description is what appears in the summary column. The long description in the main editor goes into the Description tab. Fill in both.

Product images, zoom and lightbox

Three settings, all under the Product heading of the theme's WooCommerce screen, and all three concern the gallery on a product page.

Setting On Off
Product image zoom Hovering the main image magnifies the area under the pointer Nothing happens on hover
Product image lightbox Clicking an image opens it full size in an overlay Clicking does nothing
Product thumbnails slider The thumbnails become a carousel with arrows: two visible on small phones, three on larger ones, four on tablets and up The thumbnails wrap onto as many rows as they need

Zoom and lightbox are on by default; the thumbnails slider is off. Turn the slider on when a product carries more than four or five images, so the gallery does not push the Add to cart button down the page.

The main gallery always slides between images when you pick a thumbnail. That is not optional.

Product image sizes themselves are WooCommerce's, at Appearance → Customize → WooCommerce → Product Images. Change them there and then regenerate thumbnails — see Going live.

The cart icon in the header

Display shopping cart icon in header? decides where the basket appears at the end of the navigation:

Choice Where the icon appears
Never display Nowhere
only on Woo pages On the shop, product, cart, checkout and account pages only
Display everywhere On every page of the site

The icon carries a count of the items in the basket and opens a small panel listing them with a link to the cart; the count updates without a page reload. only on Woo pages is the quiet choice for a site whose shop is a side business, Display everywhere the right one when selling is the point of it.

There is also an AnpsThemes - Mini Cart widget with no settings of its own, for putting the same basket into any widget area — the top bar, for instance, or the bar above the menu. When that widget is present in the header, the theme moves the basket into it rather than appending it to the menu. Widget areas are covered in Header, top bar and footer.

Shop pages take their sidebars from the Page Sidebars defaults at Appearance → Theme Options → Page Layout, not from the Post Sidebars defaults — even though a product is technically a post.

To override them, use the sidebar boxes on the Shop page itself for the product listing — that also governs product category archives — and the sidebar boxes on an individual product for that product. Choosing no sidebar gives the listing the full twelve columns; each sidebar takes three.

Which shop settings live where

The split is not obvious, so it is worth stating plainly.

Job Where
Currency, prices, tax, shipping, payments WooCommerce → Settings
Which page is the Shop, Cart, Checkout, My account WooCommerce → Settings → Advanced
Product image sizes Appearance → Customize → WooCommerce → Product Images
Emails to customers WooCommerce → Settings → Emails
Stock, orders, coupons, reports The WooCommerce and Products menus
Products per page, products per row Appearance → Theme Options → WooCommerce
Zoom, lightbox, thumbnails slider Appearance → Theme Options → WooCommerce
Cart icon in the header Appearance → Theme Options → WooCommerce
Page heading and breadcrumbs on shop pages Appearance → Theme Options → Page Layout
Sidebars on shop pages Appearance → Theme Options → Page Layout, or the Shop page itself

As a rule: anything about money, stock or fulfilment is WooCommerce's, and anything about how many products fit across the screen is the theme's.

Building shop pages with a builder

Cart, Checkout and My account are generated by WooCommerce and should be left as WooCommerce made them; adding builder sections to them is the most common way to break a checkout. The Shop page is different — its title, sidebar and heading settings are yours to change — but its body is replaced by the product listing, so building a layout on it achieves nothing. To wrap the shop in marketing sections, build an ordinary page and link to the shop from it.

Product pages can be built with a builder if you enable the builder for the product post type, which is a setting inside the page builder rather than in the theme — see Building pages with WPBakery and Building pages with Elementor. Do it only if you need it; a product page that a builder has taken over no longer follows the layout described above.

Widgets and sidebars

Widgets fill the parts of the page that are not the page: the column beside your content, the top bar above the header, the footer columns, the copyright strip. You place them at Appearance → Widgets.

Industrial registers more widget areas than most themes because its header and footer are assembled from them, and the Anps Theme Plugin adds fifteen widgets of its own. This chapter lists both, then covers building a sidebar of your own and pointing a single page at it.

The theme's widget areas

These areas always exist. The name is what you see in Appearance → Widgets; the slug is what appears in exported widget data and in CSS.

Area Slug Where it appears
Sidebar primary-widget-area The default content sidebar
Secondary Sidebar secondary-widget-area A second content sidebar
Top bar left top-bar-left Left end of the top bar, above the header
Top bar right top-bar-right Right end of the top bar
Above navigation bar above-navigation-bar A band between the top bar and the menu
Large above menu large-above-menu Inside headers 1 and 3, beside the logo
Left services sidebar left-services-sidebar Nowhere on its own — assign it to a page
Footer 1 … Footer 4 footer-1footer-4 The footer columns
Copyright footer 1 copyright-1 The copyright strip below the footer

The number of footer columns is not fixed. Appearance → Theme Options → Footer Options decides how many exist through Footer columns and Copyright footer columns: set Footer columns to two and only footer-1 and footer-2 are registered, so widgets you had placed in footer-3 and footer-4 drop into WordPress's Inactive Widgets until you raise the count again. Four footer columns and one copyright column is the default.

Above navigation bar is also conditional on a setting rather than on the widgets you put in it: the theme only prints it when the matching switch in Appearance → Theme Options → Header Options is on — a single page can override that — and never when the classic menu style is set to style 2. Large above menu prints in header 1 without further conditions, and in header 3 only when the classic menu style is style 2. See Header, top bar and footer.

Left services sidebar has no template of its own. It is registered so that you can select it as a page's left or right sidebar in the Sidebars box described below. Nothing prints it automatically.

Areas that appear only under a condition

Two more areas are registered only when a matching setting is active, so they appear and disappear from Appearance → Widgets as you change options.

Area Slug Registered when
Vertical menu bottom widget vertical-bottom-widget The global menu type is the vertical layout
Footer top band (Solar) footer-solar-top The footer design is set to Solar

Footer top band (Solar) is the call-to-action, contact and newsletter band across the top of the Solar footer used by Demo 12. It takes Heading, Text, Contact number, Subscribe and Social icons widgets, and lays each widget out as a half-width column.

Vertical menu bottom widget is registered when the vertical menu is on, but no template in the theme prints it; like Left services sidebar, it is a named area you can assign to a page.

Widgets the Anps Theme Plugin adds

All fifteen are listed under names beginning AnpsThemes - in Appearance → Widgets. They come from the plugin, not the theme, so deactivating the plugin empties every area that uses them.

AnpsThemes - Button

A theme-styled button. Text and Link set the label and destination, Target picks _self, _blank, _parent or _top, and Size is Small, Medium or Large. Style offers Normal button, Button with gradient, Dark button, Light button and Minimal button — the same five styles the builders use. Align is Left, Right or Centre.

AnpsThemes - Contact Number

A phone number with a line of text above it, for a top bar or a footer column. Fields are Text, Number, Text color, Number color and Background color. Leave the colour fields empty to inherit the scheme set in Colours and typography.

AnpsThemes - Download

A download link with an icon, meant for price lists and brochures. File picks an item already in your media library; File external takes a URL for a file hosted elsewhere. Title is the widget heading, File title is the clickable label, and Icon, Icon color and Background color control the tile.

AnpsThemes - Google Maps

A map in a widget area. Zoom and Height size it, and Markers is a repeatable field — press the plus button to add another pin — where each marker has a Location, a Pin image and an Info bubble.

A map needs an API key. Google stopped serving keyless maps in 2016. Paste your key at Appearance → Plugin Options → Google Maps or the map area stays blank.

AnpsThemes - Heading

A standalone heading for a widget area, with Heading text, Font size in pixels, Font weight from 100 to 900, and Text color.

AnpsThemes - Images

A single image chosen from the media library, with an optional Title above it.

AnpsThemes - Menu

A menu rendered in two columns. It behaves like WordPress's own Navigation Menu widget but only supports one level — submenu items are not displayed. Fields are Title and Select Menu.

AnpsThemes - Mini Cart

The WooCommerce mini cart, in any widget area. It has no settings and does nothing without WooCommerce active. See Shop and products.

AnpsThemes - Opening time

A list of opening hours. Each row has a Day, a Time you type freely (for example 10:00 - 18:00) and an Exposed switch that highlights that row — use it for today, or for a day with unusual hours. Add rows with the plus button.

AnpsThemes - Recent News

The most recent posts, styled to match the theme rather than WordPress's plain list. Title for recent news sets the heading and Number of articles to show limits the list.

AnpsThemes - Recent Projects

The same, for the Portfolio post type: Title for recent projects and Number of projects to show. See Portfolio.

AnpsThemes - Simple Navigation Menu

A menu as a plain list of top-level links, for a footer column or a copyright strip. Fields are Title, Select Menu, Link font size, Link color and Spacing between items. If you have not created a menu yet the widget says so and links you to the menus screen.

AnpsThemes - Social icons

Linked social icons. Style offers Default, Minimal, Border and Transparent border. Open links as sets the link target for every icon at once. The icons themselves are a repeatable field: each one has an icon, a link and a colour.

AnpsThemes - Spacing

Empty vertical space between two widgets, from 1 to 500 pixels. Use it instead of adding blank paragraphs to a Text widget.

AnpsThemes - Text and icon

A repeatable row of icon, title and subtitle — the address-and-phone blocks in the demo top bars are built from this. Each row has Icon, Title, Subtitle, Icon color, Title color and Subtitle color, and an Icon URL if the icon should link somewhere.

Text and icon is a top bar widget. Its own description says so. It is styled for the narrow bar above the header and will look wrong in a content sidebar or a footer column.

Choosing which sidebar a page or post shows

A sidebar is not attached to a widget area by default — you choose, per side, which registered area fills it. The site-wide choice is at Appearance → Theme Options → Page Layout, which has separate Left sidebar and Right sidebar selectors for pages and another pair for posts, plus Show sidebars on mobile after main content and Hide sidebars on mobile. Until you pick something there, pages have no sidebar at all. See Page layout and Page Setup.

Individual pages override the site-wide choice in the Sidebars box on the edit screen. It has the same four controls, and its selectors list every registered area including the ones you have generated yourself.

Value in the box Effect on that page
Left blank Use the site-wide setting
A sidebar name Use that area instead
None Show no sidebar, even though the site-wide setting has one

None is the one worth remembering: without it, a landing page built full-width in a builder still inherits the global sidebar and comes out narrow.

The box appears on Page, Post and Team edit screens. On a WPBakery site using the classic editor it is printed below the content instead.

Creating a sidebar with the sidebar generator

Appearance → Sidebars lists the sidebars you have created and their slugs. Press Add Sidebar, type a name, and it is registered immediately: the new area appears in Appearance → Widgets ready for widgets, and in every sidebar selector described above.

Names must be unique — the screen refuses a name that already exists — and the slug is derived from the name, so Services sidebar becomes services-sidebar.

Removing a sidebar does not remove its widgets, and renaming breaks assignments. Pages point at a generated sidebar by its name, not its slug. Remove it and any page set to it falls back to the site-wide sidebar, while the widgets it held move to Inactive Widgets, where they stay until you delete them.

The practical pattern is one generated sidebar per section of the site: a services sidebar with a services menu and a contact block, a news sidebar with categories and recent posts, assigned page by page in the Sidebars box.

Copying widgets to another site

Widget contents can be moved between installations from Appearance → Theme Options → Import/Export Widgets. Export downloads a text file of every widget in every area; Import reads one back.

This screen adds to what is there, it does not replace it. Every widget in the file is appended to the area it came from, so importing the same file twice leaves two copies of every widget. Run it on a site you are setting up, not one you have already arranged, and empty the areas first if you are re-running it.

A demo import reuses the same importer but empties every widget area immediately before it runs, so a demo never duplicates widgets the way this screen can — it replaces them instead. See Importing a demo.

Menu widgets are handled specially on the way in, by both routes: the file stores the menu by name, and the import looks up the matching menu on this site, skipping the widget if there is no menu by that name.

The rest of the Theme Options panel has its own separate import and export, covered in Theme Options, screen by screen.

Slider Revolution

The full-width animated hero at the top of most demo home pages is Slider Revolution, a commercial slider plugin by ThemePunch. It is not part of Industrial. The theme bundles a copy, registers it as one of its recommended plugins, and hands the demo sliders to it during an import — after that, the slider is the plugin's, and so is its documentation.

Where the theme's responsibility ends

Industrial's support covers the theme, the Anps Theme Plugin and the demo content. It does not cover Slider Revolution's own editor, its layer animations, its add-ons or its licensing. If a slide is misbehaving inside the slider editor, that is a question for ThemePunch.

What the theme does do:

The theme What it means for you
Ships plugins/revslider.zip in your download You do not buy the plugin separately
Registers it as a recommended plugin It appears in the plugin notice and the wizard
Calls the plugin's own "set as theme" hook on every load The plugin treats itself as bundled with Industrial rather than separately purchased
Imports the demo slider with a demo Demos 1 to 10 arrive with a working slider

Because the copy is bundled with the theme rather than purchased in your own name, it updates when the theme's plugin list offers a newer version, not from ThemePunch directly.

Installing Slider Revolution

It is optional. Nothing in the theme breaks without it — you simply get no hero slider, and any page whose content contains a slider shortcode shows nothing where the slider would be.

Two ways to install it:

Install it before importing a demo. The importer hands the slider file to the plugin as the last part of the run, and if the plugin is not active at that moment the import continues without it and prints "Revolution slider is not active. Demo data for revolution slider can't be inserted." Your pages are imported; the slider is not.

If you missed it, re-importing the whole demo is not the fix. A second import duplicates every page, post and image. Install the plugin, then import just the slider by hand as described below.

Demo sliders that arrive with an import

Demos 1 to 10 each ship one slider, exported from the demo site. Demos 11 and 12 do not — their heroes are built from Elementor widgets, not from Slider Revolution. See The twelve demos.

The imported slider is called slider3, whichever of demos 1 to 10 you imported, and the slide images arrive in your media library with the rest of the demo media. Find it at the Slider Revolution entry in the WordPress admin menu, and open it to replace the slide images and text with yours.

To import the slider on its own — the case above, where the plugin was installed after the demo:

  1. Take industrial.zip from your download and unzip it.
  2. Inside, find anps-framework/classes/importer/, then the folder for the demo you imported: dummy4 for demo 4 with WPBakery, dummy4e for demo 4 with Elementor. Elementor folders end in e.
  3. Take slider3.zip from that folder.
  4. In WordPress, go to Slider Revolution, choose the import option and upload that file.

Putting a slider on a page

A slider is placed by dropping it into the page like any other element. The demos place theirs at the very top of the home page, in a full-width row with a negative top margin so that the slider sits under the header.

With Elementor, drag the Slider Revolution widget — supplied by the plugin, not by the theme — into a section and pick your slider from its dropdown. The demo pages use exactly this widget. See Building pages with Elementor.

With WPBakery, add the Revolution Slider element to a row and pick the slider from its dropdown. See Building pages with WPBakery.

Anywhere else — a template, a text widget, a page you are editing without a builder — use the shortcode, with the slider's alias:

[rev_slider alias="slider3"]

That is the form the demo content uses, and the alias is visible in the slider's own settings if you rename it.

Where to get slider help

Slider Revolution has its own manual, and it is far more detailed than anything reproduced here would be:

Use it for slide layers, transitions, responsive behaviour, video backgrounds and navigation styling. Come back to Licence, updates and support for anything to do with the theme itself.

Licence, updates and support

Updates and support run through ANPS Club. You paste a licence key into one screen in the theme, and from then on the theme updates itself the way any other WordPress theme does: a notice appears, you press a button, it installs.

There is no API key to generate, no marketplace username to type, and nothing to download by hand unless you want to.

The ANPS Club licence screen

Everything on this subject lives at Appearance → ANPS Club Licence (themes.php?page=anps-club-license). The screen shows, in order: your licence status, the key itself, and the state of updates.

The ANPS Club Licence screen. Entering your key here enables automatic updates and support.
The ANPS Club Licence screen. Entering your key here enables automatic updates and support.

Your key comes from your account at club.anpsthemes.com. It is the same key whether you bought this theme on its own or hold a club membership covering every ANPS theme.

An unlicensed site is not a crippled site. Nothing in the theme is withheld without a key. Every option, every element, the demo importer and all twelve demos work exactly the same. What a licence adds is automatic updates and support, and nothing is taken away if you never enter one.

Activating your licence key

  1. Open Appearance → ANPS Club Licence.
  2. Paste the key into Licence key.
  3. Select Activate.

The screen then confirms "Your licence is active. This site gets automatic theme updates and support", and lists the domain it registered and the date your support and updates period runs to.

Deactivating is the mirror image. Deactivate this site, under the key, releases the licence so you can use it on another site. Use it before you retire a site or move a project to a new domain — the count of sites a licence covers is a count of activations, and an abandoned one keeps occupying a slot.

If the licence is already active on another production site, the screen says so, names the other domain, and offers Move my licence to this site. Moving it stops the other site receiving updates; nothing else about that site changes.

A few other verdicts you may meet, all of which the screen states plainly:

What it says What it means
This licence key is not active for this site The key was not recognised for this domain. Check for a stray space, then contact support
Your licence key is valid, but it is for a different theme The right key, the wrong product. Copy the key listed against Industrial
This site could not be activated The server declined and says why: a lapsed subscription, or every site slot in use
This theme is not set up correctly A build problem rather than anything you did. Send support the message shown

Development sites and licence slots

A staging copy or a local build should not consume a licence slot, so the theme does not try to license one. When the site's address is a development address, licensing is skipped entirely: no key is checked, no slot is used, and the screen says so rather than leaving you wondering.

The addresses treated as development:

Kind Values
Exact hosts localhost, 127.0.0.1, ::1, 0.0.0.0
Domain endings .test, .local, .localhost, .example, .invalid

A leading www. is ignored, so www.example.test counts the same as example.test.

staging. and dev. subdomains are not development addresses. staging.yoursite.com is a real, reachable hostname and could easily be somebody's live site, so it is treated as production and will use a slot. Deactivate it when you are done with it, or build on a .test or .local address instead.

Activate your licence on the live domain. A development site has no updates to receive, because the update check does not run there.

Updating the theme from the dashboard

With a licence active, the theme checks for a new release twice a day and publishes what it finds to the places WordPress already uses. An available update appears at Dashboard → Updates, on Appearance → Themes, and on the licence screen itself.

The licence screen's Updates section is the most informative of the three:

Row What it tells you
Installed version What is running now
Available The new version, if there is one, or that you are on the latest
Last checked How long ago the check ran

Two buttons sit under it:

If your support and updates period has ended, the screen names the version that was released and says the period has ended rather than pretending there is nothing new. Renewing makes it installable; the version you already have keeps working either way.

Your settings are not touched by an update. Theme Options, colours, typography, menus, widgets and all your content live in the database, not in the theme folder.

Ignore the Theme Update screen in Theme Options. Its text predates ANPS Club and describes a marketplace plugin and an API token. That is not how this theme is updated. The licence screen and Dashboard → Updates are the only routes, plus the manual one below.

Updating the theme by hand over FTP

Use this when the site cannot reach the update server, when the host blocks outgoing requests, or when you would rather do it yourself.

Back up the site first. Both the files and the database. This procedure replaces a whole directory; a backup is what makes that reversible.

Anything you edited inside the industrial folder is lost. You are replacing that folder wholesale. Edited templates, edited PHP and edited stylesheets all go. This is the reason for the child theme — see The child theme and custom code.

  1. Download the current release from your account at club.anpsthemes.com and unzip it. Unzip industrial.zip from inside it as well, so you have an industrial folder on your computer.
  2. Leave the theme active. Do not switch to another theme first: WordPress stores widget placement and menu locations per theme, and switching away and back can leave widget areas and menu positions empty.
  3. Connect over FTP or SFTP and go to wp-content/themes/.
  4. Rename the existing industrial folder to industrial-old. Renaming rather than deleting gives you an instant way back, and your custom CSS and options are in the database, so the site keeps rendering.
  5. Upload the new industrial folder in its place.
  6. Load the site's front end and check it, then delete industrial-old.

If the release also ships a new Anps Theme Plugin, update it the same way: replace wp-content/plugins/anps_theme_plugin with the new folder, leaving the plugin active.

Keep the folder names exactly as they are. The child theme names its parent as Template: industrial, and the licence check reads the parent theme's folder.

Asking ANPS Club support for help

Support requests go to club.anpsthemes.com/help. An active licence is what entitles a site to support.

A request that includes the following is usually answered once rather than three times:

Include Where to find it
The System Requirements summary line The line under the table at Appearance → Theme Options → System Requirements — PHP version, memory limit, execution time, ZipArchive. See What your server needs
Which demo you imported Or that you did not import one
Which page builder Elementor or WPBakery
Theme version 2.0.7, or whatever Appearance → Themes reports
Whether the child theme is active And whether you have edited any theme file
What you did, and what happened The action, the result, and the result you expected
The exact message Copied as text, including an importer log from the wizard's Finish step

Say what you did rather than what you concluded. "The import stopped after about two minutes and the pages list shows 14 pages" is a diagnosis; "the import is broken" is not.

Check Troubleshooting first. A good share of requests are one of the handful of problems documented there, and the answer is quicker to read than to wait for.

Translating the theme

Industrial is translation-ready: every string the theme and the plugin print is wrapped for translation, and both ship a template file you translate against. Nothing is hard-coded in English except the demo content, which is your copy to rewrite rather than translate.

Very little of a finished site is actually theme text. The words you see are mostly yours — page content, menu labels, widget titles. What needs translating is the small set of strings the software generates itself: the search box placeholder, the "Reset" button on a filter, the comment form labels, the Previous and Next arrows on a WooCommerce listing. The Portfolio and Team labels — "Portfolio", "Categories", "View portfolio" — come from the plugin rather than the theme, which is why there are two files to translate and not one.

Two text domains, two files to translate

The theme and the plugin are separate pieces of software with separate strings, so they are separate translation jobs. Translating one and not the other is the single most common reason a site ends up half translated.

Text domain Template file
Industrial (the theme) industrial wp-content/themes/industrial/languages/industrial.pot
Anps Theme Plugin anps_theme_plugin wp-content/plugins/anps_theme_plugin/languages/anps_theme_plugin.pot

A .pot file is the list of translatable strings with no translations in it. You never edit it. You use it to create a .po file for your language, which compiles to a .mo file — the binary WordPress actually reads. Both tools below handle that for you.

Plugins you install separately — WooCommerce, Contact Form 7, Elementor, Slider Revolution — carry their own translations and are not affected by anything in this chapter.

Setting the site language

Translate nothing until the site is running in the target language, because neither the theme nor the plugin loads a translation for a language the site is not set to.

Go to Settings → General → Site Language and choose the language. If it is not listed, WordPress downloads it the moment you save. Check Settings → General again afterwards and confirm the admin has switched language; if it has not, the language pack did not install and the host is blocking outbound requests to WordPress.org.

Translating with Loco Translate

Loco Translate edits translations in the browser. It is the easiest route and the one we suggest.

  1. Install and activate Loco Translate from Plugins → Add New.
  2. Go to Loco Translate → Themes and choose Industrial. For the plugin strings, go to Loco Translate → Plugins and choose Anps Theme Plugin instead; the rest of these steps are identical.
  3. Press New language.
  4. Choose your language. Under Choose a location, pick Custom — see the warning below — and press Start translating.
  5. Pick a string from the Source text list. The box below it is where the translation goes. Use the filter box above the list to find a particular string.
  6. Press Save. The .mo file is written and the front end uses it immediately.

Loco Translate shows a Sync button on an existing translation. Press it after a theme update: it adds strings that are new in this version and marks ones that have been removed, so you only have to translate the difference.

Translating with Poedit

Poedit is a desktop application, and the better choice for a long translation or one you want to keep in version control.

  1. Open Poedit and choose File → New from POT/PO file.
  2. Open languages/industrial.pot from a copy of the theme on your computer.
  3. Choose the language when Poedit asks.
  4. Translate the strings and save. Poedit writes both the .po and the .mo.
  5. Name the pair for your locale: industrial-de_DE.po and industrial-de_DE.mo for German, industrial-fr_FR.* for French. For the plugin the prefix is the plugin's text domain, so anps_theme_plugin-de_DE.mo.
  6. Upload both files to the folder named in the next section.

The locale code must match the one WordPress uses for the language you chose in Settings → General, including the region part and the underscore. A file named industrial-de.mo is ignored on a site set to de_DE.

Where translation files survive an update

This is the part that costs people their work. Updating the theme replaces the whole themes/industrial/ folder, and updating the plugin replaces the whole plugins/anps_theme_plugin/ folder. Anything you put inside either is gone.

Put translations here instead:

What you translated Where the file belongs
The theme wp-content/languages/themes/industrial-de_DE.mo
The plugin wp-content/languages/plugins/anps_theme_plugin-de_DE.mo

WordPress looks in those two folders before it looks inside the theme or the plugin, and nothing in an update touches them. Create the folders if they do not exist.

Never save a translation into the theme's own languages folder. It works, right up until the next update deletes it. This is what Loco Translate's Custom location avoids: it saves to wp-content/languages/loco/, which also survives.

A translation is not code, so the child theme is not the place for it either — the folders above are.

Demo text is copy, not translation

The demo content — page text, project descriptions, staff biographies, post bodies, widget titles, menu labels — is imported into your database as ordinary content. It is not translatable theme text and no .po file will touch it.

Rewrite it. Every word of it is placeholder copy about a fictional company, and editing a page to say what your company does is the same job in any language. Menu labels are edited at Appearance → Menus, widget text at Appearance → Widgets, everything else on the page or post itself.

If you want the same site in two languages, that is a multilingual plugin's job rather than a translation file's — WPML or Polylang, with the theme translated as above underneath. The theme's top bar widget areas accept the WPML language selector widget. See Going live for the rest of the launch checklist.

The child theme and custom code

One sentence covers this whole chapter: anything you edit inside the industrial folder is deleted the next time the theme updates. Not overwritten where it clashes — the folder is replaced wholesale, so an edit to header.php, a rule added to custom.css, a function dropped into functions.php and a translation saved into languages/ all disappear together, silently, in the middle of an otherwise routine update.

A child theme is how you avoid that. It is a second theme that inherits everything from Industrial and holds only your changes, in a folder an update never touches.

Why a child theme exists

WordPress lets one theme declare another as its parent. The child provides nothing but its own style.css header, and WordPress falls back to the parent for every template, function and asset the child does not have. When the child does have a file, the child's copy wins.

The consequences worth knowing:

Parent theme (industrial) Child theme (industrial-child)
Replaced by an update Yes, entirely No
Holds the templates and functions Yes Only the ones you copy in
Where your edits belong Never Here

You do not need a child theme to use Industrial. Most sites never need one: colours, fonts, layout, headers and footers are all settings, and CSS has its own screen. You need one the moment you want to change theme markup or add PHP.

Installing the bundled child theme

The child theme is in your download as industrial-child.zip. Do not build your own — this one already declares industrial as its template and is correct.

  1. Install and activate the parent first, if you have not. See Installing the theme.
  2. Go to Appearance → Themes → Add New → Upload Theme and upload industrial-child.zip.
  3. Press Activate.

Nothing about the site changes visibly, and nothing is lost: theme options, menus, widgets and content are stored outside the theme and carry over.

Custom CSS is stored per theme, not per site. WordPress keys the Custom CSS screen's content to the active stylesheet, so switching from industrial to industrial-child presents an empty Custom CSS box. Copy your CSS out of Appearance → Theme Options → Custom CSS before you activate the child, and paste it back afterwards.

After activation the child theme contains two files you will use:

File For
style.css Your CSS, below the theme header comment
functions.php Your PHP

Both ship containing a single comment and nothing else. The child's style.css is loaded on the front end automatically — the parent enqueues the active theme's stylesheet — so you do not need an @import line, and adding one only slows the site down.

What belongs in the child theme, and what does not

Change Where it goes
A few CSS rules Theme Options → Custom CSS
A lot of CSS, or CSS you want in version control The child's style.css
A hook, filter or small function The child's functions.php
Different markup in a template A copy of that template in the child
A translation wp-content/languages/ — see Translating the theme
A colour, font, header or layout choice Theme Options, not code
A new post type, shortcode or widget A plugin of your own, not the theme

The last two rows are the ones people get wrong. Reaching for CSS to change something Theme Options already controls leaves you fighting the theme's own stylesheet forever; check Theme Options, screen by screen first. And registering a post type in a theme means the content vanishes from the admin the day you change theme — that belongs in a plugin.

Overriding a parent template

Copy the file, keep the path, edit the copy.

Industrial loads its partials through WordPress's own template lookup, which checks the child theme before the parent. So to change the markup of header layout 1:

  1. Find templates/template-header-1.php in the parent theme.
  2. Copy it to industrial-child/templates/template-header-1.php, creating the templates folder.
  3. Edit the copy.

The same works for the top-level templates — page.php, single.php, archive.php, 404.php, footer.php, comments.php — for the blog and portfolio partials in templates/, and for the WooCommerce overrides in woocommerce/.

An overridden template stops receiving fixes. Your copy is frozen at the version you copied. When an update changes that template — a bug fix, a new option, an accessibility correction — your copy does not get it. Copy as few templates as you can, and re-check them after a major update.

One file is the exception: templates/template-footer-solar.php is loaded by absolute path rather than through the lookup, so a child copy of it is ignored. To change the Solar footer, copy sidebar-footer.php into the child instead and adjust what it loads.

Adding PHP to the child theme

industrial-child/functions.php is loaded before the parent's functions.php, on every request. It is a normal theme functions file: add hooks, filters and functions, and do not redeclare anything the parent already defines.

A worked example. The plugin filters the list of Elementor widgets it registers through anps_widgets_filter, so you can hide widgets you never use and shorten the Elementor panel:

add_filter( 'anps_widgets_filter', function ( $widgets ) {
	unset( $widgets['twitter'] );
	unset( $widgets['timeline'] );

	return $widgets;
} );

The keys are the widget file names in the plugin's widgets/ folder. Removing a widget from the list only removes it from the panel; pages already built with it keep working, because the removal happens at registration and not in the database.

Test PHP on a staging copy. A syntax error in functions.php takes the whole site down, admin included, and the only way back is editing the file over FTP. Nothing in the WordPress admin can rescue you from it.

When Custom CSS is the better answer

For CSS, Appearance → Theme Options → Custom CSS beats the child theme most of the time:

Use the child theme's style.css instead when the CSS is long enough to want comments and structure, or when you keep the site in version control.

Either way, the rule beneath all of this is the same: the parent theme folder is not yours to edit. Keeping that line means an update is a two-minute job rather than an afternoon of restoring changes — see Licence, updates and support.

Going live

Between an imported demo and a site you can publish there is a list of things that are easy to miss, because the site already looks finished. Two of them send mail to the wrong address and hot-link images from someone else's server, so work through this chapter before you announce the site.

Replacing the demo text and images

Do it page by page rather than by searching for stray words. Open Pages, sort by title, and work down the list. For each page: the title, the headings, the body text, the buttons and their links, and the images.

The demo also fills in places that are not pages:

Where What to replace
Posts The demo articles. Delete them or rewrite them; do not leave them published
Portfolio The demo projects, their images and their categories
Team The demo staff, their photographs and their social links
Products The demo products, prices and gallery images
Appearance → Widgets Addresses, phone numbers, opening hours and social links in the footer and sidebars
Appearance → Theme Options Contact details in the top bar and the footer
Slider Revolution Slide images and slide text, for the demos that ship a slider

The demo photographs are licensed for the demos, not for your site. They are placeholders. Every image that arrived with the demo must be replaced with an image you own or have licensed before the site is public.

When the pages are done, open Media → Library and sort by date: the demo images are the oldest batch. Delete the ones nothing uses, and delete attachments before the pages that used them, or you will not be able to tell which was which.

Deleting demo content you will not use

Demos 1 to 10 bring 27 pages, and most sites need a third of them. The pages that exist to show off elements — the FAQ, the notifications, the progress bars, the column variants of the news page — are the first to go.

Remove the page from every menu first, delete it, then empty the trash — a page in the trash is still in the database. Check for widgets that pointed at it, then reload the front page and the footer looking for links that now 404.

If you are not using WooCommerce, deactivate it rather than deleting the Shop, Cart, Checkout and My account pages one at a time. If you are not using the Portfolio or the Team post type, leave them empty; they add nothing to the front end when they have no entries.

Site title, tagline and search-engine visibility

At Settings → General, set the Site Title and the Tagline. The theme and WordPress both use them — in the browser tab, in feeds, in the mail WordPress sends, and wherever you have chosen a text logo instead of an image. Check the admin email address on the same screen: WordPress sends its notifications there, and on Demos 11 and 12 so does the contact form.

At Settings → Reading, clear Discourage search engines from indexing this site if it was set while you were building. Setting it is the right thing to do on a staging site and the wrong thing to leave in place on a live one.

A demo import sets all three of these, so usually you are confirming them rather than setting them.

Setting Where What it should be
Front page Settings → Reading A static page — the demo's Home page, or yours
Posts page Settings → Reading The News or Blog page
Permalinks Settings → Permalinks Post name; the importer sets /%postname%/

Two things to do here before launch:

Check Appearance → Menus → Manage Locations, not just the menu contents. The importer assigns one imported menu to Primary Navigation, and on a demo that shipped several menus it may not be the one you want.

The theme registers Primary Navigation normally, and a second location, Right Navigation, only when the header is set to the centred-logo style. Switch to that header at Appearance → Theme Options → Header Options and the second location appears unassigned — the right-hand half of the header stays empty until you assign a menu to it. See Menus and the mega menu.

Then walk the menu as a visitor: every item, including the sub-items and the mega-menu columns, and every footer link.

Contact form recipients

This is the item that most often survives to launch unnoticed, because the form works — it simply sends the message somewhere else.

Demos 1 to 10 import a contact form addressed to a fixed address left over from the demo build. It is not your admin email and it is not on your domain. Until you change it, enquiries from your site go to someone else's mailbox. Demos 11 and 12 use [_site_admin_email] instead, which resolves to the address in Settings → General — check that address is right too.

Open Contact → Contact Forms, edit each imported form and check the Mail tab:

Field What to check
To Your address, or [_site_admin_email]
From An address on your own domain; hosts reject mail claiming to be from elsewhere
Reply-To in Additional headers Reply-To: [your-email], so you can reply to the enquirer
Message body That every form field you kept appears in it

Then submit the form on the live site and confirm the message arrives. If it does not, the cause is almost always the host's mail configuration rather than the form — an SMTP plugin is the usual fix.

Logos and favicon before launch

Upload your own logo and favicon at Appearance → Theme Options → Logos & Media. The screen takes a primary Logo, a separate Front page logo for a transparent header, a Sticky logo and a transparent variant of it for the scrolled header, Mobile logos for screens under 1200px, the Favicon for the browser tab and a 152×152px Home screen icon for phones. Each has a height field beside it: set the height there rather than uploading a pre-scaled image, and upload at twice that height so the logo stays sharp on high-density screens.

After a demo import the logo and favicon options point at the ANPS demo server. The theme keeps loading them from there — your site displays another site's files, and shows nothing at all if that server changes. Upload your own and re-select them here.

Image sizes and regenerating thumbnails

The theme registers five crops of its own — for gallery thumbnails, featured images, portfolio items and team photographs — in addition to WordPress's thumbnail, medium and large sizes at Settings → Media.

Changing a size only affects images uploaded afterwards, so after any change to Settings → Media you have to regenerate the existing ones with a thumbnail-regeneration plugin.

That matters even if you changed nothing: the importer deliberately switches the theme's crops off while it runs, so that importing a few hundred images does not resize every one of them into every size and exhaust the memory limit. Imported media therefore arrives without the theme's crops. If portfolio, team or gallery images look stretched or mis-cropped after an import, regenerate thumbnails once and they will be rebuilt.

Caching and what to flush when

A caching plugin is the single largest speed improvement available to you, and it is also the reason a change you just made does not appear.

Flush the cache after:

Change What to flush
Theme options, colours or typography The page cache, then reload with a hard refresh
Custom CSS The page cache and the minified CSS cache, if the plugin has one
An Elementor page Elementor's own CSS, via Elementor → Tools → Regenerate CSS & Data
A demo import Everything — page cache, CSS cache and object cache
Switching page builder Everything, and check the pages afterwards

If a change refuses to appear after a flush, check it in a private window before you change anything else. Browsers cache CSS harder than caching plugins do.

HTTPS and site addresses

Serve the live site over HTTPS. Forms, logins and anything you sell need it, and browsers mark pages that collect input without it.

Speed before launch

Four things account for nearly every slow Industrial site, in this order:

  1. Unoptimised images. The biggest cause by far. Never upload an image larger than the space it appears in — a 4000px photograph in a 360px portfolio tile costs every visitor the full download — and export it compressed.
  2. Plugins. Each one adds work to every request. To find a slow one, deactivate all but the plugins the theme requires, measure, then reactivate one at a time.
  3. No caching. See the section above.
  4. The host. A site can only run as fast as the plan it is on. If you have done all of the above and pages are still slow, the conversation is with your host.

The pre-launch checklist

Done Item
Every page's text is yours
Every demo image is replaced and the unused ones are deleted
Demo posts, projects, team members and products are deleted or rewritten
Site title and tagline set
"Discourage search engines" cleared
Front page and posts page set at Settings → Reading
Permalinks settled; portfolio and team singles load
Menus assigned to their locations; every link checked
Contact form To and From changed, and a test message received
Logo, mobile logo and favicon uploaded to your own media library
Thumbnails regenerated
HTTPS on, no mixed-content warnings
Caching plugin installed and flushed
Licence key entered, so updates reach you
A backup taken of the finished site

The licence key is at Appearance → ANPS Club Licence — without it the theme cannot tell you an update exists. If something on this list does not behave, Troubleshooting covers the common cases, and Theme Options, screen by screen is the reference for every setting named above. If you have not imported a demo yet, start at Importing a demo.

Troubleshooting

Organised by what you are looking at, not by cause. Find the symptom, read the cause, apply the fix.

Two general points before the list. First, most problems here are the server rather than the theme: an import that dies part way, a builder page that saves incomplete, a plugin that will not install. Appearance → Theme Options → System Requirements measures your server against what the theme is built for, and prints a forwardable sentence under every row that falls short — see What your server needs. Second, WP_MEMORY_LIMIT in wp-config.php cannot raise the memory limit above the ceiling PHP is configured with, so the fix for several of these is a request to your host and nothing you can do from the dashboard.

Symptoms during a demo import

The import stops part way and the page dies

The next admin page load shows "A demo import was started and did not finish. Your site may be only partly imported — check its content before importing again."

PHP ran out of time or memory. An import creates several hundred posts and pages and downloads every demo image, which takes minutes and is the single heaviest thing the theme ever does.

Check Max execution time and Memory limit on the System Requirements screen. The theme is built against 600 seconds and 256M. If either is lower, ask your host to raise it — the hint under the failing row is written to be forwarded as it stands.

Do not simply run the import again. The first run already created content, and a second run adds a second copy of all of it: duplicate pages, duplicate menus, duplicate media. Restore the backup you took, or start from a clean WordPress install, then import once with the limits raised.

The import refuses and says to activate only one page builder

"Please activate only one page builder. If you have 2 or more page builders activated, you cannot use demo content."

Elementor and WPBakery are both active. The demo packs come in two variants, one per builder, and the importer picks by which builder is active — with both on, it cannot tell which site you want.

Go to Plugins and deactivate one. Deactivating a builder does not delete anything it has already built. Elementor is the recommended choice for a new site; see The twelve demos.

Demo 11 or Demo 12 cannot be selected in the grid

Both tiles are greyed out and carry one of three lines: "Activate Elementor to import this demo", "Deactivate WPBakery to import this demo", or "Activate Elementor and deactivate WPBakery to import this demo".

Demos 11 and 12 exist only as Elementor layouts. They require Elementor active and WPBakery inactive — the tile states the condition you have not met. Do what the line says at Plugins and reload the import screen.

The import screen warns about the server before you start

"One or more issues with server found! Please take a look at the System Requirements tab."

At least one requirement is not being met. The warning does not block the import, and a row being short of the recommendation is not automatically fatal — but this is the point at which to read the System Requirements screen rather than after a failed run. See Importing a demo.

Symptoms after a demo import

Every widget area is empty, or holds the demo's widgets instead of mine

Expected, not a fault. An import empties every widget area before it runs and then installs the demo's own widgets. If you imported onto a site whose sidebars and footer you had already arranged, that arrangement is gone and cannot be recovered except from a backup.

Rebuild the areas at Appearance → Widgets, or import on a clean install instead. Importing a demo covers what else an import overwrites, and Widgets and sidebars covers the areas themselves.

My shop, cart, checkout or account pages have disappeared

Also expected. An import permanently deletes the WooCommerce Shop, Cart, Checkout, My account and Terms pages — not to the trash, deleted — and then points WooCommerce at the demo's own copies of Shop, Cart, Checkout and My account.

If you had customised those pages, they are gone. If WooCommerce is left without them, recreate them at WooCommerce → Status → Tools → Create default WooCommerce pages and re-select them under WooCommerce → Settings → Advanced. See Shop and products.

Contact form submissions never arrive

The demo's contact form is imported with its To address still set to the address used when the demo was built, not yours, so mail goes somewhere you cannot read. This affects demos 1 to 10; demos 11 and 12 ship the form correctly set to the site administrator's address.

Go to Contact → Contact Forms, open the form, and on the Mail tab set To to your own address or to [_site_admin_email]. Do this before you launch, and send yourself a test message afterwards.

Demo images are missing, or show as broken thumbnails

The importer downloads every demo image from our server into your media library one at a time. Any that fail are reported individually, with messages from the WordPress importer such as "Remote server did not respond", "Zero size file downloaded" or "Remote file is too large, limit is …".

Three causes, in order of likelihood:

Cause Fix
The host blocks outbound HTTP requests Ask the host to allow them, or to enable cURL
The run timed out before the images finished Raise Max execution time, then re-import on a clean install
The uploads folder is not writable Check the Uploads directory row on System Requirements

For a handful of missing images, upload replacements by hand and set them on the pages that need them. Re-importing to recover images duplicates all the content as well.

The menu is empty, or the header shows no menu at all

The import creates the demo's menus but has to guess which one belongs in the theme's menu location, and it assigns the second menu it finds — or the only one, if the demo ships a single menu.

Go to Appearance → Menus → Manage Locations and set Primary Navigation to the right menu. The menus themselves are all present under Appearance → Menus; see Menus and the mega menu.

Page builder and page rendering symptoms

A page shows unstyled text, or shortcodes in square brackets

If you see [vc_row], [anps_featured] or similar in the page body, the Anps Theme Plugin is not active. It supplies every element and shortcode the demo content uses. Activate it at Plugins, or install it from Appearance → Install Plugins.

If instead the page shows its text with no layout at all and there are no shortcodes visible, the page's Elementor layout data did not survive the import. The importer detects this and prints a message naming the affected page IDs, ending with a request to send the whole message to support.

Do not open an affected page in Elementor. Elementor sees no layout data, offers to convert the page from its plain content, and accepting that replaces the layout permanently. There is no undo.

Send the message to support as it asks. It contains the diagnostic detail — what the data looked like and why it could not be read — that identifies which host behaviour corrupted it.

An element or widget renders nothing where I placed it

The builder shows it in the editor, the front end shows an empty gap. Almost always the element has nothing to list yet.

Element Renders nothing until
Anps Recent Blog, Anps Blog, Solar - Post Grid There is a published post
Anps Portfolio, Anps Recent Portfolio, Solar - Project Grid There is a published portfolio item — see Portfolio
Anps Team, Anps Team With Description There is a published team member — see Team
Anything WooCommerce WooCommerce is active and a product is published

A category or tag filter set on the element narrows it further, so an element pointed at a category with no posts in it is empty for the same reason.

I switched page builder and my pages are empty or full of shortcodes

The two builders store a page in different places: WPBakery writes shortcodes into the page content, Elementor writes its layout into separate post data. Neither can read the other's, and there is no converter in either direction.

A WPBakery page opened after switching to Elementor shows its shortcodes as text; an Elementor page opened after switching to WPBakery shows nothing. Switching back restores both, because neither builder deleted anything — deciding to change builder for good means rebuilding the pages by hand. Choose the builder before you import, not after. See Building pages with Elementor and Building pages with WPBakery.

A page is completely blank on the front end

On a Demo 12 site this is usually the Elementor kit: the global colours, typography and container width live in a kit, and a page rendered without one comes out empty. The importer activates the imported kit and clears Elementor's cached CSS for exactly this reason, so a blank page means that step did not take. Go to Elementor → Tools → Regenerate CSS & Data, then reload.

If it is blank on every page and every theme, it is a PHP fatal error rather than a layout problem — see the update section below.

Saving a long builder page loses part of the layout

A page with many sections saves successfully but comes back with sections, columns or settings missing. Nothing reports an error.

This is max_input_vars. PHP silently discards everything past that many form fields, and a long builder page sends thousands. The theme is built against 3000; below that, the tail of the page is thrown away on save.

Read the Max input vars row on System Requirements. Raising it is a host change — it cannot be set from wp-config.php. Until it is raised, split the page into fewer, simpler sections or build it in stages, saving as you go.

Changes I saved do not appear on the site

The theme versions its own stylesheets and scripts by file timestamp, so a browser holding an old copy is not usually the cause. Work through these in order:

  1. A caching plugin or host page cache. Clear it. Most hosts that provide one also have a purge button in the dashboard.
  2. A CDN. Purge it separately; clearing the plugin cache does not.
  3. Elementor's generated CSS. Elementor writes per-page CSS files. Go to Elementor → Tools → Regenerate CSS & Data.
  4. Your own browser. Load the page in a private window to rule it out.
  5. The wrong screen. A page-level setting overrides the site-wide one, so check the page's own Page Setup box before assuming Theme Options is broken — see Page layout and Page Setup.

Every portfolio item or team member returns a 404

You changed the portfolio or team slug in Theme Options. The new slug is in use, but WordPress's rewrite rules still describe the old one, so the new URLs match nothing.

Open Settings → Permalinks and press Save Changes without altering anything. That rebuilds the rules and the items return. See Portfolio and Team.

Setup wizard, plugin and licence symptoms

The setup wizard did not open when I activated the theme

The wizard opens itself once, on the first admin page you load after activating the theme, and the flag that triggers it lasts thirty minutes. Activating the theme as part of a bulk action, or on a multisite network, consumes the flag without redirecting. Pressing "I'll set it up myself" also marks it finished so it stops prompting.

None of that loses you anything. Open it at Appearance → Setup Wizardthemes.php?page=anps-setup — which is also linked at the top of the Theme Options sidebar. See The setup wizard.

A plugin will not install in the wizard

The wizard reports the reason on the plugin's row. The common ones:

Message Cause and fix
"You do not have permission to install plugins." Your user cannot install plugins, or file modifications are disabled in wp-config.php
"The plugin was downloaded but could not be found afterwards." The zip unpacked to an unexpected folder; install it from Appearance → Install Plugins
"No download could be found for this plugin." The download URL could not be resolved; install from Appearance → Install Plugins
"The theme plugin registry is unavailable." The theme's plugin list did not load; install from Appearance → Install Plugins
Anything mentioning a connection or a timeout The host blocks outbound HTTP, or is too slow to fetch the zip; ask the host

Check the row before you retry. On a host that cuts the request short, the plugin often did install and activate before the request died. The wizard re-reads the plugin's real state afterwards, so the row settles on Active, Installed or Failed — and Failed on the row is not proof the plugin is absent. Look at Plugins before installing it a second time.

Every wizard step is skippable. Skip the Plugins step, install the plugin from Appearance → Install Plugins or by uploading the zip from your download at Plugins → Add New → Upload Plugin, and carry on.

The licence key will not activate

All of these appear on Appearance → ANPS Club Licence, which tells you which one you have hit.

What the screen says What it means
"This looks like a development site" Licensing is deliberately skipped here. Activate on the live domain; development sites never use a licence slot
"This licence is already in use on another site" Press Move my licence to this site. The other site stops receiving updates
"Your licence key is valid, but it is for a different theme" You pasted the key for another ANPS theme
"This licence key is not active for this site" Re-check the key against your account, then contact support
"The licence server returned an unreadable response" The request did not get through. The host is blocking outbound HTTPS, or cURL is missing — check the cURL row on System Requirements
"your support and updates period has ended" The key is fine and the site keeps working, but new versions are withheld until you renew

Your key is in your account at club.anpsthemes.com. Paste it whole, with no surrounding spaces. See Licence, updates and support.

Symptoms after a theme update

A white screen, on the front end and in the admin

A PHP fatal error. WordPress shows nothing because nothing could run. Three causes, in the order worth checking:

  1. The plugin was not updated with the theme. The theme and the Anps Theme Plugin are released as a pair and the theme expects the matching plugin version. Updating from Appearance → ANPS Club Licence → Update now installs both; a manual theme upload does not. Update the plugin at Plugins, or upload anps_theme_plugin.zip from your download.
  2. Code in your child theme. A function or hook it relies on may have changed. Rename the child theme's folder over FTP to fall back to the parent, confirm the site returns, then fix the code. See The child theme and custom code.
  3. An edit inside the parent theme folder. An update replaces that folder entirely, so a half-replaced customisation can leave a call to something that no longer exists.

To see the actual error, read your host's PHP error log, or add define( 'WP_DEBUG', true ); define( 'WP_DEBUG_LOG', true ); to wp-config.php and read wp-content/debug.log. Turn both off afterwards.

To get the admin back with no FTP access at all, ask the host to rename the wp-content/themes/industrial folder: WordPress falls back to a default theme and you can work from there.

The theme says an update is available but installing it does nothing

Check the Support and updates row on Appearance → ANPS Club Licence. When the support period has expired the new version is announced but withheld, and the screen names the version and offers a renewal link.

What to send support

Support is at club.anpsthemes.com/help. A ticket is answered faster when it arrives with the facts, so send all of these:

Send Where to get it
The server summary line The bottom of Appearance → Theme Options → System Requirements: PHP version, memory limit, max execution time and whether ZipArchive is available, in one line
The theme version Appearance → Themes, or the ANPS Club Licence screen
The Anps Theme Plugin version Plugins
Which builder is active Elementor, WPBakery, or neither
Which demo you imported, if any Its number, and whether the Elementor or WPBakery variant
The exact error text Copied, not described or retyped
The URL of an affected page A link we can load

If the importer printed a message asking you to send it to support, send that message in full. It carries diagnostic detail that cannot be reconstructed afterwards.

Do not send a ticket asking us to guess: "the slider does not work" without the summary line above takes two round trips before anyone can look at it.

Element and widget reference

Two lists: every widget the Anps Theme Plugin registers into Elementor, and every element it maps into WPBakery. They are the same building blocks described in Building pages with Elementor and Building pages with WPBakery, gathered here so you can look one up by name.

Both tables are read out of the plugin when this manual is built, from the same registry the builders themselves read. Nothing here is typed by hand, so the lists cannot fall behind the plugin: if a widget exists in your copy of the plugin, it is in the table below, and if it is in the table, it is in your copy.

The right-hand column is the internal name. You do not need it to build a page — it is what appears in a filter, a template override or a support request, and for WPBakery it is the shortcode the element writes into the page.

Elementor widgets

All of these appear in Elementor under the Industrial Elements category. There are 87 of them; search the widget panel by the name in the left column.

General widgets

Available on any site with the plugin active, whichever demo you imported.

Widget Internal name
Anps Alert alert
Anps Appointment appointment
Anps Button button
Anps Counter counter
Anps Call to Action cta
Anps Download download
Anps Error404 error404
Anps Featured Content featured_content
Anps Featured Horizontal Content featured_horizontal_content
Anps Gallery gallery
Anps Gallery Slider gallery_slider
Anps Heading heading
Anps Icon icon
Anps Portfolio portfolio
Anps Quote quote
Anps Recent Blog recent_blog
Anps Recent Portfolio recent_portfolio
Anps Subscribe subscribe
Anps Team team
Anps Team With Description team_with_description
Anps Blog blog
Anps Contact Info contact_info
Anps Contact Info Card contact_info_card
Anps Google Maps google_maps
Anps Info info
Anps List list
Anps Social Icon social_icon
Anps Table table
Anps Timeline timeline
Anps Logos logos
Anps Twitter twitter
Anps Testimonials testimonials

Demo 11 widgets

Built for Demo 11's layouts. They work on any page, but their styling assumes that demo's palette and content.

Widget Internal name
Anps Demo 11 Hero Slider demo11_hero_slider
Anps Demo 11 About Hero demo11_about_hero
Anps Demo 11 About Intro demo11_about_intro
Anps Demo 11 About Stats demo11_about_stats
Anps Demo 11 About Values demo11_about_values
Anps Demo 11 About Experts demo11_about_experts
Anps Demo 11 About CTA demo11_about_cta
Anps Demo 11 Trust Strip demo11_trust_strip
Anps Demo 11 Solutions demo11_solutions
Anps Demo 11 About Split demo11_about_split
Anps Demo 11 Deployment Steps demo11_deployment_steps
Anps Demo 11 Case Studies demo11_case_studies
Anps Demo 11 KPI Strip demo11_kpi_strip
Anps Demo 11 Final CTA demo11_final_cta
Anps Demo 11 Sectors demo11_sectors
Demo 11 Insights Modern demo11_insights
Anps Demo 11 Contact Hero demo11_contact_hero
Anps Demo 11 Contact Info Block demo11_contact_info_block
Anps Demo 11 Contact Locations demo11_contact_locations
Anps Demo 11 Contact Form demo11_contact_form
Anps Demo 11 Contact Channel demo11_contact_channel
Anps Demo 11 Solutions Hero demo11_solutions_hero
Anps Demo 11 Portfolio Grid demo11_portfolio_grid
Anps Demo 11 Featured Project demo11_featured_project
Anps Demo 11 Related Insights demo11_related_insights
Anps Demo 11 Portfolio Single Hero demo11_portfolio_single_hero
Anps Demo 11 Portfolio Overview demo11_portfolio_overview
Anps Demo 11 Portfolio Benefits demo11_portfolio_benefits
Anps Demo 11 Portfolio Process Steps demo11_portfolio_process
Anps Demo 11 Portfolio Use Cases demo11_portfolio_use_cases
Anps Demo 11 Portfolio CTA demo11_portfolio_cta

Demo 12 widgets

Built for Demo 12's layouts, the same way.

Widget Internal name
Solar - Section Head demo12_section_head
Solar - Page Banner demo12_page_banner
Solar - Photo CTA demo12_cta_photo
Solar - Hero Slider demo12_hero
Solar - Marquee demo12_marquee
Solar - Services Explorer demo12_services_explorer
Solar - Project Spotlight demo12_project_spotlight
Solar - Savings Calculator demo12_calculator
Solar - Stats Grid demo12_stats_grid
Solar - Testimonials demo12_testimonials
Solar - Service Rows demo12_service_rows
Solar - Process Steps demo12_process_steps
Solar - Story Split demo12_story_split
Solar - Values Grid demo12_values_grid
Solar - Timeline demo12_timeline
Solar - Team Grid demo12_team_grid
Solar - Offices demo12_offices
Solar - Project Grid demo12_project_grid
Solar - Post Grid demo12_post_grid
Solar - Featured Post demo12_post_feature
Solar - Contact Split demo12_contact_form
Solar - Project Intro demo12_project_intro
Solar - Gallery demo12_gallery
Solar - Pull Quote demo12_quote

WPBakery elements

The plugin maps 32 elements into WPBakery, listed under Anps Shortcodes when you add an element. The shortcode tag is what you would write by hand, or what you will see in the text editor if you ever switch a page off the builder.

Element Shortcode
Alert [alert]
Appointment [appointment]
Blog [blog]
Button [button]
Call to Action [anps_cta]
Contact info [contact_info]
Contact info card [contact_info_card]
Counter [counter]
Download [download]
Error 404 [error_404]
Featured content [anps_featured]
Featured horizontal content [anps_featured_horizontal]
Gallery [gallery_simple]
Gallery slider [gallery_slider]
Google maps [google_maps]
Heading [heading]
Icon [anps_icon]
Info [info_element]
List [anps_list]
Logos [logos]
Portfolio [portfolio]
Quote [quote]
Recent blog [recent_blog]
Recent portfolio [recent_portfolio]
Social icons [social_icons]
Subscribe [anps_subscribe]
Table [table]
Team [team]
Team with description [team_with_description]
Testimonials [testimonials]
Timeline [timeline]
Twitter [twitter]

Finding an element by name

Both builders search the list of available elements, so the name in the tables above is all you need.

Builder Where to search
Elementor Open the widget panel and type into the search box at the top. The theme's widgets are grouped under Industrial Elements
WPBakery Press Add Element and type into the search field. The theme's elements are grouped under Anps Shortcodes

Searching by what the element does usually works as well as searching by its exact title: "portfolio", "team", "counter", "testimonial", "solar".

If an element you expect is not there, it is almost always one of four things.

The Anps Theme Plugin is inactive. Every widget and element in this chapter comes from the plugin, not the theme. With the plugin deactivated the builders still work, but both of the theme's categories disappear completely. Check Plugins and see Installing the theme.

You are looking in the wrong builder. The general sets match one for one — the same 32 elements in both lists, under different names. The difference is the Demo 11 and Demo 12 widgets: everything named for Demo 11, and everything with the Solar - prefix, exists only in Elementor and has no WPBakery counterpart. If a demo's page bands are missing, check which builder is active.

It is a child element. Several WPBakery elements only exist inside their parent: a Testimonial item lives inside Testimonials, a Logo inside Logos, a Timeline item inside Timeline. They are deliberately kept out of the main element picker, because adding one on its own would render nothing. Add the parent first, then add items inside it.

Elementor has the widget hidden. One widget, Demo 11's Insights Modern, only appears while Elementor's Nested Elements feature is enabled, because it holds other widgets inside itself. Look for it in Elementor's own feature settings under Elementor → Settings.

A widget that is present but renders nothing on the page is a different problem: usually it queries content the site does not have yet — a portfolio grid with no portfolio items, a recent-posts strip filtered to a category with no posts — or it is a demo widget reading content that only that demo's import creates. See Troubleshooting.

Credits

Industrial is built on open-source work by other people. This chapter lists it, with the version the theme ships, so that a licence audit or a security review has the facts in one place.

Libraries the theme loads

Everything here is bundled inside the theme and loaded on the front end. Versions are read from the shipped files.

Library Version Licence Home
jQuery Whatever WordPress core ships MIT jquery.com
Bootstrap 3.4.1 (JavaScript), 3.3.5 (bundled Sass) MIT getbootstrap.com
Font Awesome Free 5.12.1 Icons CC BY 4.0, fonts SIL OFL 1.1, code MIT fontawesome.com
Owl Carousel 2 2.1.6 MIT owlcarousel2.github.io
Isotope 3.0.6 GPLv3 for open-source use, commercial licence otherwise isotope.metafizzy.co
Moment.js 2.11.2 MIT momentjs.com
Pikaday BSD and MIT github.com/dbushell/Pikaday
Swipebox 1.5.1 MIT github.com/brutaldesign/swipebox
Modernizr 3.3.1, custom build (flexbox detection only) MIT modernizr.com
Waypoints 4.0.0 MIT github.com/imakewebthings/waypoints
GMAP3 7.2 GPL-3.0+ github.com/jbdemonte/gmap3
jquery-countTo MIT github.com/mhuggins/jquery-countTo
jquery-doubleTapToGo DACHCOM.DIGITAL fork, after Osvaldas Valutis MIT github.com/dachcom-digital/jquery-doubleTapToGo
Flexibility MIT github.com/10up/flexibility
normalize.css 3.0.3, inside the Bootstrap stylesheet MIT necolas.github.io/normalize.css

Two are loaded from a remote host rather than bundled, and only on pages that need them:

Loaded from Used for
Google Maps JavaScript API Map elements and the Google Maps widget; needs your own API key
Vimeo Froogaloop 2 Vimeo background video in a section

Build tooling

Not shipped to the browser. Used to compile the theme's stylesheets from scss/.

Tool Licence
Sass MIT
Gulp MIT
PostCSS and Autoprefixer MIT
RTLCSS MIT
CSSO MIT

Third-party plugins in your download

Bundled as zip files beside the theme, each under its own licence and its own support.

Plugin By Role
Slider Revolution ThemePunch The demo hero sliders. See Slider Revolution
WPBakery Page Builder WPBakery The legacy page builder. See Building pages with WPBakery

The theme also recommends, but does not bundle, plugins that are installed from the WordPress.org directory: Font Awesome, Contact Form 7, WooCommerce, Newsletter, Elementor and Envato Market. Those carry their own licences and credits.

The WordPress Importer

Demo content is imported by a copy of the official WordPress Importer plugin, included inside the Anps Theme Plugin at importer/. It is GPLv2 and is maintained by the WordPress contributors.

Fonts and icons

Asset Source
Font Awesome 5 icon webfonts, in webfonts/ Font Awesome Free
Font Awesome 4 compatibility shims, css/v4-shims.min.css Font Awesome Free
Glyphicons Halflings, in fonts/ Ships with Bootstrap 3
Google Fonts, loaded on demand Chosen on the Typography screen; see Colours and typography

Google Fonts are requested from Google's servers only for the families you actually select, and not at all if you set every font role to a websafe or uploaded font.

Images and demo photography

The theme's own graphics — the logo placeholder, the map marker, the video play icons, the boxed-layout background patterns and the colour picker sprite — were produced for Industrial.

The photography in the demo content is licensed stock, sourced from Depositphotos and Photodune.

The demo photographs are placeholders. They are imported into your media library so the demo looks like the preview, and they are covered by the licence shipped with the theme, but they are not photographs of your business. Replace them — see Going live.

Licence files in your download

File Covers
GPL.txt The GNU General Public License, version 2
README_License.txt The split-licence statement: PHP and integrated HTML under the GPL, everything else — CSS, images, design — under the licence you purchased

The same GPL text ships inside the theme folder as _LICENSE.txt.

Files bundled but not loaded

Listed for completeness, because a file audit of the package will find them and they are not credited above. Nothing in the theme enqueues any of them, and removing them changes nothing on the front end.

Path What it is
css/prettyPhoto.css and images/prettyPhoto/ prettyPhoto lightbox styling, from an earlier release. The theme's own lightbox is Swipebox
css/skins/ LayerSlider skins, from an earlier release. Industrial does not ship or use LayerSlider
css/ie-fix.css Internet Explorer fixes, from an earlier release