In my custom plugin, I have a custom post type and have a custom meta box for it. I have few fields in it, one of it is a check box. I want this check box to be checked by default when I go for a add new post
and then proceed with the selection of the user ie checked/not checked.
I am adding the related codes ie: for the metabox and how I am saving it.
function coupon_add_metabox() {
add_meta_box( 'coupon_details', __( 'Coupon Details', 'domain' ), 'wpse_coupon_metabox', 'coupons', 'normal', 'high' );
}
function wpse_coupon_metabox( $post ) {
// Retrieve the value from the post_meta table
$coupon_status = get_post_meta( $post->ID, 'coupon_status', true );
// Checking for coupon active option.
if ( $coupon_status ) {
if ( checked( '1', $coupon_status, false ) )
$active = checked( '1', $coupon_status, false );
}
// Html for the coupon details
$html = '';
$html .= '<div class="coupon-status"><label for="coupon-status">';
$html .= __( 'Active', 'domain' );
$html .= '</label>';
$html .= '<input type="checkbox" id="coupon-status-field" name="coupon-status-field" value="1"' . $active . ' /></div>';
echo $html;
}
function wpse_coupons_save_details( $post_id ) {
// 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 $post_id;
// Check the user's permissions.
if ( ! current_user_can( 'activate_plugins' ) )
return $post_id;
$coupon_status = sanitize_text_field( $_POST['coupon-status-field'] );
// Update the meta field in the database.
update_post_meta( $post_id, 'coupon_status', $coupon_status );
}
add_action( 'save_post', 'wpse_coupons_save_details' );
save_post
being called multiple times is expected behavior, but because of how itâs used, you may not always want your code to execute until the user actually clicks on the save button. Like you have mentioned above regarding your requirement.So you can check the current page ( i.e
post-new.php
) in the wp-admin and can put conditions based upon that. Here is how you can implement.========== Or you can check this too ============
Itâs worth understanding Why It Happens & what’s goes on behind the scenes of save_post:
–
If the post is new the value of
get_post_meta( $post->ID, 'coupon_status' )
will benull
. Once saved, and the custom field is unchecked, it will be anempty
string (""
). So, you should just be able to add a check for anull
value: