提取订单 meta数据时,它是提取数据库查询中的所有订单元数据还是仅提取请求的订单元数据

weylhg0b  于 2022-10-30  发布在  PHP
关注(0)|答案(1)|浏览(140)

我有超过25 meta在WooCommerce订单。有时我只需要1元值,有时,我需要10个或更多。
我把 meta的顺序拉如下。
get_post_meta( int $post_id, string $key = '', bool $single = false )
当我需要1个 meta值时,我只做一次。当我需要10个元值时,我把每一个元值的名字按上面的语句拉10次。
我的问题是,当我运行get_post_ meta一次,wordpress对服务器进行一次数据库查询?当我在不同的自定义管理页面上拉其他10个元数据时,它对服务器进行10次数据库查询?
或者在单个get_post_meta上,WordPress会提取与该帖子相关的所有元数据并放入缓存,然后在其他地方,当我为同一订单提取其他10个元数据时,它会从缓存中使用,而不是额外的数据库查询。
我问的原因是,我可以将所有 meta存储在一个键中,也可以使用json_encode保存。但不确定是单独存储还是组合存储是最佳的。当我需要1个元数据时,我仍然需要拉取它,并使用json_decode,这将使用计算能力以及数据库查询到服务器。
我希望问题是清楚的,让我知道如果任何澄清需要。谢谢阅读。

6jjcrrmo

6jjcrrmo1#

函数get_post_meta在WP内核中定义/wp-includes/post.php从该高速缓存中访问post meta数据。如果它不在缓存中,它将从表中读取并设置到缓存中。因此,下一次,它将从缓存中阅读。您可以看到下面的主要部分。

$meta_cache = wp_cache_get( $object_id, $meta_type . '_meta' );

if ( ! $meta_cache ) {
    $meta_cache = update_meta_cache( $meta_type, array( $object_id ) );
    if ( isset( $meta_cache[ $object_id ] ) ) {
        $meta_cache = $meta_cache[ $object_id ];
    } else {
        $meta_cache = null;
    }
}

您可以在文件wp-includes/meta.php中看到第577行附近的代码

相关问题