3

How to assign parent page template to its child pages dynamically?

3 Answers 3

2

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.

1
  • 1
    If the code is working, please mark it as the accepted by clicking on the check box outline to the left of the answer.
    – Max Yudin
    Sep 26, 2012 at 12:52
1

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);
    }
}
0

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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