在Wordpress插件中使用add_action get_选项和update_选项的竞争条件

在Wordpress插件中使用add_action get_选项和update_选项的竞争条件,wordpress,race-condition,wordpress-plugin-creation,add-action,Wordpress,Race Condition,Wordpress Plugin Creation,Add Action,我正在编辑一个用于售票的wordpress插件。它通过选项跟踪票证的限制 如果您购买了票据并收到了付款,则会调用add_操作(processing_函数),processing_函数首先使用get_选项检索限额数据,将1添加到选项中所需的itemID,并使用update_选项对其进行更新。然而,问题是,如果两个人同时买票,有时限制只会更新为+1 我认为这是因为它们同时检索get_选项,然后我们有一个竞争条件,因为它们都向旧值加+1 你如何在Wordpress中处理这个问题?使用选项是正确的方法还

我正在编辑一个用于售票的wordpress插件。它通过选项跟踪票证的限制

如果您购买了票据并收到了付款,则会调用add_操作(processing_函数),processing_函数首先使用get_选项检索限额数据,将1添加到选项中所需的itemID,并使用update_选项对其进行更新。然而,问题是,如果两个人同时买票,有时限制只会更新为+1

我认为这是因为它们同时检索get_选项,然后我们有一个竞争条件,因为它们都向旧值加+1

你如何在Wordpress中处理这个问题?使用选项是正确的方法还是有其他更好的方法不能实现这一点

在这里,您可以看到代码的简化版本(除了检索POST数据之外,所有必要的东西都在那里)


<?php

function data_processing() {

  if ( (!$paid_not_necessary)) {
    return;
}

$current_item_limits = //POST DATA WITH THE AMOUNT THE CUSTOMER BOUGHT

if (get_option('item_limits')) {

    $item_limits = unserialize(get_option('item_limits'));

    foreach ($current_item_limits as $key => $value) {
        $item_limits[$key] = isset($item_limits[$key]) ? $item_limits[$key] + $value['quantity'] : $value['quantity'];
    }

    update_option('item_limits', serialize($item_limits));
}
else {

    foreach ($current_item_limits as $key => $value) {
        $current_item_limits[$key] = $value['quantity'];
    }

    update_option('item_limits', serialize($current_item_limits));

}


}

add_action('cust_after_submit', 'data_processing', 10, 0);