I read over the documentation several times and have been having a hard time trying to figure out what is going on with the function. I’m more and more confused after looking at the documentation, looking over the source code as well.
add_filter($tag, $hook, $priority, $args);
it seems to me the new function extends the parent function. What puzzle’s me is what parts of the hook becomes overridden. in some examples in the documentation i see that some variables are replaced with the $args in your new $tag.
I almost understood it all here: http://www.andrewnacin.com/2010/05/18/rethinking-template-tags-in-plugins/
but then i couldn’t figure out how you pass arguments and which eventually get overriden.
thanks in advance.
add_filter()
is a companion function toapply_filters()
. Beforeapply_filters
is run for a certain filter (the$tag
argument inadd_filter()
), you can useadd_filter
to register a filter for a tag. Whenapply_filters()
is executed with that tag name, it calls all the registered filters in order. Filters are used to pass data through functions for manipulation. For example, one that I often find myself using is the wp_list_pages filter. I use it to remove line breaks from the pages list. So here’s how it works:First I define a function that takes one parameter and returns it after working with it:
Then I add the filter hook:
add_filter( ‘wp_list_pages’, ‘my_list_pages_filter’ );
add_filter
tells WordPress “When the functionapply_filters
is called with the first argument being ‘wp_list_pages’, callmy_list_pages_filter
.” Filters must send at least one value (of any type: string, array, integer, etc.), and they expect the function to return one value.They provide you a way to manipulate the input before sending it back.
do_action
is an entirely different hook. In order to send information to your filter function, do the following (taken from your example):And then in your functions.php file, add this:
That’s a pretty rudimentary use of filters, but it’s a start. You can really get an idea of what you can do with filters with the same example with some enhancements:
Chris,
You seem to be confused by a few things:
it is very nice article, but I must do some stupid mistake, nevertheless….
I am trying to remove some items in WP3+ Navigation Menu under “Screen Options” via this “add_filter” technique:
wp-admin/includes/nav-menus.php:
mytheme/function.php:
It seems the original functions is not a part of some CLASS:
But as a result I can see the original “Screen Options” with all the items.
If I remove the lines:
‘css-classes’ => _(‘CSS Classes’),
‘xfn’ => _(‘Link Relationship (XFN)’),
‘description’ => __(‘Description’),
directly in WP core, everything looks OK, so I am not sure it it is possible to override all the WP functons this way.
Thank you very much for your advice.
With best regards, Milo
i have placed hook here in the template file:
the hook just self executes in the functions file:
with my filter i’m trying to pass classes to this function.
then finally i’m really confused as to how to write the filter…