Make WordPress Core

Ticket #19572: patch.diff

File patch.diff, 919 bytes (added by alexkingorg, 15 years ago)

switch_to_post implementation

Line 
1<?php
2
3$WP_POST_STACK = array();
4
5function switch_to_post($post_id) {
6 global $WP_POST_STACK, $post;
7
8 // Initialize the stack with very first $post->ID
9 if ( !count( $WP_POST_STACK ) ) {
10 $WP_POST_STACK[] = $post->ID;
11 }
12
13 // Stick our new post_id onto the end
14 $WP_POST_STACK[] = $post_id;
15 $post = get_post( $post_id );
16 setup_postdata( $post );
17 do_action( 'switch_to_post', $post_id );
18
19 return true;
20}
21
22function restore_post() {
23 global $WP_POST_STACK, $post;
24
25 // If we don't have anything to knock off, just return
26 if ( count( $WP_POST_STACK ) ) {
27 // Remove the current post_id off the stack
28 $removed_post_id = array_pop( $WP_POST_STACK );
29
30 // Get last value of the array but leave it on the array
31 if ( $post_id = end( $WP_POST_STACK ) ) {
32 $post = get_post( $post_id );
33 setup_postdata( $post );
34 do_action( 'restore_post', $post_id, $removed_post_id );
35 return true;
36 }
37 }
38 return false;
39}