WooCommerce使用Select查询postmeta获取正确meta_value问题求助
问题根源
WordPress postmeta表支持同一post_id关联多条不同meta_key的元数据,你当前的SQL仅筛选了post_id条件,get_row方法默认返回匹配到的第一条记录,该条记录刚好是WooCommerce存储公开订单号的元数据,对应值就是wc_order_h8K0C1ODu2134,和你要的桌号元数据不是同一条。
解决方法
方案1:使用WooCommerce原生方法(更推荐)
不需要自己写SQL操作数据库,直接调用订单封装好的meta获取方法即可:
// 把括号里的table_number替换为你实际的桌号对应的meta_key $table_num = $order->get_meta('table_number', true); echo $table_num;
如果不知道桌号对应的meta_key名称,可以在数据库wp_postmeta表中查询post_id=274的所有记录,找到meta_value为Table No 10的条目,对应的meta_key字段值就是需要传入的参数。
方案2:修正SQL查询写法
如果需要自行写SQL实现,需要增加meta_key筛选条件,同时修正$wpdb->prepare的参数绑定用法,避免SQL注入风险:
global $wpdb; $order_id = $order->get_id(); // 同样替换table_number为实际的meta_key $table_num = $wpdb->get_var( $wpdb->prepare( "SELECT meta_value FROM $wpdb->postmeta WHERE post_id = %d AND meta_key = %s", $order_id, 'table_number' ) ); echo $table_num;
以上两种方式获取到的都是数据库中存储的最新值,管理员修改对应字段后,用户刷新感谢页即可同步展示更新后的内容。
内容的提问来源于stack exchange,提问作者user1781038
相关产品推荐
相关产品推荐

