wordpress似乎会缓存所有数据,包括当前页面中所有帖子的元数据_prime_post_caches
:
如图所示,它试图获取(76-100)内帖子id的信息。
在我的项目中,帖子的大部分数据都保存在另一个表中,而不是wp_posts
表或wp_posts_meta
我的自定义插件的表。因此,上面的查询将只缓存帖子的基本信息。
因此wordpress将尝试为页面中的每个帖子触发sql查询:
甚至我都用过wp_cache_add()
为了确保某个帖子的这种查询只会被查询一次,我认为如果我可以通过一个sql查询将它们全部选中,可能会更好。
然而,通过_prime_post_caches, 这个方法是私有的,我没有找到任何可以用来缓存它们的操作。
有什么想法吗?
Update1 :
我之所以使用单独的表来保存数据,是因为这些数据是由我无法控制的另一个系统生成的。虽然该系统没有视图模型,所以我在这里使用WordPress。我使用$wpdb
与数据库通信。实际上,有两个表由一个键连接,以获取单个记录的完整信息。
Update 2:
下面是我如何使用挂钩获取自己的数据:add_filter("the_title", function ($origin_content, $id) {
$info = my_get_info($id);
return $info["name"];
}, 10, 2);
add_filter("the_content", function ($origin_content) {
$info = my_get_info(get_the_ID());
return $info["summary"];
});
function movie4oy_get_info($post_id)
{
$guid = get_the_guid($post_id);
$result = wp_cache_get($guid, "_my_post_info");
if (!$result) {
$data = _my_get_info_db($guid);
if ($data) {
wp_cache_add($guid, $data, "_my_post_info");
$result = $data;
}
}
return $result;
}
function _my_get_info_db($guid)
{
global $SQL;
global $wpdb;
$row = $wpdb->get_row($wpdb->prepare($SQL,$guid), ARRAY_A);
$data = array(
......
);
return $data;
}