0

I am trying to add a new field in the metabox there is demo url field which is working fine i have created new field that is not storing or saving any datas which inserted into the field.

Here is my coading.

// Adding meta box for freebie custom post type
function demo_url_meta_box() {

    add_meta_box(
        'demo_url_meta_box',
        __( 'Freebie Details', '' ),
        'demo_url_meta_box_callback',
        'freebie',
        'normal',
        'low'

    );
}

add_action( 'add_meta_boxes_freebie', 'demo_url_meta_box' );
// Callback function of metabox
function demo_url_meta_box_callback( $post ) {

    // Add a nonce field so we can check for it later.
    wp_nonce_field( 'demo_url_nonce', 'demo_url_nonce' );

    // postmeta key: _demo_url
    $demo_url = get_post_meta( $post->ID, '_demo_url', true );
    ?>
Enter freebie details such as URL of download and also demo URL
<table class="form-table">
    <tbody>
        <tr>
        <th><label for="freebie-demo">Enter demo URL</label></th>
        <td><input type="text" style="width:100%" id="freebie-demo" name="freebie-demo" value="<?php echo $demo_url; ?>"/></td>
        </tr>
        <tr>
        <th><label for="freebie-downurl">Enter Download URL</label></th>
        <td><input type="text" style="width:100%" id="freebie-downurl" name="freebie-downurl" /></td>
        </tr>
    </tbody>
</table>    

<?php
}
/**
 * When the post is saved, saves our custom data.
 *
 * @param int $post_id
 */
function save_demo_url_meta_box_data( $post_id ) {

    // Check if our nonce is set.
    if ( ! isset( $_POST['demo_url_nonce'] ) ) {
        return;
    }

    // Verify that the nonce is valid.
    if ( ! wp_verify_nonce( $_POST['demo_url_nonce'], 'demo_url_nonce' ) ) {
        return;
    }

    // If this is an autosave, our form has not been submitted, so we don't want to do anything.
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
        return;
    }

    // Check the user's permissions.
    if ( isset( $_POST['post_type'] ) && 'page' == $_POST['post_type'] ) {

        if ( ! current_user_can( 'edit_page', $post_id ) ) {
            return;
        }

    }
    else {

        if ( ! current_user_can( 'edit_post', $post_id ) ) {
            return;
        }
    }

    /* OK, it's safe for us to save the data now. */

    // Make sure that it is set.
    if ( ! isset( $_POST['freebie-demo'] ) ) {
        return;
    }

    // Sanitize user input.
    $de_url = sanitize_text_field( $_POST['freebie-demo'] );

    // Update the meta field in the database.
    update_post_meta( $post_id, '_demo_url', $de_url );


}
// add meta box data when save_post is hooked
add_action( 'save_post', 'save_demo_url_meta_box_data' );
0

You didn't retrieve your 2 values in the save_post action.

You need to get $_POST[’freebie-demo’] (it's ok for it) and $_POST['freebie-downurl']

If you want an array post meta value based, you can do something like that :

// Sanitize user input.
$de_url['name'] = sanitize_text_field( $_POST['freebie-demo'] );
$de_url['url'] = esc_url($_POST['freebie-downurl']);

// Update the meta field in the database.
update_post_meta( $post_id, '_demo_url', $de_url );

Hope it will help you !

1
  • It was not working .
    – James Paul
    May 11 '18 at 6:00

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.