fix: Correct Linked Assessment metabox rendering and meta key
This commit is contained in:
parent
a626e008bb
commit
ee3b337d5e
1 changed files with 18 additions and 14 deletions
|
|
@ -175,8 +175,9 @@ class JobMetaboxes {
|
||||||
* @param \WP_Post $post The post object.
|
* @param \WP_Post $post The post object.
|
||||||
*/
|
*/
|
||||||
public function render_linked_assessment_metabox( $post ) {
|
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' );
|
\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( [
|
$assessments_query = new \WP_Query( [
|
||||||
'post_type' => 'assessment',
|
'post_type' => 'assessment',
|
||||||
|
|
@ -186,23 +187,25 @@ class JobMetaboxes {
|
||||||
'order' => 'ASC',
|
'order' => 'ASC',
|
||||||
] );
|
] );
|
||||||
|
|
||||||
echo '<label for="quiztech_linked_assessment_field">';
|
// Output raw HTML, not entities
|
||||||
|
echo '<label for="quiztech_linked_assessment_field">';
|
||||||
\esc_html_e( 'Select the assessment for this job:', 'quiztech' );
|
\esc_html_e( 'Select the assessment for this job:', 'quiztech' );
|
||||||
echo '</label><br />';
|
echo '</label><br />';
|
||||||
|
|
||||||
if ( $assessments_query->have_posts() ) {
|
if ( $assessments_query->have_posts() ) {
|
||||||
echo '<select name="quiztech_linked_assessment_field" id="quiztech_linked_assessment_field" class="widefat">';
|
echo '<select name="quiztech_linked_assessment_field" id="quiztech_linked_assessment_field" class="widefat">';
|
||||||
echo '<option value="">' . \esc_html__( '-- None --', 'quiztech' ) . '</option>';
|
echo '<option value="">' . \esc_html__( '-- None --', 'quiztech' ) . '</option>';
|
||||||
while ( $assessments_query->have_posts() ) {
|
while ( $assessments_query->have_posts() ) {
|
||||||
$assessments_query->the_post();
|
$assessments_query->the_post();
|
||||||
$assessment_id = \get_the_ID();
|
$assessment_id = \get_the_ID();
|
||||||
$assessment_title = \get_the_title();
|
$assessment_title = \get_the_title();
|
||||||
echo '<option value="' . \esc_attr( $assessment_id ) . '" ' . \selected( $linked_assessment_id, $assessment_id, false ) . '>' . \esc_html( $assessment_title ) . '</option>';
|
// Use selected() for cleaner attribute generation
|
||||||
|
echo '<option value="' . \esc_attr( $assessment_id ) . '" ' . \selected( $linked_assessment_id, $assessment_id, false ) . '>' . \esc_html( $assessment_title ) . '</option>';
|
||||||
}
|
}
|
||||||
echo '</select>';
|
echo '</select>';
|
||||||
\wp_reset_postdata();
|
\wp_reset_postdata();
|
||||||
} else {
|
} else {
|
||||||
echo '<p>' . \esc_html__( 'No assessments found. Please create an assessment first.', 'quiztech' ) . '</p>';
|
echo '<p>' . \esc_html__( 'No assessments found. Please create an assessment first.', 'quiztech' ) . '</p>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -218,17 +221,18 @@ class JobMetaboxes {
|
||||||
if ( ! \current_user_can( 'edit_post', $post_id ) ) { return; }
|
if ( ! \current_user_can( 'edit_post', $post_id ) ) { return; }
|
||||||
// No need to check post type here, as the action is specific ('save_post_job')
|
// 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
|
// Field check and sanitize
|
||||||
if ( isset( $_POST['quiztech_linked_assessment_field'] ) ) {
|
if ( isset( $_POST['quiztech_linked_assessment_field'] ) ) {
|
||||||
$assessment_id = \sanitize_text_field( \wp_unslash( $_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 );
|
$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 {
|
} else {
|
||||||
// If the field isn't submitted (e.g., if the metabox wasn't rendered for some reason),
|
// If the field isn't submitted, delete the meta key to ensure no stale data persists.
|
||||||
// we might want to delete the meta key to ensure no stale data persists.
|
\delete_post_meta( $post_id, $meta_key );
|
||||||
// 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' );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Add table
Reference in a new issue