Support » Fixing WordPress » How to limit the number of posts per user ( per day ).

  • hello.

    I made three custom post types.
    ‘news’, ‘shopinfo’, ‘item’

    ‘news’, post news of the shop.
    ‘shopinfo’, post information of the shop.
    ‘item’, post item information of the shop.

    I want to limit the number of posts.
    ‘news’, 10 posts per day.
    ‘shopinfo’, 1 post per user.
    ‘item’, 12 posts per user.

    Please teach me how limit per day and limit per user.
    I’m glad if there is a plug-in or edit functions.php.

    Thank you.

Viewing 5 replies - 1 through 5 (of 5 total)
  • Hello,

    For user restriction you can get the post from post meta table for logged in user as during creation of any post it is storing the user id in post table as post_author. so you can count the number of post for that user and during register of post(I guess you had written in function.php) you can put condition for post.
    example : if post is 1/12 for that user then pass the blank value to arguments(add_new_item) in register_post_type function.
    It will allow the user to edit that item only and will hide the add new button.


    Thanks
    Namita
    [ Signature moderated. ]

    Also, you can try this plugin to see if this matches your requirement. This plugin has Posts Creation Limits which has a per user, per role, per post type, per post status limiting system and combined with its post_creation_limits_custom_checks action hook and checks if the user has created a post that day already.
    http://wordpress.org/extend/plugins/bainternet-posts-creation-limits/

    Thanks,
    Subharanjan
    [ Signature moderated. Guys? Really stop doing that please. ]

    Thank you.

    I am very grateful to Namita and Subharanjan.

    [Bainternet Posts Creation Limits] is very good.
    This limits the post per day.
    But, this does not limit the post per hour or forever.

    I’ve tried the following methods.
    If possible, I want to check this.

    What good does the admin_head-post-new.php is use ?
    Is the SQL wrong ?

    Please, I want to check.
    I’m sorry about I can only do a little English.

    ———- functions.php ———-

    add_action( 'admin_head-post-new.php', 'check_post_limit' );
    function check_post_limit() {
      if( $_GET['post_type'] === 'item' ) {
        global $userdata;
        global $wpdb;
        $item_count = $wpdb->get_var( "SELECT count(*) FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'item' AND post_author = $userdata->ID" );
        if( $item_count >= 12 ) { wp_die( "error" ); }
      } elseif( $_GET['post_type'] === 'shopinfo' ) {
        global $userdata;
        global $wpdb;
        $shopinfo_count = $wpdb->get_var( "SELECT count(*) FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'shopinfo' AND post_author = $userdata->ID" );
        if( $item_count >= 1 ) { wp_die( "error" ); }
      } elseif( $_GET['post_type'] === 'news' ) {
        global $userdata;
        global $wpdb;
        $today = date( 'Y-m-d 00:00:00', ( gmmktime() );
        $news_count = $wpdb->get_var( "SELECT count(*) FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'news' AND post_author = $userdata->ID AND post_modified > '$today'" );
        if( $news_count >= 10 ) { wp_die( "error" ); ]
      }
    }

    [Moderator Note: Please post code or markup snippets between backticks or use the code button. As it stands, your code may now have been permanently damaged/corrupted by the forum’s parser.]

    Hi,
    The hook “admin_head-post-new.php” is fired when the /wp-admin/post-new.php file is called.( Add New Post screen in the Dashboard ), at that time I don’t think there is any GET variable set for the ‘post_type’ as you have used in your above code. Try using the global $post_type, and it should work.

    Modified code:

    add_action( 'admin_head-post-new.php', 'check_post_limit' );
    function check_post_limit() {
        global $userdata;
        global $post_type;
        global $wpdb;
    	if( $post_type === 'item' ) {
    		$item_count = $wpdb->get_var( "SELECT count(*) FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'item' AND post_author = $userdata->ID" );
    		if( $item_count >= 1 ) { wp_die( "error" ); }
    	} elseif( $post_type === 'shopinfo' ) {
    		$shopinfo_count = $wpdb->get_var( "SELECT count(*) FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'shopinfo' AND post_author = $userdata->ID" );
    		if( $item_count >= 1 ) { wp_die( "error" ); }
    	} elseif( $post_type === 'news' ) {
    		$today = date( 'Y-m-d 00:00:00', ( gmmktime() ));
    		$news_count = $wpdb->get_var( "SELECT count(*) FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'news' AND post_author = $userdata->ID AND post_modified > '$today'" );
    		if( $news_count >= 10 ) { wp_die( "error" ); }
    	}
    	return;
    }

    Thank you very much.

    I did not know the global variable $post_type.
    I looked into the global variable.
    There was a lot of useful global variables.
    I study more.
    I am very grateful to you.

    Thank you.

Viewing 5 replies - 1 through 5 (of 5 total)
  • The topic ‘How to limit the number of posts per user ( per day ).’ is closed to new replies.