PHP Programming Wordpress Development

Simple WordPress Plugin Tutorial

Sometimes WordPress just doesn’t do what you want it to do.  When that happens, you turn to plugins for help.  But sometimes, the WordPress plugin repositories don’t have what you need either.  In those cases, it’s time to pull up your sleeves and get to work.  In this tutorial, I’m going to go through the process of creating a simple WordPress plugin from scratch.  I created this plugin as a proof of concept awhile ago, and thought that it would make a great learning tool now.

Step 1:  What are you’re making anyways?

This plugin does one thing only, and it does it well.  It will place a “Submit to Hacker News” button on all of your posts.  While this tutorial is only for a simple plugin, it could easily be extended to include other news aggregation services and social networks.

Step 2:  Creating the plugin.

Now that we know what we’re going to create, we need to create the plugin.  To do that, simply create a file called wp-hacker-news.php and then add the following to it.

* Plugin Name: WP Hacker News
* Version: 0.1
* Description: Adds a "Submit to Hacker News" button to your posts.
* Author: Jack Slingerland
* Author URI:
* Plugin URI:

The lines above are all required for a WordPress plugin to function correctly.  Below is a quick run-through of what each of these means.

  • Plugin Name – This is the name of your plugin.  It is how it will appear in the WordPress back-end administration panels.
  • Version – The version number.  I always start a 0.1 to start, and then increment like 0.1.1 for small changes.
  • Description – This is the description of your plugin.  Feel free to be verbose here, as this is how people will know what your plugin does.
  • Author – This is you!  Put your name or the name of your team here.
  • Author URI – Your website.  In my case, I link it to
  • Plugin URI – The web page for your plugin.  Here, I’m linking it to the original announcement I made for this plugin.

Step 3:  Creating a display function.

So you finally have a WordPress plugin.  That’s great and all, but it doesn’t do anything yet.  What you need now is to create a  function that displays the “Submit To Hacker News” link.  To do that, add this below the comment section:

//Function to show the HN Link.
function WPHackerNews_link() {
     global $post;
     $link = urlencode(get_permalink($post->ID));
     $title = urlencode($post->post_title);
     $formattedLink = "
     <div style="float: right; margin-left: 10px; margin-bottom: 4px;">
          <a href="$link&t=$title">
               <img src="" alt="" />
          <span style="font-size: 9px;">
               <a href="$link&t=$title">Submit to HN</a>
          <a href="$link&t=$title"></a>
     return $formattedLink;

The code above explains itself pretty well.  But I’ll break it down a bit anyways.

  1. We set the global post variable.  It holds all of the information about the post we’re currently on.
  2. Store the current post’s permalink and title in variables.
  3. Using some in-line css and good old HTML, we get the Y Combinator logo to float on the right side of the post.
  4. Return the HTML for the button to the caller of the function.

Step 4:  Displaying your plugin.

Everything is going great, but now we need this to actually show up in posts.  To do that, we register a display function with WordPress.  With a bit of logic, we can make it only display on posts.

//Integrate with Wordpress.
function WPHackerNews_ContentFilter($content) {
     if(is_single()) {
          return WPHackerNews_link().$content;
     } else {
          return $content;
//Add the filter
add_filter ('the_content', 'WPHackerNews_ContentFilter');

The above code isn’t self-explanatory at all, so here’s how it works.

  1. When we create the function, we make sure to pass it “$content”.  “$content” is a variable that holds the content of the post that the user is on.
  2. We then check to make sure that we are on a single post with the function “is_single()”.
  3. If so, we return our button by calling “WPHackerNews_link()” and appending “$content” to it.
  4. If not, just return the original un-altered content.
  5. The final step is to use the “add_filter” function to add this plugin into WordPress.  The first argument describes where our plugin should be used (“the_content”), and the second argument is what function it should use (“WPHackerNews_contentFilter”).

Step 5:  You’re Done!

That concludes this tutorial on creating a simple WordPress plugin.  All you need to do now is drop this file in your wp-content/plugins directory and then activate it in the admin.  As usual, if you run in to any errors or notice any problems, please let me know and I’ll help the best I can.

By Jack Slingerland

Founder of Working and living in Raleigh, NC. I manage a team of software engineers and work in Python, Django, TypeScript, Node.js, React+Redux, Angular, and PHP. I enjoy hanging out with my wife and son, lifting weights, and advancing in my free time.

10 replies on “Simple WordPress Plugin Tutorial”

Fine, I’ll bite. It’s a “Simple” tutorial. It’s meant to get your feet wet. There are no assertions that we’re building something great here. Does it say “Advanced Super Awesome WordPress Tutorial”? No, it says “simple”. If you’re an elite WordPress developer, this is useless. But you wouldn’t be searching for “WordPress Plugin Tutorial” if you were. Clearly your opinion was so strong that you felt it necessary to judge the post, so why don’t you provide constructive criticism?

@Mark Your comment is utterly useless and pointless, you don’t even give a reason why you think it’s useless. Don’t bother people with nonsense comments.

Hi, thx for this, it may be simple to the expert who made first comment above, but to me its complex and i learnt a lot.
Thanks again

Hello jack…it was really useful…..i cant believe it ..I made a plugin….
can u explain what is hooking ? i just started learning wordpress….pls help….

Hi sku,

Littered throughout the WordPress code base are things called “hooks”. There are two basic types: filters & actions. Filters are functions that your plugin can “hook” into that allows you to modify the output of the page (“filter” it). The action hooks allow you to execute code during a specific point in the page creation process.

Hope this helps!

I love this tutorial. Nice job. You explain things very clearly. Just a question. If you want to pass more than one function to the the_content, how do you go about doing so? I figure you must either:
A) Add a second add_filter function. (Although from experience, the second seems to override the first)
B) Call the function in the final function and append it to $content.
So, $content = WPHackerNews_link() . some_other_function() . $content

Is this right?

Comments are closed.