WordPress 101: WordPress for beginner developers

WordPress 101: Introduction

Working with WordPress can be awesome and painful at the same time, especially when you have to dial with a lot of different parts of this CMS, or being forced to create some functions by yourself.


Internet is full of tutorials and guides, good and bad, to help you out with pretty much everything, but the major problem is that most of this tutorials are focused on single tasks, with specific goals on how to create this or that, following a preset logic by the author that could not fit the needs of a fresh, confused developer. Most of the time a developer at his first step would like to learn how to actually create something from scratch, or how to properly manage the most common hooks and functions from WordPress, focusing more on the logic and learning the basic WordPress codex.

WordPress can be a total #@!? or a loyal wife

If you’re looking for something fast on how to create your wonderful template or your stunning plugin, this is not the place for you. This is gonna be a long and sometimes painful process.

In this series of tutorials I’m gonna touch the most common aspects that fill up the life of a WordPress Developer, from the editing of the comment text, to the development of custom templates and plugins.

Here’s the list of tutorials:

Don’t take everything for granted

Something that I constantly remind to myself is to not take everything for granted. WordPress is a constantly evolving project, with the release of a major update once every 6 months circa, so always remember that something written today could be already outdated tomorrow. Always check the source code and avoid to just brutally copy/paste a piece of code that you find useful, even in this guide. Always check, double check and test everything like a maniac.

All the examples included in this series of tutorials refer to the version 4.0+

What you think guys? Is something missing from the list above? Is there some topic or aspect of WordPress would you like to talk about?
If you have critics or suggestions please let me know with a comment, and if you like this guide please give me a virtual high five with a click on the share button.


Happy developing!

  • Scott Splettstoeszer

    Loved both your WordPress Live Development Session.
    How do we find out when you are going to have a new WordPress Live Development Session for us to join in on?

    • Most likely I’m gonna have the next Live Development Session on July Saturday 11th.
      Finger crossed 😀

  • Max Irwingstone

    //Your Tutorial is Awsome.

    //I have some troubles with wordpress functions:

    <!– comm

    max_num_pages > 1 ) : ?>


    //How to properly use it?
    //Probably have several queries in theme – something is broken.

    • Hi Max and thanks for you comment.

      Looking at the code snippet you shared doesn’t really help me. I don’t know what’s the structure of your entire page so I can’t check if there’s an error somewhere.
      As a generic advice, I suggest you to check if you manipulated the wp_query and you need to reset it before checking the amount of pages.

      • Max Irwingstone

        WordPress Loop (main loop) was broken by my code. I fixed it thanks to Your tutorials and wordpress codex.

  • Martin Bouwman

    I followed your WordPress for beginner developers tutorial. Took me 9 days for all 12 +(2) lessons (my family missed me a few evenings 😉 ).
    Hope you will also give a bit more attention to how connect your code to the wp-admin menu.
    I’m creating a theme for a friend of mine and I ‘don’t want to change the code any time she wants to have something changed in the layout.

    • Hi Martin and thank you for your comment.
      I’m super happy you did a full immersion of my tutorials, that is great, not for your family maybe :D.
      Anyway, I will definitely extend the series to touch some more advanced functions to create custom options in the admin panel, plugins, widgets and so on.
      I will publish the next video at the end of the next week and I already have a bunch of surprise for mid July.
      Stay tuned!

  • Ms. Baxstar

    I followed your steps up to the second video where javascript was introduced. When I refreshed my page, I got the cheatin’ uh? error. How do I fix that?

    • Alessandro

      Hi, thanks for your comment. What do you mean with the “cheatin’ uh? Error”? Can you be more specific?
      Also if your code doesn’t work I suggest you to take a look at my source code l, accessible for free on GitHub, you find the link in the video description.

  • akshay

    your tutorial are awesome

  • Pingback: How to build a Premium Theme for WordPress()

  • Jozef Sedlak

    Hi Alec, I have some issue with the code. Doing the archive tutorial part and as soon as I change the config to true so we can see the syntax error, I see this:

    “Strict Standards: Declaration of Walker_Nav_Primary::start_lvl() should be compatible with Walker_Nav_Menu::start_lvl(&$output, $depth = 0, $args = Array) in htdocs/wordpress – awesome/wp-content/themes/awesometheme/inc/walker.php on line 86”

    Everything works fine, exactly like in your video, I even copied your code just to make sure I did not do any typo, but still get the error..
    Would you have any idea what that could be?

    thank you for you help.

  • Jozef Sedlak

    Alec, I see you get the same error (warning) in the video. All good now, the problem solved.

    btw, the tutorials are amazing, hope you will never loose the patient to teach and share your knowledge.

    thank you.

    • I will never stop!
      Thank you for following and I hope you’re enjoy the Premium Theme series.

  • I need The next lesson sir 😀

    • Hi, this series is complete, I started a new one focused on more advanced stuff.

      Check it out: https://www.youtube.com/playlist?list=PLriKzYyLb28kpEnFFi9_vJWPf5-_7d3rX

      • is that the next session?

      • i’m waiting here , the answer of my error

        • Thank you for your passion, but constantly commenting and asking for help is not gonna make me go faster. If I don’t answer is because or I’m sleeping or I’m working, please respect my time and wait.
          What’s your error about?

          • ohh i’m sorry,its bcs your tutorial is really amazing , so ican’t wait to go to the next part,

            i cant bring out from in
            i following the tutorial, and getting error
            and trying to download your file in github, and copy all frile from lesson_7a, and getting error
            it the same error, is still under of
            i just try to use “inspect element” and manually remove and , and it work,
            but it cant save hahhaha

            one more, i’m sorry again

          • a element (list) has to be inside the container. Basic HTML structure that needs to be followed.
            I will review your code later and I will let you know where is your mistake and how to fix it.

  • what software u use to help writing code?

    • I use Coda by Panic with a plugin installed for WordPress autocomplete and suggestion.
      Thank you for watching!

  • MrRifvanpaf

    I come from Indonesia, Thank you very much… for your video tutorial.. its very nice and good for me, but i hope you can support me… because i want to make theme wordpress… thanks… thanks.. thanks…

    • Thanks for following, you will find a lot of help and useful tutorials on my Channel.
      Happy Coding!

  • Rahuman Bin Hussain

    Just finished the entire course, Thank you very much for your awesome tutorial. It’s really worth.

    • Alessandro

      I’m really happy to hear that, thank you so much for following.
      If you want to learn more and do some more advanced stuff, I’m currently releasing a Premium Development Series about WordPress.
      Happy Coding

  • Muhammad Haris

    Hi Alessandro your rocks, I love the way you teach +1 (Y).

    My question is how to enable comments in custom post type? I have added COMMENTS IN SUPPORT but it still showing “Comments are closed.” can you please help.

    here is the code:

    function awesome_custom_post_type (){

    $labels = array(
    ‘name’ => ‘Reviews’,
    ‘singular_name’ => ‘Reviews’,
    ‘add_new’ => ‘Add Review’,
    ‘all_items’ => ‘All Reviews’,
    ‘add_new_item’ => ‘Add Review’,
    ‘edit_item’ => ‘Edit Review’,
    ‘new_item’ => ‘New Review’,
    ‘view_item’ => ‘View Reviews’,
    ‘search_item’ => ‘Search Reviews’,
    ‘not_found’ => ‘No Reviews found’,
    ‘not_found_in_trash’ => ‘No Reviews found in trash’,
    ‘parent_item_colon’ => ‘Parent Item’
    $args = array(
    ‘labels’ => $labels,
    ‘public’ => true,
    ‘has_archive’ => true,
    ‘publicly_queryable’ => true,
    ‘query_var’ => true,
    ‘rewrite’ => true,
    ‘capability_type’ => ‘post’,
    ‘hierarchical’ => false,
    ‘supports’ => array(
    ‘taxonomies’ => array(‘category’, ‘post_tag’),
    ‘menu_position’ => 5,
    ‘menu_icon’ => ‘dashicons-book-alt’,
    ‘exclude_from_search’ => false

  • Darz K.

    Hello Allessandro, I hope you are well and enjoying your day ;0}

    Just a question if that’z okay?
    I’m having a little trouble with part 6-(add theme support/features-wp101)..

    I got the custom header and post thumbnails working ok, just having a problem with the custom background..

    The option shows up in the appearance menu, and is editable in wp-admin, it won’t update though when saved..
    It shows up in the view source of the site:

    body.custom-background { background-color: #5815d6; background-image: url(‘http://localhost/wordpress/wp-content/uploads/2016/05/header-tesht.jpg’); background-repeat: no-repeat; background-position: top center; background-attachment: scroll; }

    (I’m developing on localhost and all seems well with the database)
    .. I’ve gone over all the code, and it seems in order.. is there a known simple issue with this?

    Herez my functions.php code:


    function first_Theme_script_enqueue() {

    wp_enqueue_style('customstyle', get_template_directory_uri() . 'css/firstTheme.css', array(), '1.0.0', 'all');

    wp_enqueue_script( 'customjs', get_template_directory_uri() . 'js/firstTheme.js',array(), '1.0.0', true);


    add_action( 'wp_enqueue_scripts', 'first_Theme_script_enqueue');

    function first_Theme_setup() {


    register_nav_menu('primary', 'Primary Header Navigation');

    register_nav_menu('secondary', 'Footer Navigation');


    add_action('init', 'first_Theme_setup');




    Thanks for your time Allessandro!


    • Hi, thank you so much for following.
      If you access the inspector of your browser can you see your custom CSS code applied to the body?
      If the custom CSS for the background is not applied to the body it means you have some code overwriting that class.
      Also you didn’t attach the functions.php code.

      • Darz K.

        Thanks for the reply Alex.. I got it to work..
        Apologies for the unfinished previous comment I posted, I had a full comment written and checked, maybe I deleted half of it.. anywayz, I left out this code in the header.php:

        <body >

        ..so itz working now after putting that in.. I had previously left it out as I didn’t think it would stop anything from working.. the classes now show up when I view the source code in the browser, although I’m not 100% sure why.. I thought this just appended these new classes to the body tag? Would there always have to be a php function in the body tag?

        Thanks again Alex


  • Darz K.

    Hello Alex, I hope you are well today..
    I’m having unexpected results with part 14 of the course, the walker class part 1 –
    When I added
    ‘walker’ => new Walker_Nav_Primary()
    to the header.php file, the theme was working but the nav menu disappeared.. in the inspector, the ‘s are not printing..
    ..could you help me out with this please?
    ..Loving the course by the way, learning so much very quickly ;o,

  • Hi Alessandro ,
    I have a static home page with 3 blog posts and want the ability to display a sticky post .
    How do I do that? Can you explain it super simple ?

  • Pingback: WordPress 101: Create a Theme from Scratch – Iblaze Hosting()