I was wondering if there is a way to make this code limit by category. In other words, if user A has already published 10 posts in category A then he can keep the new ones as drafts in category A or post another 10 in category B.
*
* @param array $data An array of slashed, sanitized, and processed post data.
* @param array $postarr An array of sanitized (and slashed) but otherwise unmodified post data.
* @see
* @return {[type]} [description]
*/
function kia_limit_posts( $data, $postarr ) {
if ( isset( $data['post_type'] ) && 'post' === $data['post_type'] ) {
$posts_per_month = 10; // Could be set as an updatable option
$user_id = get_current_user_id();
// Number of posts in current month by this user
$author_posts = new WP_Query( array(
'post_type' => 'any',
'post_status' => 'publish',
'author' => $user_id,
'fields' => 'ids',
'monthnum' => date( 'm' ), // Whatever the current month is
) );
$author_post_count = $author_posts = $author_posts->post_count + 1; // Add current post
if( $author_post_count > $posts_per_month ) {
$data['post_status'] = 'draft';
}
}
return $data;
}
add_filter( 'wp_insert_post_data', 'kia_limit_posts', 10, 2 );
Thank you in advance.
I was wondering if there is a way to make this code limit by category. In other words, if user A has already published 10 posts in category A then he can keep the new ones as drafts in category A or post another 10 in category B.
*
* @param array $data An array of slashed, sanitized, and processed post data.
* @param array $postarr An array of sanitized (and slashed) but otherwise unmodified post data.
* @see https://developer.wordpress/reference/functions/wp_insert_post/#parameters
* @return {[type]} [description]
*/
function kia_limit_posts( $data, $postarr ) {
if ( isset( $data['post_type'] ) && 'post' === $data['post_type'] ) {
$posts_per_month = 10; // Could be set as an updatable option
$user_id = get_current_user_id();
// Number of posts in current month by this user
$author_posts = new WP_Query( array(
'post_type' => 'any',
'post_status' => 'publish',
'author' => $user_id,
'fields' => 'ids',
'monthnum' => date( 'm' ), // Whatever the current month is
) );
$author_post_count = $author_posts = $author_posts->post_count + 1; // Add current post
if( $author_post_count > $posts_per_month ) {
$data['post_status'] = 'draft';
}
}
return $data;
}
add_filter( 'wp_insert_post_data', 'kia_limit_posts', 10, 2 );
Thank you in advance.
Share Improve this question asked Feb 23, 2021 at 10:11 ACEACE 111 bronze badge 2- What is the problem with your current code? – kero Commented Feb 23, 2021 at 10:34
- 1 @kero this code limits posts from any category, but I want to limit it by category. like user 1 is able to post only 10 posts in Cat 1, then he can also post another 10 in Cat 2 or wait till time is up – ACE Commented Feb 23, 2021 at 15:15
1 Answer
Reset to default 0bunu kullan
$author_posts = new WP_Query( array( 'cat' => '1,3', 'post_type' => 'any', 'post_status' => 'publish', 'author' => $user_id, 'fields' => 'ids', 'monthnum' => date( 'm' ), // Whatever the current month is ) );