Dynamically assign same page template to child page as parent

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

Related posts

Leave a Reply

3 comments

  1. 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.

  2. 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);
        }
    }
    
  3. 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 );
                }
            }
        }
    }