The process of creating a new website can seem daunting, especially if you have little experience with coding. One solution is to use a page builder like Elementor (or its Pro version) to quickly design your site and fully customize it.

If you go this route, however, you’ll also want a free WordPress theme that integrates seamlessly with your chosen plugin.

Whether you want to create a beautiful blog or an ecommerce site (with Woocommerce, for example) you’ll find something you like with the themes below.

Let’s see 10 of the best free Elementor themes!

What are the top 10 free themes to use with Elementor in 2021?

1. Astra

Astra is one of the most popular themes for people who make a living creating sites with Elementor.

It’s so tightly integrated with Elementor that the Astra team even has an entire homepage explaining why Astra is a great Elementor theme.
First of all, Astra gives you detailed control over the layout of every article, page or custom article type on your site. For each content item, you can choose to

  • use the global default values
  • change the width of your content
  • disable sidebars (or even add an extra sidebar!)
  • disable your article title, header and/or footer.

Astra also has detailed styles in the WordPress Customizer that allow you to globally control the style of your Elementor designs. You can even add global styles for the buttons that appear in your Elementor designs, which is pretty handy.

And finally, at less than 50KB and without jQuery, Astra is well optimized for performance.

GeneratePress

The GeneratePress theme prides itself on its high standards of coding and accessibility. This keeps it stable and secure, while ensuring that almost anyone can navigate your site.

Main Features:

  • Includes layout controls to customize fill, margins, sidebars, etc.
  • Provides access to over 10 Elementor optimized demos
  • Provides an SEO edge with high page speeds

The combination of GeneratePress’ layout controls with Elementor allows you to customize every single desktop and mobile page on your site. This simplifies the process of creating a responsive site that adapts well to any device on which it is viewed.

Price: Free on WordPress.org, but I recommend the $39.95 GP Premium option because it offers more styling controls and functionality.

3. OceanWP

OceanWP is a very popular option. It is scalable enough to work well for both small and large sites. Plus, it offers unique Elementor widgets to give your page builder an extra boost and speed up site creation.

Key Features:

  • Provides over 60 demos to base your site on
  • Includes easy WooCommerce integration for online retailers
  • Offers fast page load times and built-in SEO

OceanWP’s Elementor widgets will mean smooth navigation when it comes to creating layouts and content. They make it easy to add functionality to your blog posts, image displays and even your WooCommerce store.

And if you don’t want to build your Elementor site from scratch, OceanWP also includes pre-built Elementor-based demo sites that you can easily import, just like these other two themes.

Pricing: Free version and premium lincense for 1 site costs $39.

4. Hestia

Hestia stands out from most of the previous options in that it doesn’t have such a generic look. Instead, it uses a modern material design style that fits perfectly with the content you create with Elementor, which is why Hestia is on the official list of Elementor recommended themes.

While it doesn’t give you as much control at the page level, it does include some dedicated page templates that work perfectly with Elementor. For example, you can use

  • The normal template
  • A full width template
  • A 100% blank template (much like the Elementor Canvas template).
  • In addition to these features, it

Supports WooCommerce
Offers a neat layout for the homepage
Uses the WordPress Customizer to control the style.

Price: Free on WordPress.org, or $89 for Hestia Pro.

5. Elementor Hello Theme

Hello Theme is the official Elementor theme, designed to be used with Elementor Pro’s theme creation feature.

This free theme is completely stripped down. In fact, it removes everything that is not necessary so that you get the lightest possible base for your Elementor Pro theme designs.

This theme is a great option, but only if you use the Elementor Pro theme builder to build your entire site.

Price: Free

Yes Elementor with 5 million users, Elementor has established itself as the page builder of WordPress.

One of the reasons for its success is its generous free version that offers many possibilities.

You will create your page exactly the way you want it. The WordPress editor is improving every day, but it still lacks finesse in organizing a complex page (homepage, sales…).

I’ll show you some tips and techniques to give a wow effect to your creations.

In this article I will only cover the features of the free version.

You will find three videos that complete the tutorial with examples of creations.

Why use a page builder?

Elementor is perfect for complex pages:

  • Overlapping elements
  • Full-width format without menu and footer
  • Fine management of margins
  • Transition effects between blocks
  • Animations

With Elementor you can build rich and attractive homepages and sales pages. However, I strongly advise you against using it for articles.

If possible, it is best not to use a page builder.

You will lose precious time. Elementor is less flexible than the WordPress editor. Moreover, you have to prepare for the future.

Elementor is the most powerful page builder at the moment, but that could change. WordPress is rapidly integrating page builder features into Gutenberg. The team does not hide its goal to replace them.

Some pages to redo are easily manageable. When you have to redo dozens of articles, it’s a different story.

Elementor integrates a specific layout. It will no longer be possible to work on these pages in the WordPress editor without breaking the appearance.

There are many possibilities with Gutenberg that you will discover in this tutorial dedicated to page layout on WordPress.

What is Elementor?

Elementor is similar to Gutenberg in its operation. You stack sections that host blocks.

You have columns to organize your elements within a section.

You customize the parameters of your section and then of each component. The options are numerous and allow for elaborate layouts.

My home page and the newsletter page are made with Elementor. This will give you an idea of the rendering for simple pages.

Compatible themes

Most of the recent themes work with Elementor. Some developers work in close collaboration with the team in charge of Elementor, including :

  • Hello Elementor
  • OceanWP
  • Astra
  • Jupiter X…

Install and make settings for the extension

You install and activate Elementor from the official WordPress directory.

Before you start, you make some quick settings.

Elementor > Settings

Uncheck the content types you won’t use Elementor for:

  • My Library
  • Articles (recommended)

If you have customized your theme, you deactivate the default colors and fonts to harmonize the look of your site.

You indicate the font that will be applied while your main font loads in Style (Serif or Sans-serif).

In Role Manager you specify who will have access to Elementor. If you are alone, it is better to remove the access to subscribers anyway.

You save.

The Elementor interface

You create a new page. Complete your title and save.

Click on Edit with Elementor.

The central zone is the visualization of your current page. You find the menu on the left.

The menu options are quite dense. Let’s take a look at the features that interest you.

The main menu

You access the main menu through the hamburger.

This is where you return to WordPress.

If you have not activated the default ones of your theme, you indicate :

your colors

  • Main
  • Secondary
  • Text
  • Accent

If you get this problem: Symfony 3 The CSRF token is invalid. Please try to resubmit the form

Solution 1 :

In your app/config/config.yml

change : save_path: "%kernel.root_dir%/../var/sessions/%kernel.environment%"
to : save_path: ~

Solution 2 :

Givive permissions :

mkdir -p var/sessions
chmod 755 var/sessions

Basically means that: db_users using it, will be “auth” by the system user credentias. You can see if your root user is set up like this by doing the following:

sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;

+------------------+-----------------------+
| User             | plugin                |
+------------------+-----------------------+
| root             | auth_socket           |
| mysql.sys        | mysql_native_password |
| debian-sys-maint | mysql_native_password |
+------------------+-----------------------+

As you can see in the query, the root user is using the auth_socket plugin

There are 2 ways to solve this:

  1. You can set the root user to use the mysql_native_password plugin
  2. You can create a new db_user with you system_user (recommended)

Option 1:

sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;

$ service mysql restart

Some systems like Ubuntu, mysql is using by default the UNIX auth_socket plugin.

Basically means that: db_users using it, will be “auth” by the system user credentias. You can see if your root user is set up like this by doing the following:

$ sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;

+------------------+-----------------------+
| User             | plugin                |
+------------------+-----------------------+
| root             | auth_socket           |
| mysql.sys        | mysql_native_password |
| debian-sys-maint | mysql_native_password |
+------------------+-----------------------+

As you can see in the query, the root user is using the auth_socket plugin

There are 2 ways to solve this:

  1. You can set the root user to use the mysql_native_password plugin
  2. You can create a new db_user with you system_user (recommended)

Option 1:

$ sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;

$ service mysql restart

Option 2: (replace YOUR_SYSTEM_USER with the username you have)

$ sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> CREATE USER 'YOUR_SYSTEM_USER'@'localhost' IDENTIFIED BY '';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'YOUR_SYSTEM_USER'@'localhost';
mysql> UPDATE user SET plugin='auth_socket' WHERE User='YOUR_SYSTEM_USER';
mysql> FLUSH PRIVILEGES;
mysql> exit;

$ service mysql restart

Remember that if you use option #2 you’ll have to connect to mysql as your system username (mysql -u YOUR_SYSTEM_USER)

Note: On some systems (e.g., Debian stretch) ‘auth_socket’ plugin is called ‘unix_socket’, so the corresponding SQL command should be: UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';

Update: from @andy’s comment seems that mysql 8.x.x updated/replaced the auth_socket for caching_sha2_password I don’t have a system setup with mysql 8.x.x to test this, however the steps above should help you to understand the issue. Here’s the reply:

It’s very easy like this :

$var = 'Hello my name is Alex?';

if (strpos($var, 'name') !== false) {
    echo 'true';
}

Using PDO (for any supported database driver):

$stmt = $pdo->prepare('SELECT * FROM users WHERE name = :name');

$stmt->execute(array('name' => $name));

foreach ($stmt as $row) {
    // Do something with $row
}

2. Using MySQLi (for MySQL):

$stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?');
$stmt->bind_param('s', $name); // 's' specifies the variable type => 'string'

$stmt->execute();

$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
    // Do something with $row
}

Q1: this notice means $varname is not defined at current scope of the script.

Q2: Use of isset(), empty() conditions before using any suspicious variable works well.

Solution

// recommended solution for recent PHP versions
$user_name = $_SESSION['user_name'] ?? '';

// pre-7 PHP versions
$user_name = '';
if (!empty($_SESSION['user_name'])) {
     $user_name = $_SESSION['user_name'];
}

Anoter solution :

// not the best solution, but works
// in your php setting use, it helps hiding site wide notices
error_reporting(E_ALL ^ E_NOTICE);
mkdir -p /var/run/mysqld
chown mysql:mysql /var/run/mysqld

Stop the MySQL service

sudo /etc/init.d/mysql stop

Start MySQL without a password

sudo mysqld_safe –skip-grant-tables &

Connect to MySQL

mysql -uroot

Set a new MySQL root password

use mysql;
update user set authentication_string=PASSWORD("newpassword") where User='root';
flush privileges;
quit

Stop and start the MySQL service

sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start

Log in to the database

mysql -u root -p

Warning

mysqld_safe Directory ‘/var/run/mysqld’ for UNIX socket file don’t exists

mkdir -p /var/run/mysqld
chown mysql:mysql /var/run/mysqld

Method 2

sudo service mysql start
cd /var/run
sudo cp -rp ./mysqld ./mysqld.bak
sudo service mysql stop
sudo mv ./mysqld.bak ./mysqld
sudo mysqld_safe --skip-grant-tables --skip-networking &
mysql -u root
FLUSH PRIVILEGES;

SET PASSWORD FOR root@'localhost' = PASSWORD('my_new_password');

Edit this file

/opt/bitnami/apps/wordpress/conf/httpd-vhosts.conf

Change ServerName and ServerAlias to your domain,
then Add these lines

RewriteCond %{HTTP_HOST} ^yourwebsite.com 
RewriteRule (.*) https://www.yourwebsite.com/$1 [R=301,L]

Then restart apache

sudo /opt/bitnami/ctlscript.sh restart apache