I Am trying to create a default custom field drop down with pre populated values from the DB to be shown while creating a new Post or editing a existing post.
I am aware about how to add a single custom field and have added few as follows
add_action('wp_insert_post', 'set_default_custom_fields');
function set_default_custom_fields($post_id) {
if ( $_GET['post_type'] != 'page' ) {
add_post_meta($post_id, 'email', 'xyz@mail.com', true);
}
}
This is working fine for me and i am able to see custom field with default value but i am not sure how to add a drop down in place of single text field, i tried something like this but seems like its not working.
add_action('wp_insert_post', 'set_default_custom_fields');
function set_default_custom_fields($post_id) {
if ( $_GET['post_type'] != 'page' ) {
<select name="voodoo_dropdown" id="voodoo_dropdown">
<option<?php selected( add_post_meta($post->ID, 'voodoo_dropdown', true), 'USA' ); ?>>USA</option>
<option<?php selected( add_post_meta($post->ID, 'voodoo_dropdown', true), 'Canada' ); ?>>Canada</option>
<option<?php selected( add_post_meta($post->ID, 'voodoo_dropdown', true), 'Mexico' ); ?>>Mexico</option>
</select>
}
return ;
}
Due to my lack of knowledge i am not sure where i am doing wrong or what needs to be done to accomplish this task
Instead of defining the default values for custom fields, you should do like Milo says.
You should have something like this in your functions.php.
I tried to follow what you need, but didn’t test it.
<?php
// action to add meta boxes
add_action( 'add_meta_boxes', 'voodoo_dropdown_metabox' );
// action on saving post
add_action( 'save_post', 'voodoo_dropdown_save' );
// function that creates the new metabox that will show on post
function voodoo_dropdown_metabox() {
add_meta_box(
'voodoo_dropdown', // unique id
__( 'Voodoo Dropdown', 'mytheme_textdomain' ), // metabox title
'voodoo_dropdown_display', // callback to show the dropdown
'post' // post type
);
}
// voodoo dropdown display
function voodoo_dropdown_display( $post ) {
// Use nonce for verification
wp_nonce_field( basename( __FILE__ ), 'voodoo_dropdown_nonce' );
// get current value
$dropdown_value = get_post_meta( get_the_ID(), 'voodoo_dropdown', true );
?>
<select name="voodoo_dropdown" id="voodoo_dropdown">
<option value="USA" <?php if($dropdown_value == 'USA') echo 'selected'; ?>>USA</option>
<option value="Canada" <?php if($dropdown_value == 'Canada') echo 'selected'; ?>>Canada</option>
<option value="Mexico" <?php if($dropdown_value == 'Mexico') echo 'selected'; ?>>MEXICO</option>
</select>
<?php
}
// dropdown saving
function voodoo_dropdown_save( $post_id ) {
// if doing autosave don't do nothing
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return;
// verify nonce
if ( !wp_verify_nonce( $_POST['voodoo_dropdown_nonce'], basename( __FILE__ ) ) )
return;
// Check permissions
if ( 'page' == $_POST['post_type'] )
{
if ( !current_user_can( 'edit_page', $post_id ) )
return;
}
else
{
if ( !current_user_can( 'edit_post', $post_id ) )
return;
}
// save the new value of the dropdown
$new_value = $_POST['voodoo_dropdown'];
update_post_meta( $post_id, 'voodoo_dropdown', $new_value );
}
?>
If you think this is too much complicated you can use a metaboxes plugin, find one in WordPress Plugin directory that has already dropdowns.