3

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

  • There's no built-in function - you'll have to use $wpdb->query( "START TRANSACTION" ) etc. – TheDeadMedic Nov 23 '16 at 11:30
  • 1
    Ok, thanks. Imma look into the possibility of writing some code/a plugin that could make transactions work with the other WP functions. Maybe I'll be able to halt the execution of SQL queries inside those functions, until a 'commit' function is called. It'll be called 'Y U NO DO TRANSACTIONS, WordPress.... (with update_post_meta)'. – Dan. Nov 25 '16 at 14:40
6

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' => 'sample@example.com',
    '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');
};

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.