Beginner's Guide for WordPress / Start your WordPress Blog in minutes

What, Why, and How-To’s of Creating a Site-Specific WordPress Plugin

Do you want to add a site-specific plugin to your WordPress website?

A site-specific plugin allows you to easily add code snippets to your WordPress website without relying on your theme.

In this article, we will explain how to create a site-specific WordPress plugin and why it’s important.

Site Specific WordPress Plugin

What is a Site-Specific WordPress Plugin

A site-specific WordPress plugin is a standalone plugin that you can use to add all customization snippets that are not theme dependent.

When working on your website, you’ll often find WordPress tutorials asking you to add code to your theme’s functions.php file or a site-specific plugin.

WordPress doesn’t come with a site-specific plugin. You’ll need to create your own and then install and activate it.

Why Create a Site-Specific WordPress Plugin?

As we mentioned earlier that you’ll often come across tutorials showing some code that you can add to your theme’s functions.php file or a site-specific plugin.

These custom codes can be used to add new post types, taxonomies, shortcodes, and tons of hacks to improve your website.

If you add the custom code to your theme’s functions file, then it will disappear if you update or switch your theme. You can create a child theme and use the child theme’s functions file to save your code. However, your code will still disappear if you switch themes.

A site-specific WordPress plugin allows you to easily add custom code snippets to your WordPress website and make sure they’re theme independent. It is a standalone WordPress plugin which means it doesn’t depend on your theme, and you are free to update or switch your theme.

That being said, let’s take a look at how to easily add custom code using a site-specific plugin. We will show you two ways to do that, and you can choose the method that works best for you (hint Method #2 is easier for beginners).

Method 1. Manually Create a Site-Specific WordPress Plugin

We know this may sound a bit geeky to beginners, but we will try to make it as simple as possible for you.

First, you need to create a new folder on your desktop and name it after your website, for example, mywebsite-plugin.

Creating your site-specific plugin folder

Now open a plain text editor on your computer like Notepad or TextEdit. You need to create a new file and save it as mywebsite-plugin.php in the plugin folder on your desktop.

Creating the plugin file for your site-specific plugin

Your plugin file needs a specific header code so that WordPress can recognize it as a plugin. Go ahead and add the following code to your mywebsite-plugin.php file:

<?php
/*
Plugin Name: Site Plugin for example.com
Description: Site specific code changes for example.com
*/
/* Start Adding Functions Below this Line */

/* Stop Adding Functions Below this Line */
?>

You can replace example.com with your own domain name. Once you do that, your site-specific plugin is ready.

There are two ways to upload your site-specific plugin to your website. You can either upload it via your WordPress admin panel or use FTP.

1. Install Site-Specific Plugin from WordPress Admin Area

This method is easier and recommended for all users.

First, you need to create a zip file of your site-specific plugin folder.

Windows users can simply right-click on the plugin folder and select Send to » Compressed (zip) folder.

Creating zip file in Windows

Mac users need to right-click and select “Compress mywebsite-plugin”.

Creating a zip folder on Mac

Once you have the plugin’s zip file, go to the Plugins » Add New page in your WordPress admin area.

Then click on the ‘Upload Plugin’ button on the top.

upload plugin

Next, click on the choose file button to select the zip file you created earlier, and then click on the ‘Install Now’ button.

WordPress will now upload and install the plugin for you. Once it’s uploaded, you need to click on the activate button to start using your site-specific plugin.

Activate plugin

2. Upload Your Site-Specific WordPress Plugin via FTP

For this method, you don’t need to create a zip file. You will be uploading the plugin via FTP.

First, you will need to connect to your website using an FTP client.

Once connected, go to /wp-content/plugins/ folder under remote site column. Next, you need to select your site-specific plugin folder and upload it to your website.

Uploading plugin via FTP

Your FTP client will now transfer your site-specific plugin folder to your WordPress website. This will install the plugin on your website.

However, you’ll still need to activate the plugin to start using it. You can do this by going to the ‘Plugins’ page inside your WordPress admin area and then clicking on the ‘Activate’ link below your site-specific plugin.

Activate plugin

That’s all. Your site-specific plugin is now ready to be used.

Adding Custom Code Snippets to Your Site-Specific Plugin

There are two ways to edit your plugin and add custom code snippets to it.

The first method is to do it via the WordPress admin area. You can go to Plugins » Editor page.

You will see a warning message, and you need to click on the ‘I understand’ button to continue. Alternatively, if you want a safer way to edit the files, then skip to the second method below.

Heads up warning in the plugin editor tool

Next, you need to select your site-specific plugin from the drop-down menu labeled ‘Select plugin to edit.’

The editor will load your plugin file, and you will be able to add code snippets in it.

Select a plugin to edit in the plugin file editor tool

Once you are done, click on the ‘Update File’ button to save your changes.

If there is something missing in your code or it has the potential to break your website, then the plugin editor will automatically undo your changes.

However, if the editor fails, and you see the white screen of death, then you can use FTP to edit your plugin file and undo those changes.

The second method is to directly edit the plugin file using FTP. Simply go to the plugin folder using your FTP client. Right-click on the plugin file and then select View/Edit file.

Editing plugin file via FTP

You can also download the plugin file to your computer, edit it, and then upload it back.

Method 2. Using The WPCode Plugin

This method is a lot simpler and gives you a better way to manage your individual code snippets in WordPress using WPCode.

The first thing you need to do is install and activate the free WPCode plugin on your website. For more details, see our step by step guide on how to install a WordPress plugin.

Upon activation, the plugin will add a new menu item labeled ‘Code Snippets’ to your WordPress admin menu. Clicking on it brings you to a page where you will manage all your custom codes.

To add your first code snippet, click on the ‘Add New’ button.

Click the Add New Button to Add Your First Custom Code Snippet in WordPress

This will bring you to the ‘Add Snippet’ page. Here, you can choose a code snippet from the pre-made library or add your custom code.

To add custom code, navigate to the ‘Add Your Custom Code (New Snippet)’ option and click the ‘Use snippet’ button.

Add your new custom code snippet in WPCode

Now, you can enter a title for your custom code snippet. This could be anything that helps you identify the code.

After that, you can go ahead and paste your code snippet into the code box. You also need to select the PHP Snippet type from the Code Type drop-down list on the right.

Adding custom code

You can also add notes for the code in the ‘Basic info’ section.

You should use this area to write down what this code does, where you found it, and why you are adding it to your website. This will help the “future you” remember why the “past you” added this code.

Add notes and tags to identify and organize your code snippets

You also have the option to assign tags to your code snippets which can help organize code snippets by topic and functionality.

The plugin also allows you to select how you want to run the code snippet. In the ‘Insertion’ section, you can select the ‘Auto Insert’ method to automatically insert and execute the code on your site.

You can choose from admin area, front-end, or everywhere options. If you are unsure, then keep the default ‘Run Everywhere’ option.

Pick the insertion method for your custom code snippet

Or, you can choose the ‘Shortcode’ method. With this method, the snippet is not automatically inserted. Once you save the snippet, you’ll get a shortcode that you can manually insert anywhere on your site.

You can also use the ‘Smart Conditional Logic’ section to either show or hide auto-inserted snippets based on a set of rules.

Use smart conditional logic to decide when snippets should load

For example, you can load code snippets for logged in users only, load PHP code snippets only on specific page URLs, show code snippets based on type of page, and more.

Finally, you can toggle the switch from ‘Inactive’ to ‘Active’ and then click on the ‘Save Snippet’ button.

Save and activate your custom code snippet

If you just want to save the code snippet without activating it, then you can click on the ‘Save Snippet’ button only.

Once you have saved and activated a code snippet, it would become automatically effective on your website, if that’s the insertion method you chose.

For more details see our guide on how to easily add custom code snippets in WordPress.

We hope this article helped you learn why and how to create a site-specific WordPress plugin. You may also want to see our list of useful functions file tips and most wanted WordPress hacks to best use your site-specific plugin.

If you liked this article, then please subscribe to our YouTube Channel for WordPress video tutorials. You can also find us on Twitter and Facebook.

Disclosure: Our content is reader-supported. This means if you click on some of our links, then we may earn a commission. See how WPBeginner is funded, why it matters, and how you can support us.

The Ultimate WordPress Toolkit

Get FREE access to our toolkit – a collection of WordPress related products and resources that every professional should have!

Reader Interactions

119 CommentsLeave a Reply

  1. I’m getting the same error as Sonya above. Does anyone have a fix?

    Parse error: syntax error, unexpected T_LNUMBER in /home/statisu0/public_html/wp-content/plugins/statisticshowto-plugin/statisticshowto.com-plugin.php on line 10

  2. Hi again. I’ve been reading through all of the comments above and, while some show your answer and resolution to the problem, many don’t. So it’s hard for me to learn from how others resolved their problems! Anyway, here’s what I’m wondering: if by following the instructions in this post to create a folder within my “plugins” folder, how will I be able to see my new site-specific plugin file?
    For example, I followed the instructions to create a folder called susansinthegarden-plugin. Then I put my plugin code in a file called susansinthegarden-plugin.php. I can’t see the plugin when I go to plugins on my dashboard.
    Is this because the new plugin text file exists in a sub-folder under “plugins”? I can’t figure out what I’m missing but really need to resolve this. Is there anyone out there who can help me? Thanks so much!

        • Hey Emy,

          The plugin header is the part that tells WordPress that this file should be treated as a plugin. It also tells WordPress the name of the plugin, version, and other information.

          In the code shown above, the header part begins right after the first line and ends at line 5. It contains plugin’s title and description.

    • OK, I resolved my program. Not being a code-writer, I didn’t realize that there was a separate header to wrap around the code I was borrowing. Duh. Thanks for your help.

  3. I followed your instructions to create a folder under wp-content/plugins etc. and put the file containing the code into that folder but I can’t see my new plugin when I go to my dashboard and look under plugins. Did I miss a step? Thanks in advance for your help!

  4. Hello

    I created the directory and the php file but i cannot see the plugin at all

    /wp-content/plugins/yoursitename-plugin/
    Open a blank file and save it as “yoursitename-plugin.php”

    dont see it on the dashboard plugin list and neither in the Plugin>editor

    Can you please help me

  5. When I try to activate the plugin, I get the following error message:

    Plugin could not be activated because it triggered a fatal error.
    Parse error: syntax error, unexpected ’06’ (T_LNUMBER) in /var/www/domain/wp-content/plugins/ETK-PLUGIN/ETK-PLUGIN.php on line 10

    Can you please help?

    Thanks!

  6. hi there, when i put this in the directory

    I received this error message

    The plugin generated 2 characters of unexpected output during activation. If you notice “headers already sent” messages, problems with syndication feeds or other issues, try deactivating or removing this plugin.

    but my plug in is activated….. please help me understand what is going on?
    thank you

  7. “All you have to do is create a new folder in the plugins directory. Example: /wp-content/plugins/yoursitename-plugin/
    Open a blank file and save it as “yoursitename-plugin.php”
    Put the following code in the file:”

    i hv few question on these .

    1. i can’t create a folder onthe plugin directory.
    2. where to open a blank file ?
    3. the plugin diretory cant install that file.

    thank you

  8. This is a really useful post–thank you! Perhaps someone else asked this and I just missed it in all the comments, but: will a site-specific plugin override a function that is in the theme’s functions.php? For instance, if there is a “remove_action” in the functions.php, will the same “add_action” in the plugin take precedence?

    • Both functions.php file and site-specific plugin are treated as plugins. Functions.php file loads after plugins but they do not have precedence over eachother. This is why using the same function in both files can cause unexpected results. The best way to override pluggable code is by using hooks and filters.

      Admin

  9. I’m building a plugin at the moment for a multisite network and I need certain functionality available only in specific sites, so this is a perfect article for me right now.
    I have one question though…..how do I name the site plugin folder for a site that is created as a subdomain? Example: subdomain.mainsite.com would it be subdomain-mainsite-plugin or just subdomain-plugin?
    Hope this makes sense, question based on your tutorial.

  10. very good. when you create a second instance don’t forget do give the “register and load” function an own name, like i did ;)

  11. Nice one there. Kindly update the post to inform readers that after activating the plugin, they will have to click on the “edit” link on the plugins page, to add their codes.

    Most newbies might not know this…

    • Actually we do not recommend editing plugins and themes from WordPress admin area. Instead, we would recommend editing your plugins in a text editor via FTP client. This way in case of an error you would be able to quickly fix it without losing access to admin area for too long.

      Admin

  12. Thank you thank you thank you!! This has solved an issue that’s been puzzling me for weeks – and now solved in less than 1 minute.

    Can’t express how grateful I am for you sharing your knowledge – thanks again!

  13. Thank you for the advice! But now I’m confused: what’s the difference between this method and the plugin “Code Snippet”? Is the result the same? Or do they accomplish the same thing in a different way?

  14. Three years later this post is still giving – It’s changed the way I think about customising wordpress – Thank you!

    I tried this today and created a a site-specific-plugin with code to hide the wordpress menu bar for non-admins, and to add my latest post to a ‘Current issue’ menu item. Both worked perfectly.

    But the third snippet I added to the plugin failed to work. When I copied the code to the child theme’s functions.php it worked as expected.

    Can you explain why this would happen?

    I’m trying to modify the effect of the plugin “Restricted Site Access” by allowing access to more than a single page. The code I tried in my site specific plugin and the functions.php was:

    //
    add_filter( ‘restricted_site_access_is_restricted’, ‘my_restricted_check’ );
    function my_restricted_check( $is_restricted ) {
    global $wp;
    if (
    $wp->query_vars[‘pagename’] == ‘contact’ ||
    $wp->query_vars[‘pagename’] == ‘subscribe’ ||
    $wp->query_vars[‘name’] == ‘aplr-2013-volume-21-number-2’
    )
    $is_restricted = false;

    return $is_restricted;
    }

    Any advice or comment would be welcome. I’m confused!

  15. after trying this. My site is opening blank… Please help.. Av tried deleting the files i created but still blank

    • Fixed, actually it is necessary to add that php comment in the php file, or else it wont appear on the admin panel.
      That php comment is used to show the discription of the plugin in the admin panel.

  16. Hello,
    This is Paolo, i am building my website and theme with WP last edition 4.1.1.
    i Am trying to learn custom type fields and I found your website very useful. i hav ea issue, though: even if following this post i created the folder my theme plugin and with the related file .php you mentioned here, for the site specific plugin, copy all in localhost using WAMP server. i opened then my dashboard, went to plugins but my new plugin dont appear. what is going on? did i miss anything? thanks
    paolo

  17. You can try and fit your modifications in site-specific plugin by using filters. However, since you had to edit specific files we doubt that all your edits can be implemented in a site-specific plugin using filters. In that case you should make those changes into a child theme. All your custom CSS should also go into your child theme’s stylesheet. You can also use your site-specific plugin to enqueue a custom stylesheet.

  18. Hmm, looks like my last post went missing while registering for this annoying disqus plugin.

    Anyways:
    At first I’d like to thank you for sharing this information.

    Secondly I do have several questions regarding this post.

    1) Is it possible to also make site specific plugins for other .php’s where I’ve added some codes?
    Such as front-page.php post-page.php and post-archives.php

    2) Is it possible to do something like this for .css codes?
    I run genesis as framework(Parent theme) and a child-theme that I’ve downloaded.
    Now since there are no grand-child theme’s in wordpress I’ve made my alterations in the child-theme’s folder

    This includes a lot of different .css edits, Is there a way to make site specific .css files/plugins like this, so I can maintain the origional child-theme (and perform an update if any updates are released)?

    3) When I create a site-specific plugin to change the footer and activate it, I will see both the origional footer and my own footer on the site.
    Is there a way to go around this?

    My plugin looks like this:

    Once again thank you for sharing this information on site-specific plugins, and I hope to hear soon from you guys.

  19. Thank you for your patience… I’m still trying to figure out how to ‘create a new folder to plugins directory’ :-)

    • Hi Chelsey. Consider this guide:

      Go to “File Manager”. It will take you to “/public_html” directory. Click on “wp-content >> plugins” . This is where you will “create” a folder called “yoursitename-plugin”. After that, create a file using some text editor(notepad++), paste the code given above and save the file as “yoursitename-plugin.php”. Upload it to “yoursitename-plugin” folder and activate it in your wordpress admin area. Easy as that!

      Hope it helps you a lot.

      Regards,
      NomadTech

      • This is a great post. I followed the instructions but the plugin is not appearing in my plugin list.

        • me same..where did we make wrong? thanks in advance for any tips to solve this

  20. Your code seems to be correct. Here is what you can do:

    Make sure you have saved the plugin file in the /wp-content/plugins/ directory.

    Make sure that your plugin file name is correct. We recommend using yoursitename.php format. For example if your domain name is black-circles then your plugin file name should be black-circles.php

    • I originally had the plugin file (bc-plugin.php) in its own directory called blackcircles/wp-content/plugins/bc-plugins. That didn’t work.

      Then I tried moving the bc-plugin.php file from that folder to the blackcircles/wp-content/plugins folder. Still doesn’t show up in my admin panel.

      Do I have to “enable” it first before it shows up or something?

      Confused….

      • If the file is correctly placed in your plugins folder then you will see it in your WordPress admin area under Plugins. If you see your plugin there, then you will have to click on the activate link below the file to activate the plugin.

        Did you try renaming the file to something else?

        • Tried renaming it 3 times – none of them show up….

          I must be doing something wrong (or not doing something that I should be doing)…

        • So can I use this one site-specific plugin for multiple functions, or is it best to do something similar to this for each one?

    • I’m having a similar issue with mine. I’ve created a site specific plugin to create a custom content type, but the custom content type is not showing up in my admin panel underneath pages like it should.

  21. i got this message while trying to install it.

    The package could not be installed. No valid plugins were found.

  22. This is a fantastic post, thanks! Quick question – could this same method be used to modify an existing plugin, sort of like you can use a child theme to modify existing CSS? I know you can modify a plugin directly, but I’m trying to avoid losing the modifications when the plugin is updated.

    • Joe, yes this can be used to modify plugins. Another way to modify plugins safely is by changing their header information. You can use the header shown in the above code as an starting point.

      Admin

  23. I am new at this and learning as I go but I am confused as in the instructions both the singular and plural version of plugin was used. Am I to create one plugin file to put all snippets into or seperate plugins for each code/snippet/task?

    For example – I found this article by gooling for how to create more than one custom post type. Would I put each custom post type into a seperate plugin?

    Or could the code for custom post type go into the same plugin file as theme support for post thumbnails as I have it currently in my functions.php?

  24. what about custom.css? can we made something like this. it is good to have child theme then.

    • A child theme is always recommended but there is a fine line as to how much functionality themes should have and what functionality should fall under plugin domain.

      Admin

  25. Great article. I did this, and it was very easy. But now I am taking this further and made another file to my plugin for the site specific widgets. My first widget.
    Have fully created 2 widgets, but only the last one is showing in admin. I guess is something with hooks or register_widget, but i cant crack this one.
    Seams like an easy error to solve, if you got the experience. But for a beginner Google is not helping at all.

    Resume of my widget file:

    widget script
    widget script

    a function witch registers my 2 widgets

    Outside this function is add_action(widgets_init, name of above function)

    Please help

  26. so when i read
    Paste this code in your theme’s functions.php file or your site-specific plugin
    i just create this site-specific plugin and add code to this rather than my functions.php

  27. Your site is god sent! I’ve literally been going through each of your tutorials, making a list of all the one’s I’m going to be implementing on my new site I’m developing. Some things you have covered, I would of never even have thought about, but now I am definitely dong them. Thanks for all the information you provide with your blog.

  28. I’m managing a heavy loaded WP portal, and I found many problem when performing modifications because the developer made the same mistake, and put all the code (functions, etc..) in functions.php

    Now, I re-designed the portal, and separated many functions to site specific plugins. Thanks for this great post

  29. I am not sure what it is I am doing wrong. I have done exactly as you have said and I can not get it to show in my WordPress Plugins.

    I have FTP’s it in, zipped it and tried to upload it via the admin and activating it (wp actually recognized it, and when I clicked the “Activate” link …. nada. It is like it was never there and when I FTP’d back in, it wasn’t there either.

    So I am trying Brent Logan’s plugin he mentioned (Code Snippets).

    Hopefully I’ll have better luck.
    I appreciate the article though. Thanks.

    (I am not that new to this. I have played with WordPress and Drupal and their plugins quite a bit. I am not sure why it is that I am having so much trouble with it.)

    comment would be appreciated — and I will keep reading here as well.

  30. I was doing this until I found the Code Snippets plugin. This plugin makes it easy to add multiple snippets, with a place for easy descriptions, and then activate or deactivate the snippets individually. Quite slick.

  31. I always thought it was really hard but after seeing this I now know I could do it to. Thanks for sharing this, all your articles have been really helpful so far. Keep on the good work!

  32. What I don’t get is that I keep reading everywhere that I should modify the functions.php instead of adding plugins. It is supposed to make the site faster. So, who should I trust? The idea of having a separate file for a the changes I’m making to the funtions.php file seems very interesting. At least, I would be able to easily update my theme without having to check every time the customs changes I made.

    • @ericsavina From what I have been gathering, and I’ve been doing this for a good while, is that the speed and performance using a ton of PHP in your functions.php versus additional plugins that use the same code– I was not able to find much of a difference in speed. Now, anybody correct me if I am wrong and if anybody has different performance comparisons.

      At this point, I’m using my functions.php file as I outlined to keep my functions organized along with a few custom plugins that I have designed with multi-site purpose. Hope that all makes sense.

      • @CreativeBoulder Thanks for your answer. I will create this plugin and check if there are any differences in loading time.

        • @ericsavina Not a problem. Please let me know if you find out some different results than I did? Google Chromes Web Developer Tools have been more than helpful in performance and load-time and same with http://loads.in/.

  33. I fully understand the reasoning behind this setup. I really like the concept. When WordPress Upgrades, then you might need to upgrade some of your functions instead of having to navigate a possibly unorganized file structure. I was thinking about this about a week ago when working on a client site and did this with my functions.php:

    <?php

    // Require Administrator Functions/Classes

    require_once(“lib/php-classes/wp-admin-functions.php”);

    // require Custom WP Plugins (By BusinessName)

    require_once(“lib/php-classes/wp-general-functionality.php”);

    require_once(“lib/php-classes/wp-register-sidebars.php”);

    require_once(“lib/php-classes/wp-register-menus.php”);

    require_once(“lib/php-classes/wp-register-customposts.php”);

    require_once(“lib/php-classes/wp-load-jslibs.php”);

    require_once(“lib/php-classes/wp-breadcrumbs.php”);

    require_once(“lib/php-classes/wp-shortcodes.php”);

    ?>

    Which allowed me to basically work on certain aspects and know where certain custom widgets or shortcodes were instead of a huge functions.php file. What do you think? Which method works better for you?

    • @CreativeBoulder No, this function.php file is within your theme file, not the core wordpress file :)

      • @affanruslan I fully understand what the concept here is. Thanks for the reply. The goal of creating a Site Specific Plugin is to keep your functions, widgets, short-codes (etc) separate so that they are easier to work with and more organized. My concept of using your Theme Specific functions.php and “modularizing” it into separate files is just as easy to stay organized. That’s what I was getting at. I appreciated this post. =)

  34. At first I was confused on what this Post was about. Once I read it I realized the usefulness of doing exactly what you suggest. I named my plugin “site-specific-functions”. Thanks for the information and all you do.

  35. At first I was confused on what this Post was about. Once I read it I realized the usefulness of doing exactly what you suggest. I named my plugin “site-specific-functions”. Thanks for the information and all you do.

Leave a Reply to Ikram Cancel reply

Thanks for choosing to leave a comment. Please keep in mind that all comments are moderated according to our comment policy, and your email address will NOT be published. Please Do NOT use keywords in the name field. Let's have a personal and meaningful conversation.