How to: Overwrite WordPress core functions

by Jean. 46 Comments -

I have read many “tutorials” which told users to modify WordPress core files. This is a really, really, bad idea. Why? Simply because you’ll have to modify that file again when you’ll upgrade your blog. Here’s how to overwrite WordPress core function without modifying any core file.

Why overwriting instead of replacing?

At first, modifying a core file seems a lot easier than overwriting it. But what will you do when you’ll have to upgrade your blog? New WordPress versions are released something like every two months, so it might be a long and boring work to reimplement each core file you previously modified.

Happilly, there’s a solution to that problem. It is WordPress specific functions calls filters. For exemple, when you install a WordPress plugin which modify some WordPress core functionnality, you can be sure that the plugin uses a filter.

Using filters

As I said, a filter can be used within a plugin. But that’s not necessary: You can also use it on the functions.php file from your theme. If your theme doesn’t have a functions.php file, you should create it.

The most common WordPress filter function is called add_filter():

add_filter('hook_name', 'your_filter', [priority], [accepted_args]);

Let’s study the required and optionnal parameters in detail:

  • hook_name: (required) the name of the hook provided by WordPress. It defines when your filter will apply.
  • your_filter: (required) The custom function to call instead of hook_name.
  • priority: (optionnal) used to specify the order in which the functions associated with a particular filter are executed.
  • accepted_args: (optionnal) The number of accepted arguments.

Exemple use of the add_filter() function

Let’s see how to use the add_filter() function with a practical exemple. The following code overwrites the bloginfo() function.

add_filter('bloginfo', 'mybloginfo', 1, 2);
add_filter('bloginfo_url', 'mybloginfo', 1, 2);

function mybloginfo($result='', $show='') {
        switch ($show) {
        case 'wpurl':
                $result = SITE_URL;
                break;
        case 'template_directory':
                $result = TEMPL_DIR;
                break;
        default: 
        }
        return $result;
}

Removing filters

While it is possible to add new filters to overwrite WordPress core functions, it is also possible to remove existing filters. For exemple, many people who publish code on their blog are tired about the curly code, because it breaks the code. A WordPress function called wptexturize() replaces normal quotes with curly quotes. As this is a filter, it is possible to simply remove it and get rid of theses curly quotes:

<?php remove_filter('the_content', 'wptexturize'); ?>

Nothing hard, isn’t it? You now know how to overwrite WordPress core functionnality without editing core files, as well as removing unwanted filters.

  • http://www.0window.com/blog/ Catrin W

    Well, it is not hard when you, master of Wp, are explaining it :). Thanks for sharing. Indeed very useful as i didn’t know it was possible to overwrite core wp functions.

  • http://www.lyxia.org jbj

    Thanks Catrin, I appreciate your kind words :)

  • http://www.badcatdesign.com Kel

    Excellent post. I’m surprised not to see more info like this – everyone seems to focus on the theming and theme related functions rather than the back-end/core issues. Thank you!

  • http://cahyo.info Cahyo

    Thanks for sharing the information

  • http://staffdocs.com alex

    Nice article :)

  • http://www.21stsoft.com developer

    Well, I generally tend to get into the code details,but WordPress is new to me. These little tutorials help immensely. I am currently redesigning and rebuilding my entire website in WordPress so these posts are extremely useful to me.

    I use your website as my browser home page so I don’t miss anything.

  • http://spiele.hitmeister.de/ Frank Spiele

    I´ve actually just started blogging and I need to read up on word press and templates etc. I´ve come across a few blogs which give a lot of information, which is always good for beginners like me. I´d ike to think I´ll get the hang of it all soon – fingers crossed!

    Frank

  • http://voldenuit.us/ Omar

    Hi, this helpd me out alot, but i wanted to ask if you had a list of all the hook name’s, since theres alot of them.

  • http://www.lyxia.org jbj

    @Omar: You can find some hooks here.

  • http://www.webtlk.com Web Talk

    Well, that’s a nice article if i understood it! LOL!! I am more than sure that the piece of code you provided is going to be quite useful to…people who know their way through WordPress. As far as I am concerned i had to read your article twice just to find out that i didnt know what it was talking about. I just know how to upgrade my blog and my plugins plus some other nice tricks to protect it and how to work with ftp…and that’s it! ta-da! When something goes wrong i have, as a last resource, pay to get the job done..sad but true!

  • http://twitter.com/phluxor Robert

    The term overwrite in this context is not strictly correct since using hooks only “hooks” your code into the wordpress function that is already being executed. It allows you to additionally manipulate the data after wordpress is done with it. If you really want to overwrite a wordpress function, then I’d suggest copying the code for the desired function into your functions.php file, giving it a different name, changing the code to suit and then calling that function everywhere in your template.

  • http://www.lyxia.org jbj

    @Robert: Thanks for the correction!

  • http://hayespotter.com Hayes Potter

    very well said post

  • http://www.dollarshower.com Ajith Edassery

    I still overwrite core files because adding filters can be more difficult depending on the scenario ;) Well, right now I am trying to write a couple of plusings to learn how to use filters properly. May be after that…

  • Charly

    Hello jrj..
    How about function / filter to hide or replace some word at admin area. For sample, at header i want to replace “Howdy” with “Logged User :” or at footer, I want to replace “Thank you for creating with WordPress” with “Powered by WordPress”
    Thx before and after..

  • http://www.modification.org/ Teresa

    Thank you, this is a big help to a problem I’ve been having.

  • http://balivillasagent.com/ Bali Villas

    I am currently redesigning and rebuilding my entire website in WordPress so these posts are extremely useful to me.

  • Pingback: Links for 27th November 2008 | Velcro City Tourist Board

  • http://itsoke.com brandon alan scofield

    I learn new lesson here, some themes have function php file, some not … thank you

  • Pingback: links for 2008-12-14 | girlie geek

  • Pingback: WordPress Functions.php Magic

  • http://www.scsnyc.com/ NYC Limo, LGA Limo, JFK Limo

    NIce article, came in really handy for me. Thank you. I used to modify my core files. Reading this made things really easy for me.

  • http://www.yourdevoncottages.co.uk Cottages in Devon

    Really neat article… generally you wouldnt want to overwrite core functions but sometimes you need to to make your site even slicker.

  • http://www.3arn.net/ Make Money on the Internet | Abdulrehman

    Oh nice idea, I need to check on this one because I have replaced many of the wordpress functions in the core files. I’ll try this now because the new wordpress upgrade it out!

  • http://www.antwerphotels.info/ Antwerp Hotels

    That’s a really cool idea. I’ve always wanted to mes around and check out some core function changes. But didn’t want to mess things up at the same time. This will help me just to twist things around and see. Thanks a bunch

  • http://mfm.vn long.vu

    Why I can’t overwrite it, when I called bloginfo(‘siteurl’) it not point to mybloginfo() function or what, so I still get old site url value.

    Help me! Thanks!

  • http://sovoosbaratos.com/hoteis-baratos Hoteis Baratos

    Thanks for the info! Very helpful!

  • http://www.ielts.in.th IELTS

    Thanks Jung, it helps my blog a lot.

  • http://www.villasinseminyak.net/ Villas in Seminyak

    Owh, good. my friends still in re-coding the site with WP engine, maybe this articles will help him to know deeply about WordPress. Thanks for sharing with us

    Regard’s from Bali Island

  • http://www.buy-somaonline.com Pam @ Soma Online

    Superb. Another awesome article on your blog. You simply rock. This would really help me. I’m still new to wordpress.Thanks a lot.

  • http://www.beyondtelevision.co.uk/ electrical goods

    Awesome. just the solution I was looking for. I’ve been having this problem for few days now. Replacing the functions certainly did not work. I’ll try overwriting them. Cheers

  • http://www.cheapflightsservice.com/ airlines

    Really cool article. I’m kind of new to blogging and this certainly is a treat. would love to learn more and more. Appreciate it. Cheers

  • http://www.ideacreations.ca Phil

    Hey thanks for this article!

    I am trying to edit “the_editor” function – but it is not fully replacing the function when I use:

    add_filter(‘the_editor’, ‘custom_the_editor’);

    It replaces SOME of the code – but other parts are not removed. OR say if I make the function completely empty, the original function continues working fully. Am I missing something?

    I have a feeling it has something to do with Roberts comment (#11) – so is there a way to make certain parts of a function NOT work? Or can you only add to functions that already exist.

  • http://www.highrankingseo.net/about/about-sean Sean Callahan

    did anyone find out if it is possible to hack the core and get rid of “thank you for creating with wordpress.”…it just takes up screen real estate….everyone who needs it will just do a direct search for wordpress….makes no sense really to me….anyway, if anyone found out how to do it…please let me know. I looked in all the files and can’t find it.

  • http://www.brianshoff.com Shoffy

    Great post! Not so easy to find this info.

    And this is dumb… but… you spelled “Example” wrong “Exemple” (if ya cared to know)

    Thanks again!

  • http://www.brianshoff.com Shoffy

    Hmmm… couldn’t seem to get this to work for wp_generate_password. Perhaps this is because it’s not a filter?

  • http://www.brianshoff.com Shoffy

    Sorry to spam up your comments…. but I answered my own question.

    Interesting to note that the functions in pluggable.php look to see if the function already exists. With that little tidbit, I just created a plugin with the same name as the function I wanted to replace.

    Poof! It’s magic! :-)

  • http://thunderpaw.com David Lyle

    Very nice to find such a succinct post!

    Just what I was looking for too…wooohoo!

    thanks for posting.

  • http://www.doublebackslash.net Aeox

    Hi, that’s a very helpful article, but i have one serious question. What about functions that are inside a specific class ? How can i reference them by string ?

    For example: I want to overwrite the output of the “Recent posts” Widget.
    The function is named :

    function widget($args, $instance) { …. }

    Ok.. but, this function is inside of this class:

    class WP_Widget_Recent_Posts extends WP_Widget { … }

    There are also other classes with this function name, so the function name itself won’t help me. I need something to tell the add_filter – Function that he has to look in a specific class. I did not found something in the api or google, thats why my last hope is this article :)

    Thx for any help,
    Aeox

  • http://wp-central.com WP-Central

    Great help again!

  • Matteo

    Hi, is it possible to overwrite all of the functions of the core? I’m trying with gallery_shortcode (media.php) doing so:
    -copied from media.php the original function
    -pasted in functions.php
    -renamed
    - modified deleting some html I don’t need
    - added this code after my new function: add_filter(‘gallery_shortcode’, ‘my_gallery_shortcode’, 0, 1);
    but it doesn’t work

    Where am I wrong?
    Thanks

    Matteo

  • http://mimoymima.com Brent

    you rock :D thanks for this tutorial, we’re sending it to some dev guys helping us out with our site, they weren’t sure how to make a fix without overwriting core files, your description is really straight forward and helpful.

  • http://www.strangebutfunny.net/ Anthony

    Does this work with JavaScript functions too or is there another way of doing that?

  • Roland

    Hi,

    Is it possible to overwrite ANY core function? like the “media_upload_tabs()” function. I want to add more tabs in the media uploader section.

    Thanks in advance

  • Jewel

    Thanx a lot !!!

  • http://www.goodafternoon.co Julian Krispel-Samsel

    It’s overriding not overwriting by the way…