Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I want to redeclare a function that I inherited from the parent theme.

When I do it in functions.php, I get a fatal error that redeclaration is not possible.

I did a workaround: creating a modified function name and copying all the template files, index.php etc. into the child theme's directory and rewriting the function calls. So now the new function is called.

This works but ignores any updates that the parent theme would have.

Is there a better solution to this?

share|improve this question

2 Answers 2

up vote 4 down vote accepted

Redeclaring a function in a child theme only works when the parent themes' function is wrapped in a

 if( !function_exists( 'function_name' )):

condition. Then you can simply just copy the complete function to the child theme and do whatever modifications you need to do.

If the parent themes' functions aren't wrapped in that if conditional statement, and if no filters or hooks are supplied in the function, it will be best to copy the function to your child theme, rename that function, do your modifications and then update your template files accordingly to reflect the new function.

share|improve this answer
1  
That is exactly what I did. Now I see that this is a fault of php as it does not enable redeclaration as javascript does. –  Gergely May 24 at 9:22

You can first remove the function with

remove_filter( 'hook', 'function_name' );

and then add the function again with the new name and same hook.

For Example

    function remove_content_filter() {

       remove_filter( 'the_content', 'function_name' );

    }

    add_action( 'after_setup_theme', 'remove_content_filter' );

    function new_function_name( $output ) {
        //some code here
        return $output;
    }

    add_filter( 'the_content', 'new_function_name' );
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.