php - 仅检查 Woocommerce 中订单发布元数据中的特定信息
问题描述
我目前正在开发一个 WordPress 项目,该项目上有用于商店的 WooCommerce 插件。然而,来自订单的所有账单信息都进入 wp_postmeta 表,所有信息都保存在同一列“meta_value”中。
我有一个表格,客户可以使用他们的订单号、名字和邮政编号填写,填写此字段后,他们的订单将显示在网站上。
因此,在我的查询中,我只想检查用户输入的订单号、名字和邮政编号是否为真,并且我不需要列中的任何其他内容。
我已经使用我的凭据创建了一个测试订单,目前我的查询看起来像这样,但它找到了两个结果,因为 wp_postmeta 表中有两个字段与订单具有相同的订单号和相同的名字:
$ordernumber = $_POST['ordernmbr'];
$orderfirstname = $_POST['firstname'];
$orderpostnumber = $_POST['postnmbr'];
$sql = $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}postmeta
WHERE post_id = %d AND meta_value = %s",
$ordernumber, $orderfirstname);
$res = $wpdb->get_results($sql, ARRAY_A);
问我是否有不清楚的地方,我很不擅长解释事情!
编辑:在获得 Vel 的帮助后更新了查询,但仍然无法按预期工作,因为查询不想找到任何结果。
$sql = $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}postmeta
WHERE post_id = %d AND (meta_value = %s AND meta_key ='_billing_first_name' AND meta_value = %s AND meta_key ='_billing_postcode') ",
$ordernumber, $orderfirstname, $orderpostnumber );
$res = $wpdb->get_results($sql, ARRAY_A);
解决方案
以下 SQL 查询将检查给定订单 ID、名字和邮政编码是否存在条目:
$ordernumber = $_POST['ordernmbr'];
$orderfirstname = $_POST['firstname'];
$orderpostnumber = $_POST['postnmbr'];
$result = $wpdb->get_col( $wpdb->prepare( "
SELECT pm.post_id
FROM $wpdb->postmeta as pm
JOIN $wpdb->postmeta as pm1 ON pm.post_id = pm1.post_id
WHERE pm.post_id = %d
AND pm.meta_key ='_billing_first_name'
AND pm.meta_value = %s
AND pm1.meta_key ='_billing_postcode'
AND pm1.meta_value = %s
", $ordernumber, $orderfirstname, $orderpostnumber ) );
if( sizeof($result) )
$result = true;
测试和工作。
也可以通过get_post_meta()
这种方式使用 Wordpress 功能完成:
$firstname = get_post_meta( $_POST['ordernmbr'], '_billing_first_name', true );
$postnmbr = get_post_meta( $_POST['ordernmbr'], '_billing_postcode', true );
if( $firstname == $_POST['firstname'] && $postnmbr == $_POST['postnmbr'] ) {
// The data match
} elseif( $firstname == $_POST['firstname'] || $postnmbr == $_POST['postnmbr'] ) {
// The data match partially
else {
// The data don't match
}
推荐阅读
- unix - SSH连接后是否可以在本地主机上执行命令
- php - php curl如何使用代理
- python - 如何从 Python 脚本创建 exe?
- python - 如何编写一个在单元格中运行代码的 IPython 单元格魔术命令?
- video-streaming - 无需使用任何服务器 / webrtc / 节点或任何其他基于云的解决方案,将 RTSP 流从 ip 摄像头传输到网页
- calculated-columns - Google Data Studio 中的总和/详细程度
- mongodb - 聚合中的 $lookup 非常慢
- python - 无法从 pyside 应用程序中的 qtquick2plugin.dll 中提取插件元数据
- python - 逻辑回归中的概率校准错误:ValueError:无法将字符串转换为浮点数:'OLIFE'
- python - 在删除文本通道之前异步等待指定时间不和谐