如何将帖子保存为瞬态?

How to save posts to transient?

我的代码:

if (!empty($packs = get_post_meta(get_the_ID(), 'pack', true))):
    if ( false === ( $q = get_transient( 'packs_list' ) ) ) {
        $params = array(
            'post_type' => 'product',
            'posts_per_page' => '7',

            'meta_query' => array(
                array(
                    'key' => 'package_pack',
                    'value' => $packs,
                    'compare' => 'IN'
                )
            )
        );

        $wp_query = new WP_Query($params);

        echo '<div class="products list_">';
            while ($wp_query->have_posts()) : $wp_query->the_post();
                $q = include(rh_locate_template('inc/parts/main.php'));
            endwhile;  

        echo '</div>';

        set_transient( 'packs_list', $q, 1 * HOUR_IN_SECONDS ); 
        wp_reset_postdata();    

    }
endif;

我正在尝试将整个生成的帖子列表保存为 html,但没有成功。如何将此循环的 html 输出保存为瞬态?

虽然我不确定您的 include 中包含什么,但您遇到的第一个问题是您无法将输出回显到您想要保存为瞬态的字符串。您必须将 $q 与所有包含的 HTML 输出连接成一个长字符串。

此外,您可能希望使用输出缓冲来获取包含的文件模板的内容。

if (!empty($packs = get_post_meta(get_the_ID(), 'pack', true))):
    if ( false === ( $q = get_transient( 'packs_list' ) ) ) {
        $params = array(
            'post_type' => 'product',
            'posts_per_page' => '7',

            'meta_query' => array(
                array(
                    'key' => 'package_pack',
                    'value' => $packs,
                    'compare' => 'IN'
                )
            )
        );

        $wp_query = new WP_Query($params);

        $q = '<div class="products list_">';
            while ($wp_query->have_posts()) : $wp_query->the_post();
                ob_start();
                include(rh_locate_template('inc/parts/main.php'));
                $q .= ob_get_clean();
            endwhile;  

        $q .= '</div>';

        set_transient( 'packs_list', $q, 1 * HOUR_IN_SECONDS ); 
        wp_reset_postdata();    

    }
endif;

如果这个过程中还需要输出$q到屏幕,可以直接

echo $q;

你需要的地方。