我正在开发一个至少有 10,000 种产品的 WooCommerce 设置。我需要为每个产品添加大约 20 项自定义元数据,包括几个单独的运费。我的商店有一些自定义运输方式,需要获取这些运输价格元值来计算运输成本。
起初,我将额外的字段添加为正常的帖子元值。但后来我考虑到有 10,000 个产品,我的元表很快就会变得很大,可能会影响性能。所以我创建了一个新的自定义帖子元表,每个产品一行,我的自定义元值有 20 列。wp_insert_post
我在、delete_post
、add_post_metadata
、update_post_metadata
、和上添加了过滤器和操作get_post_metadata
,以确保每个产品都获得自定义元记录,并且自定义元数据与默认元数据一起被读取和更新。delete_post_metadata
update_post_metadata_cache
这适用于大多数普通操作。但我发现我的运输方式不再获得运输价格元值。他们试图让他们使用该WC_Data::get_meta
方法。
public function calculate_shipping( $package = array() ) {
$cost = 0;
foreach ( $package['contents'] as $item_key => $item ) {
$product = $item['data'];
$cost += floatval( $product->get_meta( 'shipping_uk_1st' ) ); // <----- This bit here
}
$rate = array(
'id' => $this->id,
'label' => $this->title,
'cost' => $cost,
);
$this->add_rate( $rate );
}
当元数据存储为标准后元数据时,这工作得很好。但是现在这些值是空的。例如,
get_post_meta( 649, 'shipping_uk_1st', true );
// "3.95"
$product = new WC_Product( 649 );
$product->get_meta( 'shipping_uk_1st' );
// ""
我知道我可以通过做来完成这项工作get_post_meta
,但如果可能的话,我想以 WooCommerce 的方式获得元数据。显然,post 元数据和产品元数据之间存在一些额外的逻辑层,这意味着 Woo 方法无法看到自定义元数据。是否有一些过滤器可以用来以这种方式获取元值?