Change template on the fly based on post parent selection

I want to change my page template automatically when someone selects a specific post parent.

I have the code to update the template but couldn’t find anything for detection of post parent attribute changes. Can you help?

Related posts

2 comments

  1. This is how you do it…

    function update_post_template($post_id, $post){
    
        //set $post_parent_id however you wish  
    
        if ($post->post_parent == $post_parent_id) {
    
            //unhook save_post action to avoid infinite loop
            remove_action('save_post', 'update_post_template'); 
    
            //change template
            update_post_meta( $post_id, '_wp_page_template', 'custom_template.php' );
    
            //re-hook save_post action
            add_action('save_post', 'update_post_template');
    
        }
    }
    
    add_action('save_post', 'update_post_template', 10, 2);
    

    Notes:

    To explain what is happening, first we hook onto the save_post action which is fired when inserting/updating a post. We then check for the existence of a certain post_parent id which is up to you to decide and determine which (you may want to extend this conditional statement to cover multiple cases). If we find a match, we unhook the save_post action to avoid creating an infinite loop when we call our update_post_meta function. Once the page template has been updated, we re-hook the save_post action and continue on our merry way.

  2. Using MySQL you can do;

    $result= $wpdb->get_row("select post_parent from wp_posts where ID=".$post->ID);
    
    if(intval($result)>0)
    {
         //your logic
    }
    else
    {
         //Do something else
    }
    

Comments are closed.