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?
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?
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.
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
}
wp_posts
(it depends on WP config). You should escape $post->ID
in your query (you don't know what will be hidden in this value, and assuming it's always correct isn't very good idea).
Commented
Jun 28, 2013 at 12:22