你好!该网站有一个代码,用于从该用户的每个帖子的用户余额中删除单位(提取多少取决于帖子本身的速率):
foreach ($posts as $post) {
if (is_sticky($post->ID) == true)
{
$postAutorId = $post->post_author;
$postAutorId = $postAutorId[0]; //id автора поста
$rate = get_post_meta($post->ID, 'cp_sys_total_ad_cost');
$rate = intval($rate[0]); // ставка за данный пост
$balance = get_user_meta($postAutorId, 'balance');
$balance = intval($balance[0]); //баланс пользователя
if($balance == '')
{
$balance = 0;
}
if($balance >= $rate) //Если баланс больше или равно ставке, уменьшаем баланс на ставку
{
$balance = $balance - $rate;
$res = $wpdb->query(
" UPDATE `wp_usermeta` SET `meta_value` = '$balance' WHERE `meta_key`='billing_city' AND `wp_usermeta`.`user_id` = '$postAutorId';"
); //Перезаписываем баланс
echo '<pre>';
var_dump($balance);
echo '<pre>';
}
else
{
//закрываем пост
// $wpdb->query(
// "UPDATE `wp_posts` SET `post_status` = 'pending' WHERE `wp_posts`.`ID` = '$postAutorId';"
// );
}
}
}
问题是,如果一个作者有两个帖子,由于某种原因,只扣除最后一个帖子的余额(例如:余额是'100',第一个帖子是'50',第二个帖子是'45'。如结果,用户的余额将是“55”而不是“5”)
因为你不必把手伸进基地!
您通过 接收数据
get_user_meta()
,它将查询缓存到数据库,并“手动”访问数据库。然后再次访问get_user_meta()
,获取元字段的缓存值(初始,100)。等等。以正确的方式做事成为规则。如果你通过 写入数据库
update_user_meta()
,一切都会好起来的,因为这个函数会重置缓存。