From ee3b337d5e4643c1ce123053cbe5494ceb2e222d Mon Sep 17 00:00:00 2001 From: Ruben Ramirez Date: Fri, 4 Apr 2025 06:20:26 -0500 Subject: [PATCH] fix: Correct Linked Assessment metabox rendering and meta key --- src/Admin/JobMetaboxes.php | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/src/Admin/JobMetaboxes.php b/src/Admin/JobMetaboxes.php index bf64a9b..41a6ba6 100644 --- a/src/Admin/JobMetaboxes.php +++ b/src/Admin/JobMetaboxes.php @@ -175,8 +175,9 @@ class JobMetaboxes { * @param \WP_Post $post The post object. */ public function render_linked_assessment_metabox( $post ) { + // Use the correct meta key as defined in meta-fields.md + $linked_assessment_id = \get_post_meta( $post->ID, '_quiztech_associated_assessment_id', true ); \wp_nonce_field( 'quiztech_save_linked_assessment_meta', 'quiztech_linked_assessment_nonce' ); - $linked_assessment_id = \get_post_meta( $post->ID, '_quiztech_linked_assessment_id', true ); $assessments_query = new \WP_Query( [ 'post_type' => 'assessment', @@ -186,23 +187,25 @@ class JobMetaboxes { 'order' => 'ASC', ] ); - echo '<label for="quiztech_linked_assessment_field">'; + // Output raw HTML, not entities + echo '
'; if ( $assessments_query->have_posts() ) { - echo '<select name="quiztech_linked_assessment_field" id="quiztech_linked_assessment_field" class="widefat">'; - echo '<option value="">' . \esc_html__( '-- None --', 'quiztech' ) . '</option>'; + echo ''; \wp_reset_postdata(); } else { - echo '<p>' . \esc_html__( 'No assessments found. Please create an assessment first.', 'quiztech' ) . '</p>'; + echo '

' . \esc_html__( 'No assessments found. Please create an assessment first.', 'quiztech' ) . '

'; } } @@ -218,17 +221,18 @@ class JobMetaboxes { if ( ! \current_user_can( 'edit_post', $post_id ) ) { return; } // No need to check post type here, as the action is specific ('save_post_job') + // Use the correct meta key + $meta_key = '_quiztech_associated_assessment_id'; + // Field check and sanitize if ( isset( $_POST['quiztech_linked_assessment_field'] ) ) { $assessment_id = \sanitize_text_field( \wp_unslash( $_POST['quiztech_linked_assessment_field'] ) ); + // Ensure empty string is saved if '-- None --' is selected, otherwise sanitize as integer $assessment_id = '' === $assessment_id ? '' : \absint( $assessment_id ); - \update_post_meta( $post_id, '_quiztech_linked_assessment_id', $assessment_id ); + \update_post_meta( $post_id, $meta_key, $assessment_id ); } else { - // If the field isn't submitted (e.g., if the metabox wasn't rendered for some reason), - // we might want to delete the meta key to ensure no stale data persists. - // However, typically, if the field exists and is submitted empty, the above logic handles it (sets to ''). - // Let's delete it if it's not set in POST, assuming the metabox should always be present on save. - \delete_post_meta( $post_id, '_quiztech_linked_assessment_id' ); + // If the field isn't submitted, delete the meta key to ensure no stale data persists. + \delete_post_meta( $post_id, $meta_key ); } } } \ No newline at end of file