WordPress.org

Ready to get started?Download WordPress

Forums

functions.php will not work with child theme (21 posts)

  1. frantsch
    Member
    Posted 3 years ago #

    When I copy functions.php as is from the twenty eleven theme directory to my twenty eleven child theme directory (I want to edit it lateron), I obtain the error below:

    Fatal error: Cannot redeclare twentyeleven_excerpt_length() (previously declared in /var/www/vhosts/[blogname]/httpdocs/wordpress/wp-content/themes/twentyeleven_child/functions.php:318) in /var/www/vhosts/[blogname]/httpdocs/wordpress/wp-content/themes/twentyeleven/functions.php on line 320

    Any ideas?

    Thanks!

  2. Chip Bennett
    Theme Review Admin
    Posted 3 years ago #

    First, why are you copying functions from the Parent Theme's functions.php into the Child Theme's functions.php? What are you attempting to accomplish?

    Second, the error you are getting is telling you that you have declared (i.e. named) a function in your Child Theme's functions.php exactly the same as a function declared in the Parent Theme's functions.php. In PHP, you cannot declare (name) two functions identically.

    Notice that all of the functions in Twenty Eleven are named twentyeleven_some_function()? You need to use the same convention in your Child Theme. For example, name the functions in your Child Theme's functions.php using twentyeleven_child_some_function().

    But most importantly: why are you copying these functions? Generally, you will not need to do so.

  3. frantsch
    Member
    Posted 3 years ago #

    Well, Chip, if you read my entries unter wordpress.org/support/topic/how-to-add-pagenavi-to-twenty-eleven-wordpress-theme?replies=10#post-2210655 you will know.
    Have many thanks for your support anyway! I guess this will help...

  4. Chip Bennett
    Theme Review Admin
    Posted 3 years ago #

    There's nothing in that thread that indicates what you're trying to accomplish by copying files from the Parent Theme's functions.php into your Child Theme's functions.php.

    If you can tell me what you're trying to do, I can try to help you accomplish it.

  5. Curtiss Grymala
    Member
    Posted 3 years ago #

    A child theme cannot use the same functions.php as the parent theme, because the parent theme's functions.php file is included after the child theme's functions.php file. Therefore, all variable and function definitions that are not encapsulated in if function_exists(), if isset() or if defined() statements will cause errors.

    When creating a child theme, you do not copy the functions.php file from the parent theme, as it is automatically included by virtue of it being a child theme. The only file that is not automatically included from the parent theme is the style.css file.

  6. frantsch
    Member
    Posted 3 years ago #

    @chip:
    I want to repair the pagenavi plugin, which does not work anymore on my blog ever since my recent upgrade from the twentyten theme towards twentyeleven. That is why I wanted to follow the instructions as given in wordpress.org/support/topic/how-to-add-pagenavi-to-twenty-eleven-wordpress-theme.
    However I did not want do edit my function.php directly in the mother theme (since any changes will be lost with next update), but wanted to implement the changes within the child theme.
    But I was not aware of the fact, that this is not as simple as with the css-files, and copying the function.php and implementing the changes afterwards would not work.
    Now I know...

  7. Chip Bennett
    Theme Review Admin
    Posted 3 years ago #

    @frantsch

    Thanks, that helps!

    It looks like the function referenced in that thread is twentyeleven_comment_nav(). To implement a Child-Theme change to this function requires two steps:

    1) Creating a Child-Theme variation of the function, with a unique name
    2) Replacing the Parent-Theme function name with the Child-Theme function name wherever it appears in the template file(s).

    In your case, you could put this in functions.php:

    function twentyeleven_child_comment_nav() {
        // function code goes here
    }

    Then, you'd need to copy comments.php from Twenty Eleven into your Child Theme.

    Then, in the Child-Theme version of comments.php, replace all instances of twentyeleven_comment_nav() with twentyeleven_child_comment_nav().

  8. fleetadmiralj
    Member
    Posted 3 years ago #

    Unfortunately, I agree with Chip that any solution has to be altering the templates, either Twenty Eleven's templates or by creating new versions of those templates in your child themes, or by commenting out/deleting the function in the twenty eleven functions.php file.

    While many of the functions in twenty eleven come with a "if function exists" check, twentyeleven_comment_nav does not, and has been noted, just creating that function over again will cause an error, and there is no way to copy over it since the function is called directly from the templates.

    So for the meantime, one will have to make some changes that probably shouldn't be necessary if the twenty eleven template had been coded the way it probably should have been to start with. Hopefully it's something they will address sometime in the future.

  9. frantsch
    Member
    Posted 2 years ago #

    Great, it works!

    Have many thanks for your effort and qualified support!

  10. Strategerizer
    Member
    Posted 2 years ago #

    I'd like to have the solution generalized...

    What is the simplest way to have a child theme change some function from the parent theme??

    I understand that the child theme's functions.php get loaded first so putting there the modification is useless. I also don't want to change anything in the parent files that will break when the parent theme gets updates. Unfortunately, the parent theme does not have provide for an easu way with "if function exists..." statement.

    Thanks!

  11. itchybrain
    Member
    Posted 2 years ago #

    @frantsch The functions.php file in the child directory should start out as an empty file. If you duplicate the original file in full you will get an error. The child functions.php file couples with the original functions.php file. WordPress will check for it in the child theme and use any functions declared there. That way you can indeed achieve your aim of keeping the original installation intact, but have changes and new functions in addition in the child.

  12. igloobob
    Member
    Posted 2 years ago #

    hello,
    I have created a load of new sidebars in my functions.php file In the twntyeleven parent theme), how do I go about adding these to a new blank functions theme for my child theme so I do not lose these whenever I upgrade wordpress? I've tried to follow above and doesn't quote seem to work.

    [ 84 lines of code moderated, in the future please use pastebin.com for more than 10 lines of code. ]

    I tried keeping the parent functions file as it is out of the box, then added the above functions into a new functions file in my child theme using

    function twentyeleven_child_widgets_init() {

    but doesn't seem to work, clearly I am missing something, is there somewhere else I need to change to let it know the widget functions should come from the new functions file?

    Any help gratefully received!!

  13. carolyg19
    Member
    Posted 2 years ago #

    Great thread.

    I have the same problem. Let me first start by defining what I am trying to do. This will help Chip and others reading understand my thought process. This will also help to aid in my coding limitations as a beginner.

    1. I created a child theme. It works fine. I wanted to add the header and footer. From my understanding, I need to set up the file functions.php for my child theme folder.

    Only problem - I have no idea what code to use for the twenty eleven child theme. I tried nothing worked.

    My solution:
    Copy everything from the parent theme and save my time...

    My Problem:
    I received the same error. So then I added a the following to line 318 of my child them:

    if(!funcion_exists ( twentyeleven_excerpt_length )){
    }

    But received a:

    Fatal error: Call to undefined function function_exists()
    I made some modifications then received

    Parse error: syntax error, unexpected $end
    I now understand that one solution to fix the Fatal Error is to rename the function references from that of the parent theme. I get that.

    My Question:
    But how would I write my function.php file the way it is supposed to be without the need of copying the entire parent function.php file?

    Thanks,

  14. Chip Bennett
    Theme Review Admin
    Posted 2 years ago #

    I wanted to add the header and footer. From my understanding, I need to set up the file functions.php for my child theme folder.

    What do you mean by "wanted to add the header and footer"? Twenty Eleven already has a header and a footer, so what exactly are you trying to do to the header and footer?

    My solution:
    Copy everything from the parent theme and save my time...

    This is both a bad idea, and a counter-productive idea. It is counter-productive, because it defeats the purpose of using a Child Theme. If you truly intend to override everything, then you're better off just forking the Theme, rather than using a Child Theme.

    It is a bad idea because, as you've found out, functions.php can't simply be copied from the parent Theme into the child Theme. While the template files are executed as an either/or proposition (if it exists in the child, the child-Theme version is used; otherwise, the parent Theme version is used), the functions.php file is a both/and execution: the child Theme's functions.php is executed, and then the parent Theme's functions.php file is also executed. SO, you can't declare (i.e. define) the same functions in both the parent and in the child Theme.

    My Problem:
    I received the same error. So then I added a the following to line 318 of my child them:

    if(!funcion_exists ( twentyeleven_excerpt_length )){
    }

    But received a:

    Fatal error: Call to undefined function function_exists()

    You've not copy-pasted your error message. Note the difference between:

    if(!funcion_exists (...

    and:

    Call to undefined function function_exists()

    (Hint: you misspelled function as funcion in the former, which is why you're getting the undefined function fatal error.)

    But how would I write my function.php file the way it is supposed to be without the need of copying the entire parent function.php file?

    Start with a blank - or even a nonexistent - functions.php file in the child Theme. You may or may not even need it; but start there, and make sure all of your style and template changes are working. Only then should you even worry about any functional changes you want to make.

    And then, as I stated in the beginning: please describe the exact functional changes you're wanting to make, so that we can help you implement them.

  15. carolyg19
    Member
    Posted 2 years ago #

    Chip,

    Thanks that worked. I understand that I was adding more work for myself.

    Thanks,

  16. Osu
    Member
    Posted 2 years ago #

    Hi,

    I'm trying to override the 'read more' link in my child-theme functions.php. I understand you can't override the parent themes functions.php as such, but I have placed my own function for the 'excerpt_more' filter, but it's not replacing the parent theme's function that also uses 'excerpt_more'.

    Any ideas?

    Thanks

    Osu

    function clientname_continue_reading_link() {
    	return ' <a href="'. esc_url( get_permalink() ) . '">' . __( 'Read more... <span class="meta-nav">&rarr;</span>', 'clientname' ) . '</a>';
    }
    function clientname_auto_excerpt_more( $more ) {
    	return ' &hellip;' . clientname_continue_reading_link();
    }
    add_filter( 'excerpt_more', 'clientname_auto_excerpt_more' );
  17. Chip Bennett
    Theme Review Admin
    Posted 2 years ago #

    @mrnabo

    Please start your own topic; your issue is actually different from the issue in the OP.

    Thanks,

    Chip

  18. allforjc2
    Member
    Posted 2 years ago #

    Hi,
    I am very, very beginner on WordPress themes or codes or anything.

    I'm using Sliding Door theme. I saw that you should create a Child Theme (style.css) so i did, and it seems to be working fine. I want to add a widget to my sidebar and the instructions (from the widget source) said to add their code to my functions.php. I am also going to use a custom logo, so thinking I also need to bring my header.php into my child theme?? I'm clueless and just don't want to lose my changes when WP updates, as everyone says i will.

    Chip, you said the following above:
    Start with a blank - or even a nonexistent - functions.php file in the Child Theme. You may or may not even need it; but start there, and make sure all of your style and template changes are working. Only then should you even worry about any functional changes you want to make.

    You also said to "make sure all of your style and template changes are working."
    I'm pretty sure my style.css is working but what are the "templates" you refer to?

    Thank you in advance for your help.

  19. allforjc2
    Member
    Posted 2 years ago #

    Hi again,
    I don't think i am in the right forum. You have the topic, but i am not having the same problem. I am going to post in the "How to" forum.

    Thanks!!

  20. @allforjc2, Please create your own thread with your own details. Don't interrupt someone else's thread like that, it's considered impolite.

  21. dsg257
    Member
    Posted 2 years ago #

    I have the same problem i use weaver theme but everytime it is updated i need to remember to edit it and incert code for certian functions on my site to work
    Any idea how i can do this without having to enter the code every time i update

Topic Closed

This topic has been closed to new replies.

About this Topic