I want to add a new checkbox field inside Publish block in add/edit post page. Does anyone have idea how to do that ?
4 Answers
I have finally found the solution. I hope it will be of good use for somebody.
add_action( 'post_submitbox_misc_actions', 'publish_in_frontpage' );
function publish_in_frontpage($post)
{
$value = get_post_meta($post->ID, '_publish_in_frontpage', true);
echo '<div class="misc-pub-section misc-pub-section-last">
<span id="timestamp">'
. '<label><input type="checkbox"' . (!empty($value) ? ' checked="checked" ' : null) . 'value="1" name="publish_in_frontpage" /> Publish to frontpage</label>'
.'</span></div>';
}
function save_postdata($postid)
{
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return false;
if ( !current_user_can( 'edit_page', $postid ) ) return false;
if(empty($postid) || $_POST['post_type'] != 'article' ) return false;
if($_POST['action'] == 'editpost'){
delete_post_meta($postid, 'publish_in_frontpage');
}
add_post_meta($postid, 'publish_in_frontpage', $_POST['publish_in_frontpage']);
}

- 912
- 1
- 12
- 28
-
Nice find. I had never thought of putting something in that box, but having the (somewhat undocumented) method of doing so is cool. Starred this for later use! – R2-Bacca Mar 29 '12 at 12:51
-
2Just a small update: `publish_in_frontpage()` seems to get no parameters, so I used `global $post;` inside, works just fine. – frnhr Jul 14 '12 at 15:01
-
This code is far from complete/correct and it's not working, I doubt it ever worked. I added my fixed/commented code below. – user2019515 Sep 08 '14 at 05:35
-
1Does it still work in the latest WP5 ? It looks like the do_action('post_submitbox_misc_actions') is never triggered on my app. – Tim Feb 24 '20 at 16:32
rbncha's code didn't work out of the box and needed a lot of tweaking, the code below is what I came up with. I've added some comments which explains everything thoroughly.
The following code adds a checkbox in the publish block of posts (you can easily change the post type), and stores/retrieves the value in/from the database. With some minor tweaking you could easily add a text field or anything you like.
It should be noted that you have to change my_
to a unique key for your theme or plugin!
add_action( 'post_submitbox_misc_actions', 'my_featured_post_field' );
function my_featured_post_field()
{
global $post;
/* check if this is a post, if not then we won't add the custom field */
/* change this post type to any type you want to add the custom field to */
if (get_post_type($post) != 'post') return false;
/* get the value corrent value of the custom field */
$value = get_post_meta($post->ID, 'my_featured_post_field', true);
?>
<div class="misc-pub-section">
<?php //if there is a value (1), check the checkbox ?>
<label><input type="checkbox"<?php echo (!empty($value) ? ' checked="checked"' : null) ?> value="1" name="my_featured_post_field" /> Featured on frontpage</label>
</div>
<?php
}
add_action( 'save_post', 'my_save_postdata');
function my_save_postdata($postid)
{
/* check if this is an autosave */
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return false;
/* check if the user can edit this page */
if ( !current_user_can( 'edit_page', $postid ) ) return false;
/* check if there's a post id and check if this is a post */
/* make sure this is the same post type as above */
if(empty($postid) || $_POST['post_type'] != 'post' ) return false;
/* if you are going to use text fields, then you should change the part below */
/* use add_post_meta, update_post_meta and delete_post_meta, to control the stored value */
/* check if the custom field is submitted (checkboxes that aren't marked, aren't submitted) */
if(isset($_POST['my_featured_post_field'])){
/* store the value in the database */
add_post_meta($postid, 'my_featured_post_field', 1, true );
}
else{
/* not marked? delete the value in the database */
delete_post_meta($postid, 'my_featured_post_field');
}
}
If you want to read more about custom fields see here: http://codex.wordpress.org/Custom_Fields

- 4,495
- 1
- 29
- 42
-
`check if the custom field is submitted` You can add hidden field before checkbox with same name and value = 0. – gaRex Nov 07 '14 at 04:42
-
-
no — many-many frameworks do that. So this could be named as existing practice. – gaRex Nov 09 '14 at 04:58
Well!, I could not find a solution to add a field in Publish Block. For the temporary solution, I have added new block by simply adding simple codes like below.
add_action( 'admin_init', 'category_metabox');
//add new publish to frontpage box
add_meta_box(
'publish_in_frontpage',
'Publish in Frontpage',
'publish_in_frontpage_callback',
'article',
'side',
'high'
);
function publish_in_frontpage_callback($post)
{
$value = get_post_meta($post->ID, '_publish_in_frontpage', true);
echo '<label><input type="checkbox"' . (!empty($value) ? ' checked="checked" ' : null) . 'value="1" name="publish_in_frontpage" /> Publish to frontpage</label>';
}
add_action( 'save_post', 'save_postdata');
function save_postdata($postid)
{
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return false;
if ( !current_user_can( 'edit_page', $postid ) ) return false;
if(empty($postid) || $_POST['post_type'] != 'article' ) return false;
if($_POST['action'] == 'editpost'){
delete_post_meta($postid, 'publish_in_frontpage');
}
add_post_meta($postid, 'publish_in_frontpage', $_POST['publish_in_frontpage']);
}

- 912
- 1
- 12
- 28
Use the Advanced Custom Fields plugin for wordpress.

- 3,145
- 2
- 25
- 37
-
1I don't find a way to add a checkbox inside **Publish** block in Advanced Custom Fields – rbncha Mar 29 '12 at 05:08