Here is the code that creates my metabox on my CPT named clients it displays and seems to keep the value input upon clicking update.
I've tried outputting the data both within a loop and out the loop switching between get_the_ID() and $post_id
To output the meta box value in the loop I'm doing
// Get Meta data
$link = get_post_meta(get_the_ID(), 'link_url', true); ?>
<li><a href="<?php echo $link; ?>"><?php the_post_thumbnail('clients'); ?></a></li>
Meta box Code
/**
* Adds a box to the main column on the Post and Page edit screens.
*/
function portfolio_link_add_meta_box() {
$screens = array( 'clients' );
foreach ( $screens as $screen ) {
add_meta_box(
'portfolio_logo_link',
__( 'Logo Link', 'logo_link_textdomain' ),
'logo_link_meta_box_callback',
$screen
);
}
}
add_action( 'add_meta_boxes', 'portfolio_link_add_meta_box' );
function logo_link_meta_box_callback( $post ) {
// Add an nonce field so we can check for it later.
wp_nonce_field( 'logo_link_meta_box', 'logo_link_meta_box_nonce' );
/*
* Use get_post_meta() to retrieve an existing value
* from the database and use the value for the form.
*/
$value = get_post_meta( $post->ID, 'link_url', true );
echo '<label for="link">';
_e( 'Add The Logo Link', 'link_logo_textdomain' );
echo '</label> ';
echo '<input type="text" id="link" name="link" value="' . $value . '" size="25" />';
}
/**
* When the post is saved, saves our custom data.
*
* @param int $post_id The ID of the post being saved.
*/
function logo_link_save_meta_box_data( $post_id ) {
/*
* We need to verify this came from our screen and with proper authorization,
* because the save_post action can be triggered at other times.
*/
// Check if our nonce is set.
if ( ! isset( $_POST['logo_link_meta_box_nonce'] ) ) {
return;
}
// Verify that the nonce is valid.
if ( ! wp_verify_nonce( $_POST['logo_link_meta_box_nonce'], 'logo_link_meta_box' ) ) {
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['link'] ) ) {
return;
}
// Sanitize user input.
$my_data = sanitize_text_field( $_POST['link'] );
// Update the meta field in the database.
update_post_meta( $post_id, 'link_url', $my_data );
}
add_action( 'save_post', 'logo_link_save_meta_box_data' );