即使有更简单的方法,这仍然是一个有效的问题。
更简单的方法是get_user_meta($user_id,\'vatnumber\',true);
不$wpdb->get_user_meta($user_id, vatnumber,\'\');
顺便说一句
设置$single
标记为true是因为虽然您可以在一个键名中存储多个值,但通常最好避免这种情况,以避免混淆。
由于得到的是单个值,因此数据库查询的正确语法如下所示:
<?php
global $wpdb; $metakey = "vatnumber";
$dbquery = $wpdb->prepare("SELECT meta_value FROM ".$wpdb->prefix."usermeta WHERE user_id = %d AND meta_key = %s", $user_id, $metakey);
$vatnumber = $wpdb->get_var($dbquery);
?>
(您需要打电话
global $wpdb;
每个函数内仅一次。)或者,如果您想同时完成这一切:
<?php
global $wpdb;
$vatnumber = $wpdb->get_var($wpdb->prepare("SELECT meta_value FROM ".$wpdb->prefix."usermeta WHERE user_id = %d AND meta_key = %s", $user_id, "vatnumber") );
?>
注意$wpdb->前缀的使用,通常会输出
wp_
因为标准表名为
wp_usermeta
但是前缀是可以更改的,在插件中支持这一点是一种很好的做法(但在您自己的站点上进行自定义编码时可能不需要前缀
wp_
无论如何。)
还要注意$wpdb->prepare的操作,这些天往往需要它来避免MySQL注入尝试。%d替换为$user\\u id的数值。%s替换为$meta\\u key的字符串值。
如果确实要为存储了VAT编号的用户获取所有user\\u id和相应的meta\\u值,则可以使用get\\u results方法获取它们,例如:
<?php
global $wpdb; $metakey = "vatnumber";
$dbquery = $wpdb->prepare("SELECT user_id,meta_value FROM ".$wpdb->prefix."usermeta WHERE meta_key = %s", $metakey);
$vatdata = $wpdb->get_results($dbquery);
foreach ($vatdata as $data) {
echo "VAT for User ".$data->user_id.": ".$data->meta_value."<br>";
}
?>
更多示例:
https://codex.wordpress.org/Class_Reference/wpdb