元表中的行重复,WC中有已知的关系吗?

时间:2019-11-03 作者:Daniel W.

我正在从非常古老的wordpress/woocommerce迁移到现在的wordpress/woocommerce,在调查数据时,我发现一个产品有多行_stock 元键。其他也一样meta_keys

我在这里找到了一个老话题https://core.trac.wordpress.org/ticket/10905

哪些关系(表)使用元表中的多个元值?

如果删除除一个以外的所有值,哪些关系会中断?

我可以安全地强制使用唯一索引吗?

ALTER TABLE `wp_postmeta` ADD UNIQUE (
  `post_id` ,
  `meta_key` ,
  `meta_value`
);

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

你的提议会破坏WordPress的许多插件和内部结构。Post meta keys are not unique.

API级别也支持这一点:

// on save...
add_post_meta( $post_id, \'lead\', \'Tom\' );

add_post_meta( $post_id, \'member\', \'Bob\' );
add_post_meta( $post_id, \'member\', \'Janet\' );
add_post_meta( $post_id, \'member\', \'Alice\' );
add_post_meta( $post_id, \'member\', \'David\' );
add_post_meta( $post_id, \'member\', \'Siobhan\' );
add_post_meta( $post_id, \'member\', \'Mikoto\' );
add_post_meta( $post_id, \'member\', \'Hans\' );

// on the frontend...
$lead = get_post_meta( $post_id, \'lead\', true );
$members = get_post_meta( $post_id, \'member\' );

echo "<p>The leader is: ".$lead."</p>";
echo "<p>Members:</p><ul>";
foreach ( $members as $member ) {
    echo "<li>".$member."</li>";
}
echo "</ul>";
注意第三个参数get_post_meta, 如果true 它返回找到的第一个值,但false 它返回作为数组找到的所有值。

它对中继器领域非常有用。因此,可能有充分的理由为具有相同值的帖子存储多个帖子元键/值行。

至于为什么WooCommerce可能会存储多行相同的数据,您必须在WooCommerce论坛或支持渠道上询问,因为第三方插件不属于主题。在这里