How would I go about requiring each post to have no more than one tag?
I would like to require the user to create a tag or choose one previous tag for each post. If you could give me any information, that would be very helpful.
Have fun.
This works for any post type (including customs) that supports the 'post_tag' taxonomy. 99.9% of the time, it will apply only to 'post' post type. But we make compatible stuff ;)
/*
Plugin Name: Single Postag
Description: Enforces use of single 'post_tag' taxonomy on select posts.
Author: EarnestoDev
Version: 1.0.0
Author URI: http://www.earnestodev.com/
*/
// Prepare to save new post_tag
function postag_wp_insert_post($post_ID, $post){
// Don't update if field value was not posted
if(!isset($_POST['single_postag'])) return;
// Fix WP slashing madness (I hate this joke)
$postag = stripslashes(trim($_POST['single_postag']));
$postag = $postag ? array(trim($postag)) : array();
// Set object terms, don't append
wp_set_object_terms($post_ID, $postag, 'post_tag', false);
}
add_action('wp_insert_post', 'postag_wp_insert_post', 10, 2); // 2 args required
// The metaxbox is here
function postag_meta_box($post, $box){
// Get the tags and only keep names to weld
$tags = wp_get_post_tags($post->ID);
// Loop through as references for quick value reassignment
foreach($tags as &$tag) $tag = $tag->name;
// If multiple tags are added outside this widget, they are combined on save.
echo '<p><input type="text" class="widefat" name="single_postag" value="',
esc_attr(implode(', ', $tags)), '" /></p>';
// Pimp description so your users can understand this
echo '<p class="description">', 'Enter a single Tag.', '</p>';
}
// And now hijack the metaxbox
function postag_add_meta_boxes($post_type, $post){
// Discard default 'post_tag' metabox (Important)
remove_meta_box('tagsdiv-post_tag', $post_type, 'side');
// Only add the new metabox if post_type supports 'post_tag' taxonomy
if(!is_object_in_taxonomy($post_type, 'post_tag')) return;
// Create a new 'tagsdiv-postag' metabox (you can't reuse the old MB name)
add_meta_box('tagsdiv-postag', __('Tag'), 'postag_meta_box',
$post_type, 'side', 'core');
}
add_action('add_meta_boxes', 'postag_add_meta_boxes', 10, 2); // 2 args required
Tested code. PHP 5.3+ Closures used. Convert code yourself to PHP 5.2 compatible variant if you need.
Regards.
I know this post is old, but here is a nice plugin that has a ton of different posting requirements options, including min/max number of tags and categories, min/max length of content and title, require featured image, max number of links in the post and more - WyPiekacz
I use this plugin on all of my multi-author sites.
Override the tag MetaBox and set only a text field that will be that single Tag. On updates, delete old tags and add new. If you still need help I could produce some code...