My list of trusted WordPress plugins for 2020 and beyond

Reading Time: 8 minutes

Ask various developers what their preferred list of WordPress plugins is and you’ll get a varied and subjective list. The immense repository of WordPress plugins available to users is so overwhelmingly vast, it’s likely that nobodies two lists will look the same. With that being said, I’ve decided to write my list of trusted WordPress plugins for 2020 and beyond.

Before I continue, I should note that all of these plugins are 100% free, unless otherwise stated. I will be touching on some Premium plugins, but only a few as I want to make this list as accessible as possible.

AMP

AMP

Category: Mobile

Implementing AMP into a website has never been so easy thanks to the official plugin for WordPress.

The plugin can be configured to follow one of three different template modes: Standard, Transitional, and Reader.

In Standard mode, you use AMP as the framework for your site, and there need not be any separate AMP and non-AMP versions. When configured to operate in Reader and Transitional modes, a given page will have a canonical URL as well as a corresponding (paired) AMP URL.

The most important thing to understand about the plugin is that it’s not serving as a mobile theme; it does not redirect mobile devices to the AMP version. Instead, the AMP version is served to mobile visitors when they find the content on platforms such as Twitter, Pinterest, Google Search, and others.

[Link]


Block Bad Queries (BBQ)

BBQ

Category: Security. (Free & Pro version available)

BBQ is a great light-weight bad query blocker that protects your site against malicious URL requests. The plugin checks all incoming traffic and quietly blocks bad requests containing nasty server requests and excessively long request-strings.

The best part of it is that it’s a simple yet solid solution that requires no configuration. The free version is good for most blogs, but the Pro version comes with a lot more configurable features such as a customizable firewall and additional scanners.

Due to this plugin’s light-weight nature, I often prefer it when compared to its meaty alternative, Wordfence Security.

[Link]


Wordfence Security

Wordfence

Category: Security. (Free & Pro version available)

Probably one of if not the most popular WordPress security plugin out there, Wordfence sets out to secure your WordPress website in a number of ways and ultimately excels at it.

Wordfence includes an endpoint firewall, login security protection, traffic monitoring and malware scanner to name a few. The free version is a superb WAF (Web Application Firewall) and shelling out for the Pro version does come with additional benefits such as real-time firewall rules and advanced scanners.

The plugin has helped me out a couple of times for websites that have been both compromised and under attack.

If you looking for solid security for a WordPress website, I think very few could argue against Wordfence – it’s extremely good at what it does and coupled with the fact that it’s highly configurable, that’s definitely a plus for any WordPress website from a tiny blog to a full-fledged corporate website.

[Link]


Contact Form 7

Custom Form 7

Category: Forms

Contact Form 7 is not the best form plugin out there. However, it does one thing really well; simple no-frills forms for your website.

The popular plugin has some missing features one would come to expect from modern WordPress form plugins (see Gravity Forms below) such as saving submissions, conditional form fields and submission redirects – but those can either be remedied with additional plugins.

When I’m looking to add a super simple no-frills form to a website, Contact Form 7 (coupled with the next plugin I’m about to discuss) is my go-to. For more advanced form features, I usually look elsewhere like Gravity Forms.

[Link]


Flamingo

Flamingo

Category: Forms. (Requires Contact Form 7 to operate)

Flamingo is a straight-forward submission saving plugin for Contact Form 7.

Because Contact Form 7 doesn’t have a submission saving functionality, one usually has to rely on another plugin to extend its functionality and this is where Flamingo comes in.

Each time a Contact Form 7 form is filled out and submitted, Flamingo will log that submission. A nice little touch is that Flamingo can export all entries as a CSV file – handy for reports.

Flamingo goes hand-in-hand with Contact Form 7 and coupling the two together will bring much desired additional functionality to a rather simple plugin.

[Link]


Gravity Forms

Gravity Forms

Category: Forms. (Premium plugin only)

Gravity Forms is a modern form solution that goes over and above the basic functionality that something like Contact Form 7 and Flamingo provides.

Features like advanced fields, conditional logic, friendly interface, hooks, add-ons (upon add-ons) and an API makes Gravity Forms a much more extensible and developer-friendly solution to working with forms in WordPress.

I’d definitely opt for Gravity Forms over Contact Form 7 if I’m going to be implementing forms on a larger website or a website that requires forms to be more flexible.

[Link]


LiteSpeed Cache

LiteSpeed Cache

Category: Caching

WordPress has many well known caching plugins, but none of them quite come close to the speed and configuration that LiteSpeed Cache offers.

I personally find caching plugins such as W3 Total Cache, WP Rocket, Autoptimize and WP Super Cache to be hit or miss – more often miss than hit thanks to their fiddly nature, but LiteSpeed Cache for WordPress takes caching to a whole new level.

The way it presents itself and works with the user to optimize caching potential feels like a breath of fresh air in a sea of other caching plugins all trying to do the exact same thing.

LiteSpeed cache comparison

I found this plugin also offers more modern features over other caching plugins such as HTTP/2 & QUIC support, ESI (Edge Side Includes) support, Cloudflare and Memcached/LSMCD/Redis support.

If you’re looking for a solid and modern caching solution of WordPress, I’d definitely urge you to give LiteSpeed Cache a chance.

[Link]


Redirection

Redirection

Category: SEO

Broken website links are not only a headache for the user but adversely affect your SEO rankings.

Redirection is a great management tool that not only shows you broken URLs users are hitting on your website, but it allows you to put a redirect in place.

The plugin also features logging, conditional redirects, import & export functionality, 404 tracking and permission-based redirection.

In most cases, the usefulness of this plugin becomes apparent if change the slug of a long-standing WordPress post and need users quickly redirected to the new URL.

[Link]


SSL Insecure Content Fixer

SSL Insecure Content Fixer

Category: SEO & Security

While something like mixed content warnings can be resolved with a few well-placed rules to a .htaccess file, SSL Insecure Content Fixer makes it even easier and future proofs requests from trying to reach http:// over https:// ever again.

The plugin comes with 5 levels of fixing insecure requests, from simple to full. The plugin also makes provision for additional fixes for WooCommerce https:// issues.

There isn’t a whole lot more to this plugin, but it still goes on my list of trusted and necessary WordPress plugins for quickly dealing with mixed content warnings and ensuring https is locked into your website across the board.

[Link]


Yoast SEO

Yoast SEO

Category: SEO (Free & Premium version available)

What can be said about Yoast SEO that most people don’t already know about? Arguably the best SEO plugin for WordPress, it’s not hard to see why this is an essential and super popular choice for WordPress websites.

While the free version pretty much contains the features most will need, there is a Premium version of the plugin that offers even more options.

If you looking for a solid SEO plugin that ticks most of the boxes, Yoast SEO is undeniably it.

[Link]


Custom Post Type UI

Custom Post Type UI

Category: Extensibility

I’m personally not a fan of plugins that set out to do just one thing, especially if said thing can be done in code. However, I will always make an exception for CPT UI.

Custom Post Type UI provides a super easy to use interface for creating and managing custom post types and taxonomies on your website. When it comes to extending WordPress websites, ACF (see below) and CPT UI is usually my first stop.

Why this plugin is not part of WordPress core yet boggles me, but never has it been so easy to manage custom post types.

[Link]


ACF – Advanced Custom Fields

ACF

Category: Extensibility. (Free & Pro version available)

ACF is another amazing plugin that I believe WordPress should buy and incorporate into core. The amazing flexibility and potential it provides for a website make it a super popular and trusted option.

While the free version is fine, it’s the power of the Pro version where the plugin really shines brightly with it’s repeater fields, flexible content fields and clone field functionality.

If you’re building a website with slightly more complexity than your standard website, it’s likely you’re going to run in to the need for something that offers the features that ACF provides.

[Link]


UberMenu

UberMenu

Category: Menu (Premium Plugin)

Sure, the standard menu WordPress is fine when you’re operating within the realm of its limits, but if you looking to include larger, more complex menus then I have no doubt that you’re going to run into trouble.

UberMenu grants the ability to create some really unique, super complex menus that can contain some interesting features such as maps, contact forms, dynamic content, shortcodes and tabbed submenus.

I’ve used UberMenu many times in past projects and can vouch for its super ease of use and the huge amount of flexibility it gives a developer to really make those website menus pop.

[Link]


WP All Import

WP All Import

Category: Data (Premium Plugin)

If you’ve worked with data manipulation like getting batches of data out or into a WordPress website, you’ll know it can be a bit of a hassle. Thankfully WP All Import has come to my rescue a few times in the past.

WP All Import grants a developer to import data into to any theme or plugin field, update existing content with new data, import WooCommerce, ACF, users, listings and also includes automatic scheduling for those times when you want imports/exports to run on a timely manner.

The ability to also get exported data out of a plugin (and into Excel, XML or CSV) or the need to get CSV, RSS, JSON, XML, or Excel data sources into a plugin or custom post type quickly makes WP All Import a highly valuable tool well worth the price tag.

[Link]


I hope you enjoyed my list of trusted WordPress plugins for 2020 and beyond. Going forward, I’ll try keep this list updated by adding any other trusted plugins I use on a regular basis that I feel belong on here.

Laragon: The fastest way to setup WordPress locally

Reading Time: 2 minutes

Usually, when it comes to setting up a local dev environment you have a few options. I’m here today to share with you, the joy that is Laragon. The fastest way to set up WordPress (or any other PHP CMS really) on a local machine.

Depending on your operating system, most people would opt for a WAMP / LAMP or MAMP stack setup on their machine. Some prefer running a VM with their own web server they have set up.

Vagrant is a popular option which is essentially a Virtualbox VM in the background. Another popular option is WampServer or XAMPP, but these are quite specific to Windows (although XAMPP is cross-platform).

Recently I came across Laragon (Windows only), which is essentially XAMPP on steroids. Never before in my 15+ year career have I been able to set up a brand new WordPress (or Drupal) installation as quickly as Laragon can do it.

I was using Xampp for local development until about a year ago when I found Laragon & I haven’t looked back since. This is seriously the most powerful local development tool I have in my entire “developer toolkit”.

Laragon Forum user (Link)

You can go from having a freshly installed Windows operating system to having an entire WordPress installation in less than 30 seconds. In fact, I created a .gif to show you the magic in action. Behold;

Laragon comes with hosts file management so that means it will automatically create a neat local URL for you projectname.test – gone are the days of having to use http://localhost/projectname or http://127.0.0.1/projectname – Laragon handles this for you out the box.

There are quite a few additional benefits and features that come with Laragon;

  • 1-click PHP extensions enable/disable
  • Comes with phpMyAdmin and HeidiSQL (my preferred MySQL GUI manager)
  • HTTPS/SSL support
  • Ability to run NGINX alongside Apache
  • Extremely light-weight and blazingly fast (I can confirm)
  • Git / Redis / Memcached integration
  • Extendable – Laragon setup can be customized in nearly every way
  • Cmder integration out the box for shell access
  • Ability to install and switch between additional PHP versions
  • Symfony, Laravel and Drupal 8 1-click setups out the box
  • Additional support for Node.js/MongoDB, Python/Django/Flask/Postgres, Ruby, Java, Go once installed

Laragon comes in 3 flavours; Full (~130MB), Lite (~85 MB) and Portable (~18 MB) – I’d suggest the Full version to get you up and running fast, but that depends on your preference.

What Development Language or Framework Should I Learn in 2020?

Reading Time: 2 minutes

If you’re asking “What development language or framework should I learn in 2020?”, then this post is for you! I too was intrigued by this question and it got me wondering how I should go about figuring this out.

It dawned on me that the best way to figure this out, would be looking at what dev jobs are being asked for – not just locally, but internationally too.

My thinking is those job postings by language and country will surely give an indication as to what employers are looking for and what skills are in demand. And here are the results:

Global Top 3 Development Languages

Globally, here are the top 3 languages you should strongly consider learning in 2020: (no shortage of jobs with these skills)

  • Java
  • Python
  • React

(Note: C# came in 4th place)

South African Top 3 Languages

South Africa paints a slightly different landscape. Locally speaking, here are the top 3 languages you should strongly consider learning in 2020: (no shortage of jobs locally with these skills)

  • C#
  • PHP
  • Java

(Note: ASP.net came in 4th place)

Bottom 3 Development Languages

However, based on my findings, the 3 languages/skills with little to no jobs on offer:

  • Cordova
  • Haskell
  • Rust

(in other words, if you’re job hunting, I’d say it’s safe to give these a skip learning in 2020)

Global Top 3 Frameworks

Two front-end frameworks seem to come out on top here.

  • React
  • Angular
  • WordPress

(Note: Vue came in 4th place, with Laravel not too far behind it)

A closer look

Below you’ll find a city in a country with dev languages and frameworks ordered by the number of jobs. To gather this info, I used LinkedIn Jobs to search for keywords, left with the default option of “within 25km” of the city.

Just a note: The cities and dev languages I’ve selected are based on my own interests, but to be broad, I’ve included some languages and cities that don’t necessarily appeal to me but may provide insights to others.

I apologize if a dev language/city you were looking for isn’t listed below.

It should also be noted that these results are based on just one job website (of many) and some countries/cities may not use LinkedIn Jobs to it’s fullest potential.

Cape Town, South Africa

LanguageJobs
PHP4582
C#4545
Java4419
ASP.net2020
Python1943
Angular1745
WordPress1257
React1086
Node973
Laravel878
Ruby573
Django538
Drupal335
Ionic314
Cordova304
Vue302
Kotlin107
Haskell17
Rust9

Johannesburg, South Africa

LanguageJobs
C#4879
Java4633
PHP3246
ASP.net2237
Angular1425
Python1030
WordPress688
Node643
React606
Laravel604
Ruby250
Django219
Vue178
Drupal158
Cordova150
Ionic132
Kotlin63
Haskell25
Rust19

Durban, South Africa

LanguageJobs
C#659
PHP406
ASP.net293
Java223
Angular194
WordPress170
Laravel95
Node94
React83
Python82
Drupal48
Vue47
Ruby26
Ionic24
Django17
Cordova11
Kotlin6
Rust0
Haskell0

Dublin, Republic of Ireland

LanguageJobs
Java1648
Python1411
C#844
Angular646
React628
Ruby423
PHP325
ASP.net323
Node230
Vue140
Kotlin95
WordPress74
Django62
Laravel44
Rust15
Ionic11
Drupal10
Cordova9
Haskell8

London, United Kingdom

LanguageJobs
Python14753
Java10704
React7300
C#6212
Node3436
Angular3190
PHP2688
Ruby2501
ASP.net1609
WordPress1244
Vue1107
Kotlin991
Django876
Laravel372
Drupal351
Haskell176
Rust148
Ionic38
Cordova36

Brighton, United Kingdom

LanguageJobs
React410
Python345
Java314
Angular239
PHP223
ASP.net220
C#175
Node144
Vue107
Ruby106
WordPress88
Laravel78
Drupal33
Django21
Kotlin20
Haskell1
Cordova0
Ionic0
Rust0

Miami, Florida, United States of America

LanguageJobs
Java725
React674
Python663
C#391
Angular207
WordPress171
PHP155
Node144
Ruby94
ASP.net82
Kotlin39
Vue31
Drupal28
Django10
Cordova8
Laravel7
Ionic7
Rust5
Haskell0

New York, United States of America

LanguageJobs
Java10936
Python9695
React4391
C#2966
Node2391
Angular2314
Ruby2151
PHP1316
ASP.net1290
WordPress669
Vue574
Django474
Kotlin428
Drupal282
Laravel96
Rust82
Haskell66
Ionic49
Cordova41

San Francisco, United States of America

LanguageJobs
Python16645
Java12693
React5349
Ruby2989
Node2568
C#2422
Angular2255
PHP1314
Django752
Vue648
Kotlin610
WordPress477
ASP.net274
Rust211
Drupal205
Ionic87
Haskell85
Cordova75
Laravel40

Auckland, New Zealand

LanguageJobs
React173
Java156
Python137
C#114
Angular86
PHP71
Node45
Vue39
ASP.net28
Ruby28
WordPress23
Drupal18
Kotlin16
Laravel9
Ionic5
Rust2
Django1
Cordova0
Haskell0

Sydney, Australia

LanguageJobs
Java1329
Python1299
React696
C#
631
Angular460
Node371
PHP343
Ruby310
WordPress162
ASP.net154
Vue136
Kotlin96
Django66
Drupal54
Laravel33
Haskell19
Rust16
Ionic6
Cordova4

Mumbai, India

LanguageJobs
Java1773
Python1090
Angular778
PHP755
C#658
React590
Node543
ASP.net477
WordPress267
Ruby262
Django175
Laravel154
Vue117
Drupal85
Kotlin78
Ionic48
Cordova35
Rust5
Haskell4

Toronto, Canada

LanguageJobs
Java3190
Python2471
React2188
C#1701
Angular1644
Node1046
ASP.net682
Ruby624
Vue476
PHP364
WordPress217
Kotlin216
Django146
Ionic74
Drupal66
Rust62
Laravel45
Cordova41
Haskell4

São Paulo, Brazil

LanguageJobs
Java2121
Python1136
Angular907
C#849
React837
PHP829
Node531
ASP.net377
Ruby375
Vue218
WordPress199
Kotlin193
Laravel153
Django95
Ionic91
Drupal40
Cordova25
Haskell3
Rust2

Dubai, United Arab Emirates

LanguageJobs
Java40
Python33
C#26
PHP17
Node15
React14
ASP.net12
Angular9
Ruby9
Kotlin4
Vue3
WordPress2
Laravel2
Drupal2
Django1
Ionic1
Cordova1
Rust0
Haskell0

Disclaimer: The job results listed here were taken in early Dec 2019 and were correct at the time of publishing this post.

WordPress REST API: Pull Through Posts From Another WordPress Site

Reading Time: 2 minutes

I recently needed to pull through 2 or 3 posts (they were recipes in this instance) from another WordPress website into the current WordPress project I was working on. It seemed tricky at first and then I remembered the WordPress Rest API!

As of version 4.7, the REST API is included out of the box and plugins are no longer required. The endpoints are accessible to anyone by appending /wp-json/wp/v2/posts to the end of the website’s URL (provided they are using WordPress 4.7 and higher)

Thankfully, with the help of a little snippet of code I wrote (see below), that was more than enough to get random posts pulling through from another WordPress website along with a like to that post and it’s featured image.

Update 09 July 2018: I’ve improved the code below. Simply throw the below into your functions.php file:

/**
 * Add this to your functions.php file
 * Using the REST API, retrieve posts from another website.
 * Retrieves images and renders the output below called via a [render_recipes] shortcode
 */
function get_recipes()
{
    // Enter The URL to the API here:
    $api_url = 'https://www.website-goes-here.com/wp-json/wp/v2';

    // Retrieve 100 items via the WordPress RestAPI - can be increased
    $response = wp_remote_get(add_query_arg(array(
        'per_page' => 100
    ), $api_url . '/recipes'));

    // Make sure the response is valid before we proceed...
    if (!is_wp_error($response) && $response['response']['code'] == 200) {
        $remote_posts = json_decode($response['body']); // Our posts are stored here

        uksort($remote_posts, function() { return rand() > rand(); }); // Shuffles the results around

        $remote_posts = array_slice($remote_posts, 0, 2); // Limits the array to 2 items for render

        // Loop through each item and render it
        foreach ($remote_posts as $remote_post) {
            echo '<div class="recipe-post col-md-6">
			    <a href="' . $remote_post->link . '" target="_blank" rel="noopener">';

            // Lets go get the corresponding media for each item looped, on the fly
            $medias = json_decode(file_get_contents($api_url . '/media/'. $remote_post->featured_media));

            // Render the image
            echo '<img class="nwc-recipe-img" src="' . $medias->source_url . '" alt="' . $remote_post->title->rendered . '">';

            // Render the title
            echo '<h5 class="nwc-recipe-title">'. $remote_post->title->rendered . '</h5>';

            echo '</a>
            </div>';
        }
    }
}

// Add the [render_recipes] shortcode
add_shortcode('render_recipes', 'get_recipes');

Then, you can call the function via a shortcode on your .php theme pages like so:

<?php
 // Add this to the .php page you need to call it on.
 do_shortcode('[render_recipes]');
?>

Quick break down of how the above function works:

  1. Retrieves the posts list in JSON format from the site’s WordPress Rest API
  2. If the response is a valid one, decode the posts and start looping through the results
  3. Retrieves 100 posts, shuffles it around and then sets a limit to 2 (all I needed in this example).
  4. Chuck the responses in a basic div element (div called recipe-post in this case, but also has a bootstrap class of col-md-6)
  5. While looping through each item, also get the media attached to that post. $remote_post->featured_media returns an id in this instance.
  6. We then spit out the $medias source_url (the full path to the full featured post image)
  7. Then spit out the title and close up the <div>

The above works fairly well in my instance I needed it for. Hopefully, the above snippet of code comes in handy for you too.

Some things to keep in mind using the above:

  • This may potentially slow down your site as it has to make a few more calls. (Set the per_page argument lower if it’s taking too long)
  • This will only work on websites using WordPress 4.7 and higher (relies on the REST API natively added in this version )
  • This also assumes the default endpoints are enabled and not blocked or closed up.

New Year, New Website, New Look!

Reading Time: 2 minutes

A belated but happy new year. Yeah, I know we’re half-way through February already, but I felt obliged to state the obvious. Speaking of such, welcome to my new website, sporting a brand new look.

I realized towards the end of 2016 that a website redo was much needed, but finding time between the end of year madness, starting at and adjusting to a new job, I had to find time in between everything to get this new look launched.

Whilst looking at my old website I knew an overhaul was long overdue – the old website was coded in 2015 and it was outdated. Badly. That used Bootstrap and a few Javascript libraries and to be honest that old look wore out it’s welcome very quickly.

The problem was that I wasn’t exactly sure of what I wanted. Then after browsing other websites of developers, doing some research and finding inspiration, I finally found something I liked. Something that spoke to me and said, “this is it!”. I managed to code the basic structure and look in two nights and over the course of the new few weeks, I hacked away at it, molding it to how I wanted it.

I’ve opted for a much cleaner look with a modern Material look and feel. I wanted to keep it looking almost like a professional CV (or Resume as some of you might call it) so that I can let my experience, projects and skills speak for themselves. I still wanted to keep my blogs and writing going, so instead of scrapping that (it did cross my mind), I converted what I had already coded into a WordPress theme.

There are a few minor things I will be correcting over the weeks to come, but I’m much happier with this iteration of my website. I really hope you like the look and feel.

WordPress.com vs WordPress.org

Reading Time: 3 minutes

WordPress.com vs WordPress.org: What’s the difference?

If you’re new to the world of WordPress or website development, you may be wondering what the difference between WordPress.com vs WordPress.org is?

The short answer is; WordPress.com is a service and WordPress.org is software.

Both do the exact same thing and they do it exceptionally well, however they each deliver the same set of tools in significantly different way.

The official WordPress website sums it up pretty well and uses a comparison table when talking about the two versions:

WordPress.com
Focus on your beautiful content, and let us handle the rest.
WordPress.org
Get your hands dirty, and host your website yourself.
Premium hosting, security, and backups are included. You can even upgrade to a custom domain, like YourGroovyDomain.com. You’ll need to find a host, and perform backups and maintenance yourself. We offer VaultPress for security and backups.
Choose from hundreds of beautiful themes. Make it your own with Custom Design. Install custom themes. Build your own with PHP and CSS.
Integrate your site with Facebook, Twitter, Tumblr, and other social networks. Install a plugin, like Jetpack, to enable sharing functionality on your site.
Popular features like sharing, stats, comments, and polls are included. There’s no need to install plugins. Install plugins to extend your site’s functionality.
Personal support and the WordPress.com forums are always available. Visit the WordPress.org support forums for assistance.
You must register for an account on WordPress.com and abide by our Terms of Service. No registration with WordPress.org is required.

Source: WordPress.com

The above table is useful, but it doesn’t help a user’s laymen understanding of WordPress.com vs WordPress.org. Using the above table, I’ve somewhat modified the information into something a little bit more relatable and user specific.

WordPress.com
“I just want to post and blog about cool stuff. I don’t care how it looks.”
WordPress.org
“I want a cool website and I want control over every aspect.”
Aimed at a less-tech savvy user who want to hit the floor running with content. Aimed at more skilled users who probably know a few things or two about creating a website.
I don’t want to pay a cent and I want somebody to host the website for me. I will host my own website which I don’t mind paying a monthly fee for.
I just want to choose a pretty layout and not make one. I want to code my own style, with maximum customizability.
I don’t care much for plugins. Mostly because I don’t know what they do. I want to tweak my website with fancy or niche features and the way I want it.
If I get stuck, I want to have it fixed quickly with minimal effort. I am probably going to get stuck while working out my website and don’t mind spending some time fixing it.
I don’t mind registering with WordPress. Thanks for the software WordPress, but you won’t know a thing about me!
Target Audience:
Soccer moms, Dads who want to blog about parenthood or your little brother who loves anime.
Target Audience:
Web developers, geeks or tech enthusiasts looking to create something impressive.
Coolness factor:
3 / 10
Coolness factor:
8 / 10

At the end of the day, if content is your primary focus, which it should be, both iterations of WordPress are going to serve you well. One is just going to give you more control over the one than the other in terms of flexibility, but at the cost of technical know how.

Personal advice: Go with WordPress.org. Download the source code, setup XAMPP on your machine and go the more technical route. It may be a bit more tricky to grasp, especially if you’re still starting out in the world of website development, but it’s so much more rewarding.

Add Custom CSS To a WordPress Theme

Reading Time: 2 minutes

Using themes in WordPress is fantastic for getting your website up quickly, but what if you want to add custom CSS to a WordPress theme and override the styling?

One way to change the default behaviors of WordPress is using a file named functions.php. It goes in your Theme’s folder. – WordPress.org Codex

There is the quick and dirty way to do it, but you risk having your code overridden when the theme eventually updates. This is not wise. Below I will show you the right way to do it via referencing a custom css file in your theme’s function file using the wp_enqueue_scripts hook.

Step 1: Reference the custom.css

Most WordPress themes, if not every theme has a functions.php file nested in it’s root folder. (eg. http://www.example-website.com/wp-content/themes/twentysixteen/functions.php)

Open the functions.php file, head to the very bottom of the file and paste the following code below:

function custom_css() { // The custom name of your function
wp_enqueue_style( '', get_template_directory_uri() . '/custom.css' );
}
add_action( 'wp_enqueue_scripts', 'custom_css' ); // Activating the function

Save it and proceed to Step 2.

Step 2: the custom.css file

Now that you have your theme looking for a custom.css file, it’s time to actually add one / create a file.

Create a custom.css file with your custom CSS code in it and upload it to your theme’s root folder. You will obviously want to throw in any custom or overriding code into there.

Save it and place it in the root of your current theme. (eg. http://www.example-website.com/wp-content/themes/twentysixteen/custom.css)

Voila! You’ve done it. Now you don’t need to worry about your theme overriding your custom CSS code when you do a theme update.

You can check that your theme is calling the custom.css file by checking the source code of your website (CTRL + U in Google Chrome) and searching for custom.css. You should see the file referenced at least once.