Skip to content

WordPress plugin to set a minimum needed tags/cats/etc. Or limit the amount of tags/cats or custom tax terms. On a per post type basis. Avoid authors using all your tags because of SEO. Or force a minimum because they don't care tagging posts. Just like seen on StackOverflow and other StackExchange sites: minimum 1 tag, maximum 5.

Notifications You must be signed in to change notification settings

wecodemore/wcm-termlimit

Repository files navigation

WordPress Term Limits

Limits terms (categories, post tags, custom taxonomy terms) on a per post type basis

Do you have lazy authors who don't care using a single tag? Do you have wannabe SEO experts using all of your tags on each post?

Set an end to that. Just like seen on StackOverflow and other StackExchange sites: minimum 1 tag, maximum 5.

(Yes you can define the amount yourself)

Needs PHP 5.4+ to run. Will break with lower PHP versions.

Is this a plugin?

Yes. For WordPress.

How to install?

You can simply download it and are ready to go. Still the following options are preferred.

Or just install/import it into your project using Composer

composer create-project wcm/termlimits

Or clone the repository into your plugin directory using git

git clone [email protected]:wecodemore/wcm-termlimit.git

How to use?

Per default, there is a minimum of 0 terms that need to get added. The maximum is 3. And the limit only applies for the post post type.

To alter the limit or the type, there are two filters that you can use in a small child plugin:

<?php
/** Plugin Name: Term Limit config */

// Apply a minimum of 3 and a limit of 6 terms
add_filter( 'wcm-term.limit', function( Array $limit )
{
    return range( 3, 6 );
} );

// Apply the limit to the following post types
add_filter( 'wcm-term.types', function( Array $types )
{
    return [ 'post', 'my-custom-post-type', ];
} );

In case you want to extend your limit to custom taxonomies, you will also have to write a quick extension/class to account for that:

class MyCustomTaxonomy extends AbstractTaxon implements TaxonInterface
{
	public function __construct()
	{
		$this->append( explode( ",", filter_var(
			$_POST['tax_input']['custom_terms'],
			FILTER_SANITIZE_STRING,
			[ FILTER_NULL_ON_FAILURE, ]
		) ) );
	}
}

To see what exactly you should take as input/$_POST value, use the following mini-plugin to dump your save_post action.

<?php
/** Plugin Name: (Debug) Dump $_POST during save_post */
add_action( 'save_post', function()
{
	exit( var_dump( $_POST ) );
} );

Important: Make sure that you have at least FTP access and can actually edit or remove the plugin. Else you will get stuck there. This will break (exit) your request and present you with a dump of the post.

The @TODO List

Custom taxonomy terms.

Also, there's by now nothing built in to do something in case the limit was exceeded or the needed threshold not reached (min/max taxons). The plugin lets everything go through and just informs the user. One idea so far: extend the notification. The problem with this is that I have no idea what should happen in that case. Should we nuke all added terms? What if 20 are allowed and the user added 21? Should we just cut off one? If yes: Which one? Etc. As you can see, there're a lot of possible UX mine traps and I have by now no idea how to solve them. To be honest: This was just a very quick side project as it is something that is often requested. If you have any idea how to go on this, feel free to open a pull request to discuss your ideas. Thanks in advance.

License

WCM TermLimits is licensed under the MIT. Do whatever you want and feel comfortable with it. Still a tweet or similar and a star here on GitHub won't hurt, right?

About

WordPress plugin to set a minimum needed tags/cats/etc. Or limit the amount of tags/cats or custom tax terms. On a per post type basis. Avoid authors using all your tags because of SEO. Or force a minimum because they don't care tagging posts. Just like seen on StackOverflow and other StackExchange sites: minimum 1 tag, maximum 5.

Resources

Stars

Watchers

Forks

Packages

No packages published