There are parent and child theme inside the wordpress theme. I need to work on it for a client. When I logged on, the child theme was already selected. However, I need to modify a layout. The way it was set up is that in the parent theme's functions.php, there's a function that get all the files in the function folder
// Require all files in the function folder
function parent_theme_require_files() {
$path = WP_CONTENT_DIR . '/themes/parent_theme/includes/functions/';
foreach(glob($path.'*.php') as $file){
require $file;
}
}
parent_theme_require_files();
The function folder includes the folders for customizer, layouts, images, etc. The file I wanted to edit is inside the layouts folder. Inside the layouts folder, there are options for different layouts for header, footer, etc. And you can select the options right inside the Apperance -> Customize in the wordpress dashboard.
So how do I go about editing the layout header file in the child theme? The path for it is "/themes/**parent_theme**/includes/layouts/header/header-1row-logo-phoneblurb.php" and I want to somehow change it to "/themes/**child_theme**/includes/layouts/header/header-1row-logo-phoneblurb.php"
Related
I've recently created a child theme for OceanWP using elementor page builder.
I have uploaded the folder through Filezilla FTP put in the theme's folder next to the parent. I created style.css and functions.php and added the appropriate code into each and all pages of the site load fine after clearing the cache on WP Rocket and Cloudflare CDN.
I then went to add a footer.php file (because I need to add some additional code to the file just before the </head> tag for an affiliate link) and this is where I got confused.
Should I copy the code from the parent footer.php and insert it into the child? (I did this and my margins got all messed up and css styling went beserk)
Should it be left blank until I add code that I need? (I did this and my footer disappeared and menus wouldn't work properly?!)
Should it be neither and do I need to add some sort on action or enqueue script in the functions.php of the child theme to allow footer to appear properly?
I'm doing this all so when and if I update the theme, these snippets of code aren't deleted from my server and site entirely.
Do I even need to do this and should I just add it to the parent footer.php file?
I'm very new to coding and know only small amounts of HTML,CSS and just starting to learn PHP.
Here's the code I have in my child theme function.php file
/**
* Child theme functions
*
* When using a child theme (see http://codex.wordpress.org/Theme_Development
* and http://codex.wordpress.org/Child_Themes), you can override certain
* functions (those wrapped in a function_exists() call) by defining them first
* in your child theme's functions.php file. The child theme's functions.php
* file is included before the parent theme's file, so the child theme
* functions would be used.
*
* Text Domain: oceanwp
* #link http://codex.wordpress.org/Plugin_API
*
*/
/**
* Load the parent style.css file
*
* #link http://codex.wordpress.org/Child_Themes
*/
function oceanwp_child_enqueue_parent_style() {
// Dynamically get version number of the parent stylesheet (lets browsers re-cache your stylesheet when you update your theme)
$theme = wp_get_theme( 'OceanWP' );
$version = $theme->get( 'Version' );
// Load the stylesheet
wp_enqueue_style( 'child-style', get_stylesheet_directory_uri() . '/style.css', array( 'oceanwp-style' ), $version );
}
add_action( 'wp_enqueue_scripts', 'oceanwp_child_enqueue_parent_style' );
You wrote: "I then went to add a footer.php file (because I need to add some additional code to the file just before the head tag for an affiliate link) and this is where I got confused."
"just before the tag head" has nothing to do with footer.php
Usually,
the file footer.php has something to do with "just before the tag body"
the file header.php has something to do with "just before the tag head"
I say usually, because in some themes header.php and footer.php call other files or functions.
So, first of all, be sure you are not confusing header.php with footer.php
If your goal is writing additional code before the tag head, copy header.php and put it in your child theme. Then modify that file.
I have a .php file which uses some WP functions e.g. get_stylesheet_directory_uri(), query_posts, etc... and $wpdb of course.
File it self return JSON data so it is not intended for viewing on its own.
I'm not looking for template, or clicking around in WP dashboard, I just want to know where is the good place in WP file structure to put the .php file and expect WP functions and object to be available.
And also what do I need to include at the top?
You can create custom template in theme root directory or in child theme (child theme is important when you are creating custom template).
template should contain template name, header and footer function.
eg. custom-tpl.php
<?php
Template Name: My Custom Temlate
get_header();
//your other functions and content goes here
get_footer();
after creating template it will appear in your edit page template section under drop down. select custom template for your page and view page you will get your output
You can create a custom page template.
Inside the page template:
<?php
global $wpdb;
[here you will write your code]
?>
On the front pages where you want the json output, use this url
http://domainname.com/wp-content/themes/themename/custompagetemplatename.php
Use your domain name (domainname), theme name (themename) and theme template file name (custompagetemplatename) in place of example names in the url. This url will return you the output for your code.
About this comment in your template:
<?php
/* Template Name: Full Width Page */
?>
You do not need a template name in the header of your file unless you want to use this as a template for pages in wordpress.
The first line of index.php is get_header();
There is no include / require in my index.php. yet the wordpress site continues to render the head section of home page by referring get_header() from general-template.php
How is wordpress framework achieving this?
get_header() is a function located in wp-includes/general-template.php.
This function includes the header.php template file from your current theme's directory.
If your theme contains no header.php file then this function includes the header file located in wp-includes/theme-compat/header.php.
You can find more information about this function in codex of Wordpress.org
The index.php you're referring to is the index off your theme. Within the root folder of your WP installation also an index.php is located. This is the first one called and starts the whole 'trip'.
http://theme.fm/wp-content/uploads/2011/09/wordpress-internals-how-wordpress-boots-up-382x600.png shows an image of the complete file load-sequence.
I have included the following css files into my_theme.info file
stylesheets[all][] = style.css
stylesheets[all][] = css/all.css
stylesheets[all][] = css/static.css
and this files are loading on every page, but my particular css file associated with page is loading before the above css files.
But i want above css files should load first then my page css file load
what i do for that?
By default css files of theme (as set in mytheme.info file) are loading very last and after any other css files of any module. This is done to override any css if needed.
So, if you want to load the css files before any other you should better add them with drupal_add_css function in a custom module and set their weight as -100 or less (number is just an example of order weight).
To get the path you can use the current_path() or drupal_get_path_alias() (for the alias) or any other function/method to get the path.
But, as you said, these are theme css files so in your custom module you could also write this in your module:
function mymodule_init() {
// Set theme's path
$themepath = drupal_get_path('theme', 'mytheme');
// check current path
if (current_path() == "internal/path/of/the/page") {
// add theme css in group CSS_SYSTEM
drupal_add_css($themepath . '/path/to/mycss.css', array('group' => CSS_SYSTEM, 'type' => 'file', 'weight' => -100));
}
}
The code above will move the mycss.css file to group "CSS_SYSTEM" that loads the core css files first and before any other css files from modules (CSS_DEFAULT) or theme (CSS_THEME)
I need to include a custom PHP page in Wordpress.
So what I need to do is just to show this custom php page using the Wordpress theme installed on that Wordpress.
Does not mind which theme is up, the custom php page will have to be shown under any theme is installed in that moment.
How do I do it in Wordpress?
I am new to Wordpress development.
Thanks
Creating a custom php page that will be able to be viewed in any theme (and have the theme applied) would be considerably difficult.
Each wordpress page calls specific theme functions of that particular theme, as well as referencing files of that theme to generate header, footer, css files, javascript files, etc.. Your custom page would need to plan for all of these contingencies, for each possible theme used.
Here's a alternative solution: inject PHP code directly into a standard wordpress page via this plugin http://wordpress.org/extend/plugins/allow-php-in-posts-and-pages/
Meaning: you make a normal wordpress page, but are able to add php to it. When this page is rendered, the proper page template is used, and all the theme references are taken care of for you.
You could do this easily with a page template. WordPress allows you to create page templates which can be assigned to a page via the 'Page Attributes' panel within the page editor. These templates are php files inside your theme directory which begin with some code like (see this page in The Codex for more info):
<?php
/*
Template name: Custom PHP Page
*/
?>
<?php // begin custom PHP page ?>
Typically a template is a variation on the regular theme files (such as page.php) and would call the get_header() and get_footer() functions and have an instance of the loop. However if you simply want to use a custom PHP page, then all you need to do is create the file you want inside the current theme directory and add the above code at the very top of the file.
To output the custom PHP page on your site, you would need to add a new page via the admin area and then assign your new page template to this page.
Alternatively, if you want to include a custom PHP page inside an existing theme file, you use the code:
<?php include(TEMPLATEPATH . '/includes/file.php'); ?>
in this case your custom PHP file would be located inside a directory called 'includes' within your current theme directory.
Tim.
It's not that difficult. Here's what you need:
Once you include the main wordpress blog header, the entire armamentarium of wordpress functions is available to you, which allows you to get the active theme's directory. Once you get that, just include the header and the footer of the theme.
// If title is not displayed before loading the header, Wordpress displays "Page not found" as the title
echo "<head>
<title>Your page title</title>
</head>";
// Include the Main Wordpress blog header
include $_SERVER['DOCUMENT_ROOT']."/wp-blog-header.php";
//Now, you need to get the active theme's folder, and get a relative path to that folder
$homeurl=home_url();
$ddir= get_bloginfo( 'template_directory');
$current_theme_relative_path=substr_replace($ddir, "", 0, strlen($homeurl));
//echo "<br/>The relative path to the currently active theme is ".$current_theme_relative_path;
//Once you have the path, include the header and footer, adding your custom php code in between.
// Include the specific theme header you need
include $_SERVER['DOCUMENT_ROOT'].$current_theme_relative_path."/header.php";
// Your custom PHP code STARTS here
// Add anything you want to display to the user
echo "
<h2>
Your form has been submitted
</h2>";
// END of custom code
?>
<?php
}
// Now end with the theme's footer
include $_SERVER['DOCUMENT_ROOT'].$current_theme_relative_path."/footer.php";
?>
Was very helpfull (even if dated of 2011-13)
Also, as a thank you, i'm sharing the version i made
it's usefull if your wordpress folder is not located at ROOT
PasBin Link - wordpress custom php page
just change the value of $wplocalpath in :
// Wordpress path (if wordpress is not located at ROOT
// $wplocalpath="/Wordpress1";