Create a Custom Page Template in WordPress

Do you want to create a custom page in WordPress? You might notice that many WordPress sites have different layouts for different pages. A custom page allows you to have different layout in appearance from regular pages in WordPress. In this article, we will show you how to create a custom page in WordPress.

What is a Custom Page in WordPress

By default WordPress allows you to create posts and pages. Your WordPress theme controls the appearance of your pages by utilizing a template file called page.php.

This template file affects all single pages that you create in WordPress. However, not all pages are the same. Little changes in their layout and appearance can make them unique and a lot more useful.

Creating a custom page template in WordPress requires a basic understanding of HTML, CSS, and PHP.

Having said that, let’s jump into creating your first custom page in WordPress.

Creating a Custom Page in WordPress

First, you need to open a plain text editor like Notepad on your computer. In the blank file add this line of code at the top:

<?php /* Template Name: CustomPageT1 */ ?>

This code simply tells WordPress that this is a template file and it should be recognized as CustomPageT1. You can name your template anything you want as long as it makes sense to you.

Once you have added the code, save the file to your desktop as, custompaget1.php.

You can save the file with any name, just make sure that it ends with .php extension.

For this next step, you will need to connect to your website using an FTP client.

Once connected, go to your current theme or child theme folder. You will find it in /wp-content/themes/ directory. Next, upload your custom page template file to your theme.

Now you need to login to your WordPress admin area to create a new page or edit an existing one.

On the page editing screen, scroll down to ‘Page Attributes’ section, and you will find a template drop down menu. Clicking on it will allow you to select the template you just created.

Now if you change template and visit this page, then you will get to see a blank page. That’s because your template is empty and does not tell WordPress what to display.

Don’t worry, we will show you how to easily edit your custom page template.

Editing Your Custom Page Template

Your custom page template is like any other theme file in WordPress. You can add any HTML, template tags, or PHP code in this file.

The easiest way to get started with your custom page is by copying the existing page template provided by your theme.

Open your FTP client and go to your theme folder. There you will find a file called page.php. You need to download this file to your computer.

Open the page.php file in a plain text editor like Notepad, and copy all its content except the header part.

The header part is the commented out part at the top of the file. We are not copying it, because our custom page template already has one.

Now you need to open your custom page template file and paste it at the end.

Your custom page file would now look something like this:

<?php /* Template Name: CustomPageT1 */ ?>
<?php get_header(); ?>
<div id="primary" class="content-area">
    <main id="main" class="site-main" role="main">
        // Start the loop.
        while ( have_posts() ) : the_post();
            // Include the page content template.
            get_template_part( 'template-parts/content', 'page' );
            // If comments are open or we have at least one comment, load up the comment template.
            if ( comments_open() || get_comments_number() ) {
            // End of the loop.
    </main><!-- .site-main -->
    <?php get_sidebar( 'content-bottom' ); ?>
</div><!-- .content-area -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>

Save your custom page template file and upload it back to your theme folder using FTP.

You can now visit the page you created using custom page template. It will now look exactly like your other pages in WordPress.

You can now continue editing your custom page template file. You can customize it in any way you want. For example, you can remove the sidebar, add custom PHP code, add any other HTML you want.

You can add the content by editing the page in WordPress page editor screen. You can also leave the content area in page editor completely empty, and add custom content directly in your page template.

Create a custom Header, Footer or Sidebar for Each WP Category

Have you ever seen WordPress blogs that have a separate header for different categories? We’ll share here a simple snippet that you can use to add custom header, footer, or even sidebar for each WordPress category.

To call a particular header, you will need to open your index.php and replace your normal header code with this one:

This code above is basically telling WordPress that if someone opens the category called “Blogging” then WordPress needs to display a file called header-blogging.php if it exist. If it does not exist, or if the category is not blogging, then WordPress displays the default header file.

To get a separate sidebar for each all you need to do is add the following code:

The code above will look for sidebar-blogging.php to replace the default footer file if the category is Blogging.

To get a separate footer for each category all you need to do is add the following code:

The code above will look for footer-blogging.php to replace the default footer file if the category is Blogging.

Install Google Analytics on your WordPress site

How to Install Google Analytics in WordPress

There are many different ways to setup Google Analytics in WordPress. We will show you three different methods where the first option is the easiest and the last being the hardest.

You can choose the one that best suits your needs.

1. Google Analytics for WordPress by MonsterInsights

MonsterInsights is the most popular Google Analytics plugin for WordPress. Over 1 million websites use it including the likes of Bloomberg, PlayStation, Zillow, and more.

It is the easiest and by far the best way to add Google Analytics to WordPress (for all users beginners and experts).

MonsterInsights has both a free version and the Pro version. In this tutorial, we will be using the MonsterInsights free version.

You can use the MonsterInsights Pro version if you want more advanced features like Ecommerce tracking, Ads tracking, Author tracking, etc. The process of setting them up is the same.

Let’s get started.

The first thing you need to do is install and activate the MonsterInsights plugin.

For more details, and if you want to learn how to install and manage WordPress plugins, see our WordPress basics course.

Upon activation the plugin will add a new menu item labeled ‘Insights’ to your WordPress admin menu. You need to visit Insights » Settings to configure the plugin settings.

On this screen, you need to click on ‘Authenticate with your Google account’ button to connect Google Analytics with your WordPress site.

authenticate WP

This will bring up a popup where you will be able to authenticate with your Google Account.

authenticate Google

Click on ‘Next’ to continue.

Now you need to click on ‘Click to get Google code’ button.

Get authentication code

This will bring up another popup with the message ‘MonsterInsights would like access to your Google Analytics data’.

Click on the ‘Allow’ button to continue.


The authentication popup will now show you a line of code which you need to copy.

authentication code

Next, you need to enter this code in the MonsterInsights popup and then click on ‘Next’ to continue.

enter google code

The final step is to select the profile you want to track. You need to select your website here and then click on the next button to continue.

select google pofile

That’s all you have successfully installed and setup Google Analytics on your WordPress site.

Remember, it will take Google Analytics sometime before showing your stats.

The best part about MonsterInsights is that you can view your Google Analytics report inside your WordPress dashboard. Simply visit Insights » Reports page to checkout a quick overview of your analytics data.


You can go also go in the Tracking tab to customize the tracking settings based on your needs:

insights tracking

Note: MonsterInsights was formerly known as Google Analytics for WordPress by Yoast.

2. Insert Headers and Footers Plugin

This method is not as not as good as MonsterInsights because you will not be able to do advanced tracking configuration, and you will not be able to view Google Analytics data in your WordPress dashboard.

First, you need to install and activate the Insert Headers and Footers plugin. For more details, see our step by step guide on how to install a WordPress plugin.

Upon activation, you need to visit Settings » Insert Headers and Footers page. Here you need to paste the Google Analytics code that you copied in step 4 into the headers section.

adding code to header footer in wrdpress
Don’t forget to click on the save changes button to store your settings.

3. Install Google Analytics in WordPress Theme

This method is for advanced users only who are familiar with code. It is somewhat unreliable because your code will disappear if you switch or update the theme. We almost never recommend using this method.

If this is your first time adding code to your WordPress files, then you should check out our guide on how to copy paste code snippets in WordPress.

Add code in header.php file

Simply edit the header.php file in your WordPress theme and paste the code you copied in step 4 right after the <body> tag.

Don’t forget to save your changes and upload the file back to your server.

Add via Functions File

You can also add Google Analytics tracking code to WordPress functions file. It will then automatically add code to every page on your WordPress site.

You will need to add this code to your theme’s functions.php file.

1 <?php
2 add_action('wp_head', 'wpb_add_googleanalytics');
3 function wpb_add_googleanalytics() { ?>
5 // Paste your Google Analytics code from Step 4 here
7 <?php } ?>

Viewing Reports on Google Analytics Website

Google Analytics is capable of showing you a treasure of data collected from your stats. You can view this data by visiting your Google Analytics dashboard and clicking on the reporting tab.

Google Analytics reports

You will see the built-in Google Analytics reports in the left column. Each section is divided into different tabs and clicking on a tab will expand it to show more options.

  • Audience tab will show reports to help you understand your users.
  • Acquisition reports explore where your users came from.
  • Behavior reports summarize what your users do after they arrive on your site.
  • Conversion reports show how well you’re doing against your goals.

We hope this article helped you learn how to install Google Analytics in WordPress.

My Greek characters are all garbled and unreadable

When creating WordPress pages and posts you are not confined to use only the English language and character set. In fact, any language can be used and in Cyprus, even if the majority of our reader do understand and speak English, sometimes you’d prefer publishing your content in Greek.  Sometimes after a database update things may have gone wrong and your site becomes unreadable.

Fix garbledgreek characters in WordPress

Fix garbled Greek characters in WordPress

When your Greek text in WordPress shows suddenly all garbled and unreadable there is Character Encoding Mismatch issue.

How to Fix a character encoding mismatch problem in WordPress

1) You need to edit the ‘wp-config.php’ file. Either use your online editor or open the ‘wp-config.php’ file in a separate text editor such as notepad (the wp-config.php file can be found in the root directory of your WordPress installation). It is always a good idea to first make a backup of the file.

2) Locate the following two lines and comment them out:

define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');

After you commented them out, they should look like :

//define('DB_CHARSET', 'utf8');
//define('DB_COLLATE', '');

Step 3) Now upload (or save if you use your online editor) the updated ‘wp-config.php’ file to your hosting platform (overwriting the old wp-config.php file, but keep the back, just in case….).

Character encoding problems can happen after a database upgrade or other interventions on the site (plugins, etc….).

Add post shortcodes to WordPress pages

Displaying Recent Posts in WordPress Using Shortcode

Adding recent posts to a WordPress sidebar is fairly easy, but what if you wanted to show recent posts inside a WordPress post or page? The easiest way to display recent posts in WordPress posts and pages is by using shortcodes.

You’d begin by installing and activating the Display Posts Shortcode plugin. It works out of the box and there are no settings you need to configure.

Simply edit a post or page where you want to display your recent posts. Next, use the shortcode [display-posts] with your own parameters inside the post. The plugin offers a whole range of parameters that you can use with the shortcode. Here are some examples:

Display 5 recent posts with thumbnails and excerpt

1 [display-posts posts_per_page="5" image_size="thumbnail" include_excerpt="true"]

Display recent pages instead of posts

1 [display-posts posts_per_page="5" post_type="page"]

Change the order to title instead of date.

1 [display-posts posts_per_page="5" orderby="title"]

Display recent pages under a specific parent page.

1 [display-posts posts_per_page="5" post_type="page" post_parent="5"]

For a full list of parameters visit the plugin’s documentation.

You can also use these shortcodes inside a text widget, but first you will need to enable shortcodes in your text widgets by adding this code to your theme’s functions.php file or a site specific plugin.

1 add_filter('widget_text', 'do_shortcode');


Watch the video about displaying recent posts on pages and posts inWordpress:

What shortcodes are included in WooCommerce

Page Shortcodes:

  • [woocommerce_cart] – shows the cart page
  • [woocommerce_checkout] – shows the checkout page
  • [woocommerce_order_tracking] – shows the order tracking form
  • [woocommerce_my_account] – shows the user account page

In most cases, these shortcodes will be added to pages automatically via our onboarding wizard and do not need to be used manually.


Used on the cart page, the cart shortcode displays cart content and interface for coupon codes and other cart bits and pieces.

Args: none



Used on the checkout page, the checkout shortcode displays the checkout process.

Args: none


Order Tracking Form

Lets a user see the status of an order by entering their order details.

Args: none


My Account

Shows the ‘my account’ section where the customer can view past orders and update their information. You can specify the number of orders to show. By default, it’s set to 15 (use -1 to display all orders.)


     'current_user' => ''
Current user argument is automatically set using get_user_by( ‘id’, get_current_user_id() ).

The following shortcodes can be used anywhere you want:

Recent Products

Lists recent products – useful on the homepage. The ‘per_page’ shortcode determines how many products to show on the page and the columns attribute controls how many columns wide the products should be before wrapping.


     'per_page' => '12',
      'columns' => '4',
      'orderby' => 'date',
      'order' => 'desc'
[recent_products per_page="12" columns="4"]
To learn more about the default ‘orderby’ parameters, see: WordPress Codex Class Reference

Featured Products

Works the same as recent products but displays products that have been set as “featured.” In this example, the shortcode is saying: Show 12 featured products in 4 columns.


     'per_page' => '12',
      'columns' => '4',
      'orderby' => 'date',
      'order' => 'desc'
[featured_products per_page="12" columns="4"]


Show a single product by ID or SKU.

[product id="99"]
[product sku="FOO"]

*If the product isn’t showing, make sure it isn’t set to Hidden in the Catalog Visibility.

To find the Product ID, go to the Products screen, hover over the product and the ID appears as shown below.



Show multiple products by ID or SKU. Make note of the plural ‘products.’


      'columns' => '4',
      'orderby' => 'title',
      'order' => 'asc'
[products ids="1, 2, 3, 4, 5"]
[products skus="foo, bar, baz" orderby="date" order="desc"]

*If the product is not showing, make sure it is not set to Hidden in the Catalog Visibility.

Add to Cart

Show the price and add to cart button of a single product by ID.


      'id' => '99',
      'style' => 'border:4px solid #ccc; padding: 12px;',
      'sku' => 'FOO'
[add_to_cart id="99"]

Add to Cart URL

Echo the URL on the add to cart button of a single product by ID.


      'id' => '99',
      'sku' => 'FOO'
[add_to_cart_url id="99"]

Product Category

Show multiple products in a category by slug.

Go to: WooCommerce > Products > Categories to find the slug column.
Go to: WooCommerce > Products > Categories to find the slug column.


     'per_page' => '12',
      'columns' => '4',
      'orderby' => 'title',
      'order' => 'asc',
      'category' => ''
[product_category category="appliances"]

Product Categories

Display product categories loop


      'number' => 'null',
      'orderby' => 'title',
      'order' => 'ASC',
      'columns' => '4',
      'hide_empty' => '1',
      'parent' => '',
      'ids' => ''

The number field is used to display the number of products and the ids field is to tell the shortcode which categories to display.

[product_categories number="12" parent="0"]

Set the parent parameter to 0 to only display top level categories. Set IDs to a comma separated list of category IDs to only show those.

To find the Category ID, go to the Product Categories screen, hover over the category and the ID appears in the URL.

Product Page

Show a full single product page by ID or SKU.

[product_page id="99"]
[product_page sku="FOO"]

Sale Products

List all products on sale.


     'per_page' => '12',
     'columns' => '4',
     'orderby' => 'title',
     'order' => 'asc'

[sale_products per_page="12"]

Best-Selling Products

List best-selling products on sale.


     'per_page' => '12',
     'columns' => '4'

[best_selling_products per_page="12"]

Related Products

List related products.


     'per_page' => '12',
     'columns' => '4',
     'orderby' => 'title'

[related_products per_page="12"]

Top Rated Products

List top-rated products on sale.


     'per_page' => '12',
     'columns' => '4',
     'orderby' => 'title',
     'order' => 'asc'

[top_rated_products per_page="12"]

Product Attribute

List products with an attribute shortcode.


     'per_page' => '12',
     'columns' => '4',
     'orderby' => 'title',
     'order' => 'asc',
     'attribute' => '',
     'filter' => ''

[product_attribute attribute='color' filter='black']

The ‘per_page’ Argument

Note: the ‘per_page’ shortcode argument will determine how many products are shown on a page. This will not add pagination to the shortcode.

Troubleshooting Shortcodes

If you correctly pasted your shortcodes and the display looks incorrect, make sure you did not embed the shortcode between <pre> tags. This is a common issue. To remove these tags, edit the page, and click the Text tab:

Remove Pre Tags from Shortcode

Sorting Products by Custom Meta Fields

In many shortcodes like:

  • [recent_products]
  • [featured_products]
  • [products]
  • [product_category]
  • [sale_products]
  • [top_rated_products]
  • [product_attribute]
  • [related_products]

you can choose to order products by the following values

  • menu_order
  • title
  • date
  • rand
  • id

using the “orderby” attribute, for example:

[products skus=”foo, bar, baz” orderby=”date” order=”desc”].

But you can also sort products by custom meta fields using the code below (in this example we order product by price):

add_filter( 'woocommerce_shortcode_products_query', 'woocommerce_shortcode_products_orderby' );

function woocommerce_shortcode_products_orderby( $args ) {

    $standard_array = array('menu_order','title','date','rand','id');

    if( isset( $args['orderby'] ) && !in_array( $args['orderby'], $standard_array ) ) {
        $args['meta_key'] = $args['orderby'];
        $args['orderby']  = 'meta_value_num'; 

    return $args;

You need to place this snippet in functions.php in your theme folder and then customize by editing the meta_key.

Troubleshooting WordPress Plugins

How to Troubleshoot your WordPrees plugins

Sometimes, after having installed a new plugin, a WordPress version update or updating your themes and plugins with their current versions things do work as expected anymore.

One of the first actions to troubleshoot your WordPress site is to narrow down the source of the problem. It may be a plugin? Or is it your theme?

Plugin debugging flowchart

The below flowchart is a good starting point:

Wordpress plugins troubleshooting diagram

Credit to for creating this awesome flowchart

You can easily activate and deactivate the plugins that are installed on your WordPress site:

Wordpress active pluginsOn the dashboard, click on

Plugins / All Plugins

The activated plugins have a blue line on the left border

Activate / Deactivate a plugin by just clicking on the link below the plugin name. You won’t loose any information by deactivating a plugin. Reactivate it and it’s all back.

The Plugin Editor

You can use the Plugin Editor but you need solid <php> and wordpress technical knowledge and aware that if you modify these files the plugin can break. In this case you can reinstall the plugin.

If you modify the plugin files directly, please remember that all changes will be lost when updating or reinstalling the plugin. So, be careful.

wordpress install directory pluginsIn some rare cases nothing’s working anymore after a plugin update, sometimes you’d be even unable to log into your WordPress site. The only way here is to access the directory structure of your wordpress install, either through a filemanager on the cpanel provided by your hosting company or through a ftp client (like Filezilla or others).

Navigate to public_html / wp-content / plugins

and delete the folder of the plugin that causes the trouble.

Reinstall the plugin as usual.

Please refer also our article:

How to Fix: Briefly unavailable for scheduled maintenance.

During out WordPress advanced courses we dig deeper into plugin troubleshooting and plugin editing.


Add new Posts through Email

Add a new Post by Email

Post by Email is a way of publishing posts on your blog using your email. Any email client can be used to send the email, allowing you to publish quickly and easily from devices such as cell phones if you don’t have the WordPress mobile app installed.

The internal WordPress ‘post by email’ has been disabled and will be removed from WordPress. It is recommended to add this useful functionality by installing the widely used Jet pack plugin.

Once Jet pack installed and activated, you need to switch on the Post by Email module:

You can do this in a few easy steps:

  1. Go to Jetpack > Settings > Writing in your dashboard, and open the Post By Email card.
  2. Click on the toggle to activate the module.
  3. Copy the special email address that was generated for you.

Need more detail? Read on or click directly to the section you want to see.

Sending Emails

Once you have your Post by Email address, sending an email is simple:

Post By Email - mail example

The email subject is used as your post’s title. The body is the post’s contents. Please note you can only post to one recipient at a time.

Mail Formatting

Your email can be plain text or formatted. As much formatting as possible will be retained, although the Post by Email system will strip unnecessary HTML tags so that your email is displayed correctly. Note that you will need to use an email client that supports rich text or HTML formatting in order to make use of this feature. Most website based clients (Hotmail, Gmail) do support this, as do most desktop clients (Outlook, Mail). You may need to switch your client into rich text or formatted mode.


Post by email will automatically remove any email signatures that match the standard signature block pattern:


(that is, dash dash space)

It will also remove anything after a <hr/> HTML tag and attempts to clean up cellphone network signatures.

If your email system attaches a signature that does not match any of these patterns then you can manually tell Post by Email to stop including text by adding the special [end] shortcode on its own line with a blank line above it. Anything after this will be removed from your post. If your cellphone network is adding a signature and you want us to remove it, then let us know the details and we’ll look into it.


Image attachments will be included in your published post as follows:

  • Single images will be displayed inline (a single image is defined as an image without an image immediately following it).
  • Multiple images will be displayed as a gallery.

Multiple galleries and single images are allowed in the same post. Note that using the [nogallery] shortcode will disable all galleries.


Special shortcodes can be embedded in your email to configure various aspects of the published post:

  • [category x,y,z]
  • [excerpt]some excerpt[/excerpt]
  • [tags x,y,z]
  • [delay +1 hour]
  • [comments on | off]
  • [status publish | pending | draft | private]
  • [slug some-url-name]
  • [title Your post title]
  • [end] – everything after this shortcode is ignored (i.e. signatures). Make sure it’s on its own line with a blank line above it.
  • This slideshow requires JavaScript.

     – replaces the auto-gallery with a slideshow
  • [nogallery] – disables the auto-gallery and displays all images inline
  • [more] – more tag
  • [nextpage] – pagination
  • [publicize off|yahoo|twitter|facebook] – change Publicize options (see below)
  • [poll]question and answers[/poll] – insert a Polldaddy poll into your post (see below)

Shortcodes can be included anywhere in the body of your email and must be in lowercase. There should be no spaces between the left square braket and the shortcode content.

Specifying the Category

The category shortcode will match the category-slug specified. For example:

[category holidays,main-dishes]

Will match the categories “Holiday” (slug=holidays) and “Main Dishes” (slug=”main-dishes”). Note that categories must already exist on your blog for you to use the slug. If you want to add a new category, just type the new category name in the shortcode along with any other category-slugs. Spaces between the commas are not important.

Specifying Tags

Any number of tags can be added to your post, each separated by a comma:

[tags one potato, two potato, three potato, more]

This will add four tags: “one potato”, “two potato”, “three potato”, and “more”. Note that your tags do not need to exist elsewhere in your blog and new tags will be created automatically.

Changing your Publicize settings

Jetpack’s Publicize lets you notify other web services about your posts. With the [publicize] shortcode you can control this from emails. Note that your Publicize settings must have been previously configured for these shortcodes to work. Also, if you have already configured Publicize and don’t include these shortcodes in your post, it will be Publicized to all of your connected Publicize networks.

[publicize off] – disable all Publicize notifications

[publicize twitter] – only send a notification to Twitter

[publicize twitter]my new post[/publicize] – only send a notification to Twitter and set the Twitter status to my new post

[publicize twitter facebook] – Sends a notification specifically to both Facebook and Twitter only.

Note that if you use more than one [publicize] shortcode in your post (for example, both [publicize twitter] and [publicize facebook]), only the second shortcode will be used (in this case, [publicize facebook]). If you want to Publicize to only those two services such as in this example, you need to use a combined shortcode, like [publicize twitter facebook].

Inserting a Polldaddy poll

You must first have created or imported a Polldaddy account into before using this shortcode. Once setup you can insert a poll in an email as follows:


What is the worst movie of the decade?

* The Love Guru

* Fool’s Gold


Note how the poll question is added after the [poll] shortcode, and each answer is on a new line and starts with an asterisk. The poll must be finished with [/poll].

You can configure your poll by adding extra details to the [poll] shortcode:

  • type="single | multi | 2 | 3" – how many times a vote may be registered (single by default)
  • style="manga medium" – the style of the poll, as taken from the Polldaddy polls page.
  • other="yes | no" – allow an ‘other’ response (noby default)

For example, to create a poll with the wide ‘manga’ style and allow up to three responses (including an ‘other’ response):

[poll style="manga wide" other="yes" type="3"]

What is the worst movie of the decade?

* The Love Guru

* Fool’s Gold


Delaying Your Post

The delay shortcode will accept any time allowed by PHP’s strtotime. For example, you can:

[delay +1 hour]

[delay +2 days]

Providing a post title

The title of your published post is usually taken from the subject line of your email. In some instances, such as when sending an email from some cell phones or via a MMS-Email gateway, you may not be able to provide a subject. In this instance, you can set your post title directly inside the email:

[title My Fancy Post]

Changing your post status

Sometimes you may want your post to be private, or to be reviewed by yourself or someone else at a later date before being published. To do this, you can use the [status] shortcode to set the post status.

[status private]

Example Email with Shortcodes

The following email will be published in two days’ time to the “WordPress” category, with tags “announcement” and “WordPress”:

Welcome to Post by Email, the easiest way to blog!

[tags announcement, WordPress]

[category WordPress]

[delay +2 days]