I have configured a one year fixed membership type. The membership renewal period has been fixed 3 month before the end of the current year.

When a member fills up the membership signup form, his membership is automatically renewed for one year, even if is not the renewal period.

Thus, if a member filled up several times the sign up form, one year is added to his membership time.

Is it possible to force membership only for the current year, except during the renewal period which include the next year?

Thank you.

  • Thanks for your answer. I am using Drupal (7.44) and CiviCRM 4.7.8. Your first solution is not suitable in my context as folks do not have CMS account. I will try to write some code. If I find a solution, I will post is here. Thank you.
    – user3704
    Commented Sep 5, 2016 at 14:15
  • I have the same problem : Members have to complete their membership with some custom information which may be modified afterwords : each time they modify them, they get a new membership year (too easy !). From my point of view, it is a design issue : this should not happen until one enters the new renewig period. A good way to solve that could be via a Membership Status, but requires that the renewal start date can be specified as a Status start event (which is not currently the case). But I am not a programmer. But I am very interested too if someone has a suggestion. Commented Dec 15, 2016 at 16:00
  • Would be interested to know, if anything has changed/improved since this question was posted. Having the same problem: Renewal of a membership shall only be possible for exactly one prolonging period. A further renewal option shall only be available, when there is no prolonged period which has not yet begun.
    – Joachim
    Commented Oct 24, 2019 at 14:31
  • I am having the same issue. People should be able to sign up for several memberships (of different or same types), but if they fill out the signup form, their current membership is renewed, instead of a new one being created.
    – emma
    Commented Apr 12, 2023 at 12:57

2 Answers 2


This is hard to answer without more details, such as your CiviCRM version and CMS type.

If your CMS supports it - I think the easiest way to handle this is to create a separate membership page for renewals, and create a membership status for folks within three months of renewal. Control access to that page with CiviMember Role Sync (for Drupal) or CiviCRM WP Member Sync (WordPress).

If none of that's an option, and you feel comfortable writing code (or know someone who can do it for you), you can use hook_civicrm_validateForm() to have the membership fail validation when membership end date falls outside of a given range.

Of course, the simplest answer - explanatory text telling people not to renew if it's not their time - shouldn't be overlooked.


An extension (always bundle code in an extension) - can be written to do something like:

hook_contribution_post: pull up contact's memberships - if membership did not need to be renewed (examine dates) - then record $ as a donation instead - email the contact about this - and reset the membership dates to where they were;

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.