If you're having an issue where the publish_post hook is being triggered twice you can try using a global variable to keep track of whether the hook has already been triggered.
// Declare a global variable
global $publish_post_hook_triggered;
$publish_post_hook_triggered = false;
add_action('publish_post', 'my_publish_post_function');
function my_publish_post_function($post_id) {
// Check if the hook has already been triggered
global $publish_post_hook_triggered;
if ($publish_post_hook_triggered) {
return;
}
// Set the global variable to indicate that the hook has been triggered
$publish_post_hook_triggered = true;
// Your code to run when the hook is triggered
}