/var/www/hkosl.com/aga/wp-content/plugins/wp-super-cache/plugins/dynamic-cache-test.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
<?php

/*
 * On the Advanced Settings page enable "Enable dynamic caching" and clear
 * the cache.
 *
 * Plugin authors: NEVER define the template tag for your users. Make them
 * choose one so it will be unique to their site.
 *
 * There are two examples in this file. Both use template tags that must be
 * kept secret.
 *
 * GLOSSARY:
 *
 * Dynamic content: the text or widget you want to show visitors to your site
 * that changes every time it's viewed.
 * Placeholder/template tag: the string of random characters placed in your
 * theme file or printed in an action where the dynamic content will go.
 * Output buffer (ob): any text that is printed by PHP to be sent to the browser
 * but captured by PHP for further manipulation.
 * OB Callback function: A function that is called when the output buffer is
 * filled with a html page. The contents of the page are passed to the function
 * for processing.
 *
 * **** MAKE SURE YOU KEEP THE TEMPLATE TAG SECRET ****
 * You should probably add 'deny from all' to the .htaccess in the cache directory
 * so visitors can't directly load any cached html files and discover the secret
 * tag. Or you can move the cache directory out of the web path and set the
 * cache location to that new directory on the advanced settings page.
 *
 */

/*
 * EXAMPLE 1
 * http://ocaoimh.ie/2013/10/21/shiny-new-dynamic-content-wp-super-cache/
 * Replace a string in your theme with the dynamic content.
 *
 * dynamic_cache_test_init()
 * This function is the first one to be called. This function hooks
 * dynamic_cache_test_template() to the WordPress action, wp_footer.
 * This script is loaded before WordPress is and the add_action()
 * function isn't defined at this time.
 * This init function hooks onto the cache action "add_cacheaction"
 * that fires after WordPress (and add_action) is loaded.
 *
 *
 * dynamic_cache_test_template_tag()
 * This function hooks on to wp_footer and displays the secret template
 * tag that will be replaced by our dynamic content on each page view.
 *
 *
 * dynamic_cache_test_filter()
 * This function hooks on to the filter through which all the cached data
 * sent to visitors is sent.
 * In this simple example the template tag is replaced by a html comment
 * containing the text "Hello world at " and the current server time.
 * If you want to use the output of a WordPress plugin or command you
 * must enable "late init" on the settings page. Each time you reload
 * the cached page this time will change. View the page source to examine
 * this text.
 *
 * Chronology of a request:
 * 1. dynamic_cache_test_init() hooks dynamic_cache_test_template_tag() on
 *    to the wp_footer action. dynamic_cache_test_filter() is hooked on to
 *    the wpsc_cachedata filter.
 * 2. An output buffer is created by WP Super Cache.
 * 3. Most of the page is generated by WordPress.
 * 4. The wp_footer action fires and the TAG is printed to the page.
 * 5. Processing continues and the page is created.
 * 6. The output buffer finishes. A WP Super Cache callback function runs
 *    and saves the output buffer to a cache file. The wpsc_cachedata
 *    filter is called.
 * 7. The function dynamic_cache_test_filter() runs and replaces the TAG in
 *    the buffer with the "Hello world" string.
 * 8. The output buffer is pushed to the browser to be displayed.
 */
define'DYNAMIC_CACHE_TEST_TAG''' ); // Change this to a secret placeholder tag.
if ( '' !== DYNAMIC_CACHE_TEST_TAG ) {
    function 
dynamic_cache_test_safety$safety ) {
        return 
1;
    }
    
add_cacheaction'wpsc_cachedata_safety''dynamic_cache_test_safety' );

    function 
dynamic_cache_test_filter$cachedata ) {
        return 
str_replaceDYNAMIC_CACHE_TEST_TAG'<!-- Hello world at ' date'H:i:s' ) . ' -->'$cachedata );
    }
    
add_cacheaction'wpsc_cachedata''dynamic_cache_test_filter' );

    function 
dynamic_cache_test_template_tag() {
        echo 
DYNAMIC_CACHE_TEST_TAG// This is the template tag.
    
}

    function 
dynamic_cache_test_init() {
        
add_action'wp_footer''dynamic_cache_test_template_tag' );
    }
    
add_cacheaction'add_cacheaction''dynamic_cache_test_init' );
}

/*
 * EXAMPLE 2
 *
 * This is going to be complicated. Hang on!
 *
 * When the cache file for a new page is generated the plugin uses an output
 * buffer to capture the page. A callback function processes the buffer and
 * writes to the cache file. The placeholder tag for any dynamic content has
 * to be written to that cache file but also, it has to be replaced with
 * dynamic content before the page is shown to the user.
 * More on output buffers here: http://php.net/ob_start
 *
 * Unfortunately an extra output buffer is often required when capturing dynamic
 * content such as sidebar widgets. Due to a quirk of the way PHP works it's
 * not possible to have an output buffer run in an output buffer callback. That
 * dynamic content has to be generated before the callback function is reached.
 * The following error occurs when an output buffer is created in the
 * callback function of another output buffer:
 * "PHP Fatal error:  ob_start(): Cannot use output buffering in output buffering display handlers in..."
 *
 * In this example the function add_action() isn't available when this file is
 * loaded so dynamic_output_buffer_init() is hooked on to the "add_cacheaction"
 * cacheaction. That function then hooks dynamic_output_buffer_test() on to the
 * familiar wp_footer action.
 *
 * The first time dynamic_output_buffer_test() runs it generates the dynamic
 * content and captures it with ob_start() in the DYNAMIC_OB_TEXT constant.
 *
 * When the main WP Super Cache output buffer is ready the callback is called.
 * This fires the wpsc_cachedata_safety filter. If the DYNAMIC_OB_TEXT constant
 * is set, which means dynamic content is ready, then it returns 1, a signal
 * that everything is ok.
 * Finally, the wpsc_cachedata filter is run. The function
 * dynamic_output_buffer_test() is hooked on to it. Since DYNAMIC_OB_TEXT is
 * set it replaces the placeholder text with that constant.
 * The resulting html is then sent to the browser.
 *
 * Already cached pages call the safety filter, and then the wpsc_cachedata
 * filter so any hooked function must be ready to generate dynamic content. The
 * very last line of dynamic_output_buffer_test() replaces the placeholder tag
 * with the dynamic content in the cache file.
 *
 * Use an output buffer to capture dynamic content while the page is generated
 * and insert into the right place:
 * Remember to add the DYNAMIC_OUTPUT_BUFFER_TAG text (as defined below) to
 * your theme where the dynamic content should be.
 *
 * dynamic_output_buffer_test() is a function that uses the wpsc_cachedata
 * filter to add a small message and the current server time to every web
 * page. The time increments on every reload.
 *
 */

define'DYNAMIC_OUTPUT_BUFFER_TAG''' ); // Change this to a secret placeholder tag.

if ( '' !== DYNAMIC_OUTPUT_BUFFER_TAG ) {
    function 
dynamic_output_buffer_test$cachedata ) {
        if ( 
defined'DYNAMIC_OB_TEXT' ) ) {
            return 
str_replaceDYNAMIC_OUTPUT_BUFFER_TAGDYNAMIC_OB_TEXT$cachedata );
        }

        
ob_start();
        
// call the sidebar function, do something dynamic
        
echo '<p>This is a test. The current time on the server is: ' date'H:i:s' ) . '</p>';
        
$text ob_get_contents();
        
ob_end_clean();

        if ( 
=== $cachedata ) { // called directly from the theme so store the output.
            
define'DYNAMIC_OB_TEXT'$text );
        } else { 
// called via the wpsc_cachedata filter. We only get here in cached pages in wp-cache-phase1.php.
            
return str_replaceDYNAMIC_OUTPUT_BUFFER_TAG$text$cachedata );
        }

    }
    
add_cacheaction'wpsc_cachedata''dynamic_output_buffer_test' );

    function 
dynamic_output_buffer_init() {
        
add_action'wp_footer''dynamic_output_buffer_test' );
    }
    
add_cacheaction'add_cacheaction''dynamic_output_buffer_init' );

    function 
dynamic_output_buffer_test_safety$safety ) {
        if ( 
defined'DYNAMIC_OB_TEXT' ) ) {// this is set when you call dynamic_output_buffer_test() from the theme.
            
return 1// ready to replace tag with dynamic content.
        
} else {
            return 
0// tag cannot be replaced.
        
}
    }
    
add_cacheaction'wpsc_cachedata_safety''dynamic_output_buffer_test_safety' );
}