0

我正在开发一个至少有 10,000 种产品的 WooCommerce 设置。我需要为每个产品添加大约 20 项自定义元数据,包括几个单独的运费。我的商店有一些自定义运输方式,需要获取这些运输价格元值来计算运输成本。

起初,我将额外的字段添加为正常的帖子元值。但后来我考虑到有 10,000 个产品,我的元表很快就会变得很大,可能会影响性能。所以我创建了一个新的自定义帖子元表,每个产品一行,我的自定义元值有 20 列。wp_insert_post我在、delete_postadd_post_metadataupdate_post_metadata、和上添加了过滤器和操作get_post_metadata,以确保每个产品都获得自定义元记录,并且自定义元数据与默认元数据一起被读取和更新。delete_post_metadataupdate_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 方法无法看到自定义元数据。是否有一些过滤器可以用来以这种方式获取元值?

4

0 回答 0