Assign Json file to WP_Query

时间:2019-03-11 作者:Dario

我正在用非常有限的时间处理一个不必要的复杂主题。由于我们拥有的记录数量太多,加载时间慢得令人无法忍受,因此我们希望使用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类,以便上述内容仍能按预期运行?

1 个回复
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;
        }