As of version 2.1, USP Pro makes it easy to filter and customize submitted post content. This tutorial explains how to make it happen using the usp_post_array
filter hook.
The heart of front-end submission in WordPress is wp_insert_post(), which accepts an array of arguments that define the post. In USP Pro, the accepted array is named $usp_post
and looks like this:
$usp_post = array(
'post_author' => $user_id,
'post_content' => $post_content,
'post_type' => $post_type,
'tags_input' => $post_tags,
'post_title' => $post_title,
'post_status' => $args['post_status'],
'post_password' => $args['password'],
'post_date' => $date['post_date'],
'post_date_gmt' => $date['post_date_gmt'],
);
Once this array is assembled, it’s passed to wp_insert_post()
to create the post. Before it gets there, however, it’s hooked into the usp_post_array
filter, like so:
$usp_post = apply_filters('usp_post_array', $usp_post);
This enables us to customize any aspect of the $usp_post
array, so we can modify any of the data as desired. For example, we could do things like prepend text to the title, insert markup into the content, and modify tags.
Specific Example
Let’s look at a specific example of how we can use the usp_post_array
filter to prepend some text to the submitted post_title
. Consider the following code:
function usp_pro_modify_post_title($usp_post) {
// do anything..
return $usp_post;
}
add_filter('usp_post_array', 'usp_pro_modify_post_title');
Here we have a function named usp_pro_modify_post_title
that is hooked into the usp_post_array
via WP’s add_filter()
. As written, the function accepts the $usp_post
variable and then returns it to USP Pro, where it will be immediately used to create the post. In case you are wondering, this code could be included in a theme’s functions.php
file, or even better, made into a plugin.
So now that we have access to the post array, let’s modify it by prepending a string of text to the title.
function usp_pro_modify_post_title($usp_post) {
if (isset($usp_post['post_title'])) {
$usp_post['post_title'] = 'Added text - '. $usp_post['post_title'];
}
return $usp_post;
}
add_filter('usp_post_array', 'usp_pro_modify_post_title');
Here we are checking to see if the post title is set. If it is, we append our added text to $usp_post['post_title']
, which contains the submitted title data. The modified post array is then returned to USP Pro. Technically, the post array is returned to the plugin regardless of whether or not any changes are made. This ensures that the plugin functionality continues properly.
Of course, this is a very simple example — much more is possible using usp_post_array
and other USP Hooks.