Set Transient on CPT

时间:2015-04-03 作者:timmyg

当我将set\\u瞬态代码添加到我的cpt查询时,我得到Fatal error: Call to a member function have_posts() on string ... on line 30

第30行基本上是:if($graduate_student_query->have_posts()) : ?>

如果没有set\\u瞬态,查询工作正常,但显然不是最佳实践。set\\U瞬态应该去哪里?

<?php 
        if ( false === ( $graduate_student_query = get_transient( \'graduate_student_query\' ) ) ) {
            $graduate_student_query = new WP_Query(array(
                \'post_type\' => \'people\',
                \'role\' => \'leadership\',
                \'meta_key\' => \'ecpt_people_alpha\',
                \'orderby\' => \'meta_value\',
                \'order\' => \'ASC\',
                \'posts_per_page\' => \'-1\'));         
    set_transient( \'graduate_student_query\', $graduate_student_query, 2592000 );
} 
 if($graduate_student_query->have_posts()) : ?>
 {some HTML code}
  <?php while ($graduate_student_query->have_posts()) : $graduate_student_query->the_post(); ?>
是否需要在此循环之外,在模板文档的顶部建立set\\u transient?

1 个回复
最合适的回答,由SO网友:mrwweb 整理而成

现在提交一份完整的答案,我们已经找到了答案。

瞬态可能很难排除故障,因为如果最初将错误的值保存到数据库中,即使设置瞬态的代码现在是正确的,也可能看到一个旧的错误值。

修复此问题的两种方法是临时使用delete_transient() 或使用plugin like Transients Manager. 该插件的优点是可以向您显示瞬态值,这可以加快故障排除的速度。

在上面的示例中,最简单的方法就是这样开始代码段:

<?php
delete_transient(\'graduate_student_query\'); // this is the magic
if ( false === ( $graduate_student_query = get_transient( \'graduate_student_query\' ) ) ) {
    // etc...
这意味着旧值将被清除,完整代码将运行,瞬态将重新保存,您可以查看现在是否使用了正确的值。

然后be sure to remove delete_transient() 来自代码。否则,您每次都要删除它并重新生成它,您的代码甚至比以前效率更低!

结束

相关推荐

Iterate through ID's in loop

我已经基于category创建了一个自定义循环,现在我想运行一个函数,将当前帖子的特定ID作为参数进行迭代。我有。。$secondary_loop = new WP_Query(array( \'category_name\' => get_the_title(), \'posts_per_page\' => 5 )); while ( $secondary_loop->have_posts() ) : $secondary_loop->the_post();&#x