automator_before_recipe_log_deleted
Fires before a specific recipe run log is deleted. This hook allows extensions (like Pro) to perform cleanup before the log data is removed, such as cancelling scheduled actions in Action Scheduler. Fires before a recipe run log is deleted, allowing for pre-deletion cleanup tasks.
add_action( 'automator_before_recipe_log_deleted', $callback, 10, 3 );
Description
Fires before a specific recipe run log is deleted. Developers can use this hook for pre-deletion cleanup tasks, like canceling associated scheduled actions. It receives the recipe ID, log ID, and run number to target specific logs.
Usage
add_action( 'automator_before_recipe_log_deleted', 'your_function_name', 10, 3 );
Parameters
-
$recipe_id(int) - The recipe ID.
-
$recipe_log_id(int) - The recipe log ID being deleted.
-
$run_number(int) - The run number being deleted.
Examples
/**
* Unschedule any pending LinkedIn posts associated with the deleted recipe log.
*
* @param int $recipe_id The recipe ID.
* @param int $recipe_log_id The recipe log ID being deleted.
* @param int $run_number The run number being deleted.
*/
add_action( 'automator_before_recipe_log_deleted', function( $recipe_id, $recipe_log_id, $run_number ) {
// This is a hypothetical example. In a real scenario, you would interact
// with a WordPress transient or custom database table to find and remove
// scheduled posts related to this specific recipe log.
// Example: Check if there are any pending LinkedIn posts for this log.
$pending_linkedin_posts = get_transient( 'automator_pending_linkedin_posts_' . $recipe_log_id );
if ( $pending_linkedin_posts && is_array( $pending_linkedin_posts ) ) {
// Iterate through and remove them.
foreach ( $pending_linkedin_posts as $post_id ) {
// In a real scenario, you'd use wp_unschedule_event or a custom deletion method.
// For this example, we'll just simulate deletion.
error_log( "Simulating unscheduling LinkedIn post ID: " . $post_id . " for recipe log ID: " . $recipe_log_id );
}
// Clear the transient.
delete_transient( 'automator_pending_linkedin_posts_' . $recipe_log_id );
}
}, 10, 3 );
Placement
This code should be placed in the functions.php file of your active theme, a custom plugin, or using a code snippets plugin.
Source Code
src/core/admin/class-activity-log.php:101
public function remove_specific_run() {
if ( ! automator_filter_has_var( 'delete_specific_activity' ) ) {
return;
}
if ( ! current_user_can( automator_get_admin_capability() ) ) { // phpcs:ignore WordPress.WP.Capabilities.Undetermined
return;
}
if ( ! automator_filter_has_var( 'wpnonce' ) ) {
return;
}
if ( ! automator_filter_has_var( 'recipe_id' ) ) {
return;
}
if ( ! automator_filter_has_var( 'run_number' ) ) {
return;
}
if ( ! automator_filter_has_var( 'recipe_log_id' ) ) {
return;
}
if ( ! wp_verify_nonce( automator_filter_input( 'wpnonce' ), AUTOMATOR_FREE_ITEM_NAME ) ) {
return;
}
$recipe_id = (int) automator_filter_input( 'recipe_id' );
$recipe_log_id = (int) automator_filter_input( 'recipe_log_id' );
$run_number = (int) automator_filter_input( 'run_number' );
$page = (string) automator_filter_input( 'page' );
/**
* Fires before a specific recipe run log is deleted.
*
* This hook allows extensions (like Pro) to perform cleanup before the log data
* is removed, such as cancelling scheduled actions in Action Scheduler.
*
* @since 6.9
*
* @param int $recipe_id The recipe ID.
* @param int $recipe_log_id The recipe log ID being deleted.
* @param int $run_number The run number being deleted.
*/
do_action( 'automator_before_recipe_log_deleted', $recipe_id, $recipe_log_id, $run_number );
// Delete api logs
automator_purge_api_logs( $recipe_id, $recipe_log_id );
// Delete closure logs
automator_purge_closure_logs( $recipe_id, $recipe_log_id );
// Delete action logs
automator_purge_action_logs( $recipe_id, $recipe_log_id );
// Delete trigger logs
automator_purge_trigger_logs( $recipe_id, $recipe_log_id );
// Delete recipe logs
automator_purge_recipe_logs( $recipe_id, $recipe_log_id );
do_action( 'automator_recipe_log_deleted', $recipe_id, $recipe_log_id, $run_number );
$get_referer = wp_get_referer();
if ( preg_match( "/$page/", $get_referer ) ) {
wp_safe_redirect( sprintf( '%s&recipe_activity_run_success=1', $get_referer ) );
exit;
}
wp_safe_redirect( sprintf( '%s?post_type=%s&page=%s&recipe_activity_run_success=1', admin_url( 'edit.php' ), AUTOMATOR_POST_TYPE_RECIPE, $page ) );
exit;
}
Internal Usage
Found in src/integrations/linkedin/helpers/linkedin-scheduled-posts-manager.php:92:
add_action( 'automator_before_recipe_log_deleted', array( $this, 'unschedule_for_log' ), 10, 2 );
Found in uncanny-automator-pro/src/core/classes/async-actions.php:70:
add_action( 'automator_before_recipe_log_deleted', array( $this, 'cancel_scheduled_actions_for_log' ), 10, 2 );