Does WordPress provide a way of rolling back when using, for example, update_post_meta
or wp_insert_post
?
E.g. I’m inserting a new post and giving it some post meta inside one function:
some_wp_transaction_init_function();
try{
$post_id = wp_insert_post($args, true);
update_post_meta($post_id, 'meta_key', 'meta_value');
}catch(Exception $e){
some_wp_rollback_function();
}
some_wp_commit_function();
Or do I have to use vanilla SQL, or the $wpdb
object?
Thanks
1
There is no functions in wordpress to handle transactions but you can easily use the $wpdb
object to make a simple query to achieve this. The following function will start a transaction and then insert a new user into the database and finally rollback the current transaction. In order to make the transaction permanent you would instead use $wpdb->query('COMMIT');
function test_transaction() {
global $wpdb;
// begin transaction
$wpdb->query('START TRANSACTION');
$user = array(
'user_pass' => 'sample_password',
'user_login' => 'sample_login',
'user_email' => '[email protected]',
'first_name' => 'sample_firstname',
'last_name' => 'sample_lastname',
);
$user_id = wp_insert_user($user);
// roll back everything - e.g remove the new user record from the database
$wpdb->query('ROLLBACK');
};