I didn’t include that bit because it’s irrelevant, I’ve verified the post meta values were updating on save_post.
I’ve seen so many people ask this question and everyone misinterprets and provide unhelpful responses.
To restate – I need the meta box html to update after pressing Publish or Update.
That’s it!
And you would expect after it shows a spinning icon in the meta box header after publishing it would update the meta box’s content, and although it does call the add_meta_box $callback in an AJAX request, it does nothing with this data (for reasons I’m not familiar with.)
Anyway, I put together a client-side hack that works for me. I hope someone else finds this useful:
add_action('admin_init', function () {
if ( current_user_can("send_notifications") ) {
$post_types = ["post", "go_live"];
foreach ($post_types as $post_type) {
add_meta_box(
'cabtv_notif_on_post',
'Notifications',
function ($post) {
wp_nonce_field( 'cabtv_notif_metabox', 'cabtv_notif_metabox' );
$sent = (bool) get_post_meta( $post->ID, 'cabtv_notifications_sent', true );
$checked = cabtv_should_post_send_notification($post->ID);
?>
<div id="cabtv_notification_sent" style='margin-bottom:10px; <?php if (!$sent) echo 'display: none'; ?>'><span style='color:red; font-weight:bold;'>Notifications have been sent for this post.</span></div>
<label><input type="checkbox" id="cabtv_send_notification" name="cabtv_send_notification" value="1" <?php if ($checked) echo 'checked'; ?>></input> <?php echo esc_attr('Send notification on '.($post->post_status === 'publish' ? 'update' : 'publish') ); ?></label>
<script>
$(document).ready(()=>{
function update_meta_box() {
var cb = document.querySelector("#cabtv_send_notification");
if (cb.checked) document.querySelector("#cabtv_notification_sent").style.display = null;
cb.checked = false;
}
var dispatch = wp.data.dispatch( 'core/edit-post' );
var oldMetaBoxUpdatesSuccess = dispatch.metaBoxUpdatesSuccess;
dispatch.metaBoxUpdatesSuccess = function(...args) {
update_meta_box();
return oldMetaBoxUpdatesSuccess.apply(this, args);
}
});
</script>
<?php },
$post_type,
'side',
'high'
);
}
}
});
I also posted this on wordpress.stackexchange:
https://wordpress.stackexchange.com/questions/337223/add-meta-boxes-action-with-refresh-on-save/391627#391627
-
This reply was modified 3 years, 8 months ago by
hedgehog90.
-
This reply was modified 3 years, 8 months ago by
hedgehog90.