Con este snippet podemos comprobar el valor de un custom field
y mostrar un error en base al mismo.
<?php add_action( 'pre_post_update', 'intercept_publishing', 10, 2 ); function intercept_publishing( $post_ID, $data ) { $post = get_post( $post_ID ); if ( ! is_admin() ) { return; } if ( 'post' !== get_post_type( $post_ID ) ) { return; } //$_REQUEST is for quick edit assuming that the post meta field was added to the quick edit view by you elsewhere if ( isset( $_POST['_adherence_status'] ) ) { $approval_status = $_POST['_approval_status']; } elseif ( isset( $_REQUEST['adherence_status'] ) ) { $approval_status = $_REQUEST['approval_status']; } if ( ! isset( $approval_status ) ) { return; } $post_status = isset( $data['post_status'] ) ? $data['post_status'] : get_post_status( $post_ID ); $edit_type = isset( $data['post_status'] ) ? 'regular' : 'quick'; $error_message = ''; if ( ( $post_status === 'publish' ) && ( $approval_status !== 'approved' ) ) { //different messages for regular edit vs quick edit if ( $edit_type === 'regular' ) { $error_message = 'Please check the "Approval Status" field before publishing. Posts should only be published if approved by the team editor.'; } else { $error_message = 'Please check the "Approval Status" and "Status" fields before clicking "Update". Posts should only be published if approved by the team editor. '; } wp_die( '<b>Publishing Error: </b> ' . $error_message, 'Adherence Publishing Error', [ 'back_link' => true ] ); } }