4

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?

8

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.

  • 2
    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 '14 at 9:22
  • Info on WordPress hooks/filters: codex.wordpress.org/Plugin_API – Jonathan Hult Sep 25 '17 at 21:34
2

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' );

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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