QuestionerNo7
QuestionerNo7

Reputation: 620

How to override a parent file in a child Wordpress theme when parent file is being required in functions.php

I'm rather new to designing and coding Wordpress themes and have recently started a child theme based on the Sydney theme that's offered free in Wordpress. I have hit a snag I can't work out.

There's a PHP file being called through the parent's functions.php that I need to customize and need to be untouched when I update the parent theme. This file is called template-tags.php and is located inside an "inc" folder. Now, supposedly, according to the Wordpress codex (which I have consulted before asking here), any duplicate files on the child theme (except the functions.php) will automatically override those in the parent theme. I don't know if this works as well for files inside folders but I think the fact that this particular file is being called in the parent's functions.php makes it so that it is the parent's file that is being loaded. I am assuming this because the same goes for the style CSS and JS script files that I had to enqueue in the child theme in order to get my own customized versions in.

However, there is nothing in the Wordpress codex that explains how to override a file that is being already called in the parent's functions.php. And I can't find anything anywhere else (not even in these questions: WordPress child theme override a parent theme include, Overiding parent theme functions with a Child theme in WordPress, How to override a not plugable parent theme function from a non function.php file?, Wordpress child theme - functions.php copy - cannot "redeclare") that helps me specifically.

So, to sum it all up:

Short of commenting out the call in the parent's functions.php, which does't seem to me a practical solution but more of a work-around, I have no idea what else to do.

I would appreciate any input at this time. Thanks in advance!

Upvotes: 10

Views: 16849

Answers (3)

Nader Haji
Nader Haji

Reputation: 11

you should use

get_stylesheet_directory() that refers to active theme directory

instead of get_template_directory() that refers to parent theme directory

https://www.csestack.org/overwrite-wordpress-php-file-subfolder-child-theme/

Upvotes: 1

San Francesco
San Francesco

Reputation: 646

Hello @QuestionerNo27,

It's been a long time since you asked this but I've also been looking for an answer for 2 days as I was facing the same issue. There is the answer, simple like "Hi":

  1. You dont need the inc folder in your child theme nor the template-tags.php file.
  2. You just have to copy the function(s) you want to override from your parent template-tags.php and paste it into your child theme functions.php In my case, I wanted to override function mytheme_posted_on() from my parent template-tags.php

And it's now working. Thanks to https://wordpress.org/support/topic/inc-folder-in-child-theme (Stephencottontail answer)

Upvotes: 11

Yasar
Yasar

Reputation: 99

I had a similar problem where I wanted to make changes to the layout of the header in my child theme within the template-tags.php.

The solution that worked for me was to use the following line in my functions.php file in my child theme: require get_stylesheet_directory() . '/inc/template-tags.php';

I was using the original line from the the Parent them in functions.php: require get_template_directory() . '/inc/template-tags.php';

Using the function get_template_directory() was not working because this function will always return the parent theme directory.

Using the function get_stylesheet_directory() worked because it retrieves the Child Theme directory.

Yes I know the name of the function "get_stylesheet_directory()" is not very intuitive but it it actually will return the Child Theme directory location.

It took a while to work this out by searching online. I found this reference online that helped me in my search: How to override a parent file in a child Wordpress theme when parent file is being required in functions.php

Upvotes: 4

Related Questions