phpwordpressmeta-boxespost-meta

WP Metabox not saving post meta


i am trying to implement a simple checkbox on the page, in order to dynamically add a Html chunk in case the user choses it, but i am unable to save the post_meta to perform this task, can someone help me? The value taken from this checkbox input is not been save on the post meta information.

This is what i got so far on my functions.php

function wporg_add_custom_box(){
    $screens = ['page', 'wporg_cpt'];
    foreach ($screens as $screen) {
        add_meta_box(
            'wporg_box_id',           // Unique ID
            'Entra in Flee Block',  // Box title
            'wporg_custom_box_html',  // Content callback, must be of type callable
            $screen,                   // Post type
            'side'
        );
    }
}
add_action('add_meta_boxes', 'wporg_add_custom_box');


function wporg_custom_box_html($post){
    $value = get_post_meta($post->ID, '_wporg_meta_key', true);
    ?>
    <label for="wporg_field">Add "Entra in Flee" block to page</label>
    </br>
    <input type="checkbox" name="wporg_field" id="wporg_field" class="postbox">
    <?php
}


function wporg_save_postdata($post_id){
    if (array_key_exists('wporg_field', $_POST)) {
        update_post_meta(
            $post_id,
            '_wporg_meta_key',
            $_POST['wporg_field']
        );
    }
}
add_action('save_post', 'wporg_save_postdata');

Solution

  • You don't use the $value on wp_cusotm_box_html function. I think it should be somthing like this:

    function wporg_add_custom_box()
    {
        $screens = ['page', 'wporg_cpt'];
        foreach ($screens as $screen) {
            add_meta_box(
                'wporg_box_id',           // Unique ID
                'Entra in Flee Block',  // Box title
                'wporg_custom_box_html',  // Content callback, must be of type callable
                $screen,                   // Post type
                'side'
            );
        }
    }
    
    add_action('add_meta_boxes', 'wporg_add_custom_box');
    function wporg_custom_box_html($post)
    {
        $value = get_post_meta($post->ID, '_wporg_meta_key', true) ? 'checked' : '';
        ?>
        <label for="wporg_field">Add "Entra in Flee" block to page</label>
        </br>
        <input type="checkbox" name="wporg_field" id="wporg_field" class="postbox" <?php echo $value; ?>>
        <?php
    }
    
    function wporg_save_postdata($post_id)
    {
        if (array_key_exists('wporg_field', $_POST)) {
            update_post_meta(
                $post_id,
                '_wporg_meta_key',
                $_POST['wporg_field']
            );
        } else {
            delete_post_meta(
                $post_id,
                '_wporg_meta_key'
            );
        }
    }
    
    add_action('save_post', 'wporg_save_postdata');