1

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.org/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.

2
  • What is the problem with your current code?
    – kero
    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
    Feb 23, 2021 at 15:15

1 Answer 1

0

bunu 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 ) );

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.