我可以在WP Super Cache缓存的WP页面中拥有动态内容吗?

时间:2015-07-31 13:46:18

标签: php wordpress caching

尝试实施此处讨论的技术,

http://z9.io/2013/10/21/shiny-new-dynamic-content-wp-super-cache/

进入使用Genesis框架的网站。我想知道是否有人让这项技术发挥作用,但如果有人使用Genesis使其工作,那就更感兴趣了。

以下是我感兴趣的人的代码:

首先,页面模板文件(test-age.php):

<?php

/*
 * Template Name: Test Template
 */

remove_action( 'genesis_loop', 'genesis_do_loop' );
remove_action( 'genesis_entry_content', 'genesis_do_post_content' );
add_action( 'genesis_loop', 'support_loop' );

// Content Area

define( 'DYNAMIC_OUTPUT_BUFFER_TAG', 'moonshine' ); // Change this to a secret placeholder tag

if ( DYNAMIC_OUTPUT_BUFFER_TAG != '' ) {
    function dynamic_output_buffer_test( &$cachedata = 0 ) {
        if ( defined( 'DYNAMIC_OB_TEXT' ) )
            return str_replace( DYNAMIC_OUTPUT_BUFFER_TAG, DYNAMIC_OB_TEXT, $cachedata );
        ob_start();
        // call the sidebar function, do something dynamic
        include( 'test-content.php' );
        $text = ob_get_contents();
        ob_end_clean();
        if ( $cachedata === 0 ) { // 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_replace( DYNAMIC_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' );
}

function support_loop() {
    echo "\n"; // make source views more pleasant for debugging
    ?>
    <div class="test-page">
        <?php
        if ( function_exists( 'dynamic_output_buffer_test' ) )
            dynamic_output_buffer_test();
        ?>moonshine<?php
    ?>
    </div>
    <?php
    echo "\n"; // make source views more pleasant for debugging
}

genesis();
?>

包含该文件的文件将产生动态内容(test-content.php):

<?php
echo "The test was successful!!!!";
?>

任何想法或见解都将不胜感激。

PS-我可以为整个页面关闭缓存,这很容易。但是,我希望有一些缓存页面,其中某些部分仍然是动态生成的。我也可以通过客户端的javascript来做到这一点,但这意味着重写我们编写的其他插件和小部件,此时不是一个选项。我还验证了所有WP超级缓存设置都适用于该技术(选择了php缓存,后期初始化为true,动态缓存为true)。

1 个答案:

答案 0 :(得分:0)

将此行移至wordpress的wp-config.php。

// Change this to a secret placeholder tag
define( 'DYNAMIC_OUTPUT_BUFFER_TAG', 'moonshine' );