当我将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?
最合适的回答,由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()
来自代码。否则,您每次都要删除它并重新生成它,您的代码甚至比以前效率更低!