我正在用非常有限的时间处理一个不必要的复杂主题。由于我们拥有的记录数量太多,加载时间慢得令人无法忍受,因此我们希望使用json文件缓存记录(宁愿不使用瞬态,也不要完全使用数据库)。
主题使用WP\\u Query($args)从数据库中获取结果。我们希望只提取一次查询,并为后续请求使用json缓存文件。
问题是因为我们拥有的文件数量太多,我们必须修改并深入主题的内部工作以使用json文件。
因此,与此相反:
$my_query1 = new WP_Query($args);
$wp_query = null;
$wp_query = $my_query1;
这是:
if (!is_file($file)) {
$my_query1 = null;
$my_query1 = new WP_Query($args);
$wp_query = null;
$wp_query = $my_query1;
$contents = json_encode($wp_query);
$fp = fopen($cachepath.\'.json\', \'w\');
fwrite($fp, $contents);
fclose($fp);}
if (is_file($file)){
$str = file_get_contents($file);
$my_query1 = json_decode($str, true);
$wp_query = $my_query1;
}
以上内容可以创建Json文件,但由于有大量的钩子和操作,我们希望重用WordPress函数来循环处理这样的帖子。
<?php if( $my_query1->have_posts() ) :
while ($my_query1->have_posts()) : $my_query1->the_post(); ?>
是否有办法将json文件分配给WPQuery类,以便上述内容仍能按预期运行?
SO网友:Dario
找到了解决方案$wp\\u query返回一个对象数组。因此,在解码json时,将第二个参数设置为false,如下所示
json_decode($str, false);
然后将返回的值分配给对象varslike,如下所示:
if (is_file($file)){
$str = file_get_contents($file);
$my_query_raw = json_decode($str, false);
$my_query1 = null;
$wp_query = null;
$my_query1 = new WP_Query;
$posts_son = ($my_query_raw->posts);
$my_query1->query = $my_query_raw->query;
$my_query1->posts = $posts_son;
$my_query1->request = $my_query_raw->posts;
$my_query1->post_count = count($my_query_raw->posts);
$found_posts = $my_query_raw->found_posts;
$max_num_pages = $my_query_raw->max_num_pages;
if ( isset($found_posts)) $my_query1->found_posts = $my_query_raw->$found_posts;
if ( isset($max_num_pages)) $my_query1->max_num_pages = $my_query_raw->$max_num_pages;
//assign to $wp Query
$wp_query = $my_query1;
}