How to assign parent page template to its child pages dynamically?
3 Answers
Paste following code to your theme's functions.php
:
add_action('save_post','changeTemplateOnSave');
function changeTemplateOnSave(){
global $post;
$curr_tmp = get_post_meta($post->ID, '_wp_page_template', true);
$parent_tmp = get_post_meta($post->post_parent, '_wp_page_template', true);
if($post->post_parent)
update_post_meta($post->ID,'_wp_page_template',$parent_tmp,$curr_tmp);
}
This will force WordPress to change page template to it's parent template on post save.
Not tested but should work.
-
1If the code is working, please mark it as the accepted by clicking on the check box outline to the left of the answer. Sep 26, 2012 at 12:52
A little correction to the Max Yudin's solution:
add_action('save_post','changeTemplateOnSave');
function changeTemplateOnSave(){
global $post;
$curr_tmp = get_post_meta($post->ID, '_wp_page_template', true);
if($post->post_parent){
$parent_tmp = get_post_meta($post->post_parent, '_wp_page_template', true);
update_post_meta($post->ID,'_wp_page_template',$parent_tmp,$curr_tmp);
}
}
One further little correction if you care about php warnings in the background.
When creating a new post/page the folllow notice was being output
Notice: Trying to get property of non-object error
Fixed this by making sure $post exists or and is not empty.
add_action('save_post','changeTemplateOnSave');
if ( ! function_exists( 'changeTemplateOnSave' ) ) {
function changeTemplateOnSave() {
global $post;
if ($post) {
$curr_tmp = get_post_meta( $post->ID, '_wp_page_template', true );
if ( $post->post_parent ) {
$parent_tmp = get_post_meta( $post->post_parent, '_wp_page_template', true );
update_post_meta( $post->ID, '_wp_page_template', $parent_tmp, $curr_tmp );
}
}
}
}