1

I have created custom post type named as freebie in that i have created a custom meta section in that added a input field. Which is not storing the data which entered in that field also not displaying the values entered in that field. I have attached the coding.

function adding_freebie_metabox($post) {

    add_meta_box(
          'my-meta-box'
        , __('Freebie extra deatails', 'lwprjs')
        , 'render_my_freebie_metabox'
        , 'freebie'
        , 'normal'
        , 'default'
    );

}

add_action('add_meta_boxes_freebie', 'adding_freebie_metabox');

// Add field
function render_my_freebie_metabox($meta_id) {

    // make sure the form request comes from WordPress
    wp_nonce_field(basename(__FILE__), 'freebie_meta_box_nonce');

    ?>

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

    <?php
}

function food_save_meta_box_data($post_id) {

    // verify meta box nonce
    if (!isset($_POST['freebie_meta_box_nonce']) || !wp_verify_nonce($_POST['freebie_meta_box_nonce'], basename(__FILE__))) {
        return;
    }

    // return if autosave
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }

    // Check the user's permissions.
    if (!current_user_can('edit_post', $post_id)) {
        return;
    }

    // store custom fields values
    // cholesterol string
    if (isset($_REQUEST['freebie-demo'])) {
        update_post_meta($post_id, '_freebie_demo', sanitize_text_field($_POST['freebie-demo']));
    }
}

add_action('save_post_freebie', 'food_save_meta_box_data');
1

Based on your code, hope you have already register your CPT(custom post type) providing valid label & arguments with function:

register_post_type( 'freebie', $args );

Here is the complete code that, your custom meta box will be only visible to our "freebie" CPT with a input field to save demo url for this CPT posts. Add the below lines of code your functions.php

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

    add_meta_box(
        'demo_url_meta_box',
        __( 'Demo URL', '' ),
        'demo_url_meta_box_callback',
        'freebie',
        'side',
        '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 );


    echo '<textarea style="width:100%" id="freebie-demo" name="freebie-demo">' . esc_attr( $demo_url ) . '</textarea>';
}
/**
 * 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' );

Hope this will help you !!!

|improve this answer|||||
1

Maybe try to add a different template for showing that.

add_filter( 'template_include', 'include_template_function', 1 );

On top of the php

function include_template_function( $template_path ) {
    if ( get_post_type() == 'freebies-info' ) {
        if ( is_single() ) {
            // checks if the file exists in the theme first,
            // otherwise serve the file from the plugin
            if ( $theme_file = locate_template( array ( 'freebies-info.php' ) ) ) {
                $template_path = $theme_file;
            } else {
                $template_path = plugin_dir_path( __FILE__ ) . '/freebies_info.php';
            }
        }
    }
    return $template_path;
}

This part if ( get_post_type() == 'freebies-info' ) { should be your register_post_type instead of freebies-info This code for adding the php file, i used for example freebies-info.php. Then create a php file called that, in the same folder. This might look like this:

<?php
 /*Template Name: New Template
 */

get_header(); ?>
<div id="primary">
    <div id="content" role="main">
    <?php
    $mypost = array( 'post_type' => 'freebies-info', );
    $loop = new WP_Query( $mypost );
    ?>
    <?php while ( have_posts() ) : the_post();?>
        <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
            <header class="entry-header">
                <strong>Title: </strong><?php the_title(); ?><br />
            </header>
                <div class="">
                <?php the_content(); ?>
                </div>
        </article>
    <?php endwhile; ?>
    </div>
</div>
<?php wp_reset_query(); ?>
<?php get_footer(); ?>

Remember that i made this freebies-info for yo.

$mypost = array( 'post_type' => 'freebies-info', );

Here you should put whatever you have called your register_post_type that you can find where you created your costum post type.

Hope this helps you or that you get some more ideas how to fix it, Goodluck!

|improve this answer|||||

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.