The pre_post_update WordPress PHP action fires immediately before an existing post is updated in the database.
Usage
add_action('pre_post_update', 'your_custom_function', 10, 2);
function your_custom_function($post_id, $data) {
// Your custom code here
}
Parameters
- $post_id (int): The ID of the post being updated.
- $data (array): An array of unslashed post data.
More information
See WordPress Developer Resources: pre_post_update
Examples
Logging post updates
Log post updates to a custom log file.
add_action('pre_post_update', 'log_post_update', 10, 2);
function log_post_update($post_id, $data) {
$log_message = 'Updating post ID: ' . $post_id . ' - ' . $data['post_title'];
error_log($log_message, 3, '/var/www/html/your-log-file.log');
}
Modifying post content before updating
Add a custom prefix to post titles before updating the post.
add_action('pre_post_update', 'modify_post_title', 10, 2);
function modify_post_title($post_id, $data) {
$data['post_title'] = 'Custom Prefix: ' . $data['post_title'];
// Update the post with the modified title
wp_update_post($data);
}
Prevent post updates for a specific user role
Disallow post updates for users with the ‘subscriber’ role.
add_action('pre_post_update', 'prevent_post_update_for_subscribers', 10, 2);
function prevent_post_update_for_subscribers($post_id, $data) {
$user = wp_get_current_user();
if (in_array('subscriber', $user->roles)) {
wp_die('Sorry, subscribers are not allowed to update posts.');
}
}
Send email notification on post update
Send an email notification to the admin when a post is updated.
add_action('pre_post_update', 'send_email_on_post_update', 10, 2);
function send_email_on_post_update($post_id, $data) {
$to = get_option('admin_email');
$subject = 'Post Updated: ' . $data['post_title'];
$message = 'The post with ID ' . $post_id . ' has been updated.';
wp_mail($to, $subject, $message);
}
Schedule a custom event on post update
Schedule a custom event to run after a post is updated.
add_action('pre_post_update', 'schedule_custom_event', 10, 2);
function schedule_custom_event($post_id, $data) {
if (!wp_next_scheduled('your_custom_event', array($post_id))) {
wp_schedule_single_event(time() + 3600, 'your_custom_event', array($post_id));
}
}
Remember to add the custom event action:
add_action('your_custom_event', 'your_custom_event_function', 10, 1);
function your_custom_event_function($post_id) {
// Your custom code here
}