• Skip to primary navigation
  • Skip to main content

RocketGeek

Home of WP-Members, The Original WordPress Membership Plugin

  • WordPress Plugins
    • WP-Members
      • FAQs
      • Quick Start
      • Documentation
      • Extensions
    • Advanced Options
      • Documentation
      • Purchase the Plugin
      • Get the Pro Bundle
    • Download Protect
      • Documentation
      • Purchase the Plugin
      • Get the Pro Bundle
    • Invite Codes
      • Documentation
      • Purchase the Plugin
      • Get the Pro Bundle
    • MailChimp Integration
      • Documentation
      • Purchase the Plugin
      • Get the Pro Bundle
    • PayPal Subscriptions
      • Documentation
      • Purchase the Plugin
      • Get the Pro Bundle
    • Salesforce Web-to-Lead
    • Security
      • Documentation
      • Purchase the Plugin
      • Get the Pro Bundle
    • Text Editor
      • Purchase the Plugin
      • Get the Pro Bundle
    • User List
      • Documentation
      • Purchase the Plugin
      • Get the Pro Bundle
    • User Tracking
      • Documentation
      • Purchase the Plugin
      • Get the Pro Bundle
    • Memberships for WooCommerce
    • WordPass
  • Blog
    • Basics
    • Tips and Tricks
    • Filters
    • Actions
    • Code Snippets
    • Shortcodes
    • Design
    • Release Announcements
  • Store
    • Cart
    • Checkout
  • Contact
  • Log In
  • Show Search
Hide Search
Home » Code Snippets » Require users to agree to updated terms

Require users to agree to updated terms

Chad Butler · May 17, 2018 ·

<?php // Add below this line to functions.php

add_filter( 'wpmem_member_links', 'update_terms_agreement' );
function update_terms_agreement( $links ) {
    
    // Settings.
    $process_name = 'update_terms'; 
    $button_text  = 'Agree to Terms';
    $success_msg  = 'Thank you for updating your information.';
    $error_msg    = 'Sorry, the updated terms must be agreed to before continuing to use the site. If you do not agree to the new terms,
        please <a href="#">log out</a>.';
    
    $meta_key     = 'tos';
    $meta_value   = 'agree';
    
    global $wp, $wpmem; 
    
    /*
     * Handle form processing here so we can return a success
     * message on the links page or an error message on the 
     * form page depending on result.
     */
    $update_success  = false;
    $form_validation = false;
    // Check if custom form was submitted, and if so, process update.
    if ( isset( $_POST[ $process_name . '_save' ] ) && 1 == $_POST[ $process_name . '_save' ] ) {
        
        // You'll need the current user ID.
        $user_id = get_current_user_id();
        
        // ToS agreement is required. If not checked, the user will not be able to continue.
        if ( isset( $_POST[ $meta_key ] ) ) {
            $form_validation = ( $meta_value == $_POST[ $meta_key ] ) ? true : false;
        }
         
        if ( $form_validation ) {
            // Use update_user_meta( $user_id, $meta_key, $meta_value ) to save user meta
            update_user_meta( $user_id, $meta_key, $_POST[ $meta_key ] );
            
            // Set $update_success to true for displaying success message.
            $update_success = true;
        } else {
            // We are in an error state.
            $update_success = 'error';
        }
    }    
    
    // If the page is the custom process page, build and display the form.
    if ( ( isset( $_REQUEST['a' ] ) && $process_name == $_REQUEST['a'] ) || 'error' == $update_success ) {
        // If form submission was not successful, add the error message.
        $error_msg  = '<div class="wpmem_msg" align="center"><p>' . $error_msg . '</p></div>';
        $form_before = ( 'error' == $update_success ) ? $error_msg : '';
        // Build the form.
        $form_before.= '<div id="wpmem_reg">';
        $form_before.= '<form name="form" method="post" action="' . $wpmem->user_pages['profile'] . '" id="" class="form">';
        
        /*
         * Custom HTML for the form here.
         *
         * Custom HTML is built into the variable $form_custom.  To build onto the $form custom variable,
         * each additional line should be $form_custom.= '<p>your additional html</p>'; (note the "."
         * between the variable name and the = in each additional line.  This basically means "add this
         * to the what is already in the variable."
         */
        $form_custom = '<p><strong>Our Terms of Service have changed.</strong><br />Please agree to the new terms to continue using the site.</p>';
        $form_custom.= '<p><input type="checkbox" name="tos" value="agree" /> I agree</p>'.
        /*
         * End custom HTML.
         */
        
        // Add a hidden input for us to check if the form is submitted so we can save the selection.
        $form_after = '<input type="hidden" name="' . $process_name . '_save" value="1" />';
        // Add a form submit button.
        $form_after.= '<br /><input type="submit" name="submit" value="' . $button_text . '" class="buttons" />';
        // Close the form tag.
        $form_after.= '</form></div>';
        
        // Assemble components.
        $links = $form_before . $form_custom . $form_after;
        
    } else {
        
        // If update was successful, add the success message.
        if ( $update_success ) {
            $links = '<div class="wpmem_msg" align="center"><p>' . $success_msg . '</p></div>' . $links;
        }
        
    }
    
    return $links;
}

Not sure what to do with this code?

You're not a "coder" and don't know what to do? Don't worry! Code Snippets are the basic building blocks of WordPress customization, and once you know the basics, they are simple to use.

Here are some free articles to get you started:

  • Using Code Snippets from the Site
  • Using a code snippets plugin
  • The functions.php File
  • Create a plugin file for custom functions
  • Create a child theme
  • Do not modify plugin files!

For "hands on" help, consider a plugin support subscription or the Pro Bundle.

Ready to get started?

Join Today!

© 2025 · butlerblog.com · RocketGeek is built using WordPress, WP-Members, and the Genesis Framework

  • butlerblog.com
  • WP-Members Support Subscription
  • Terms of Service
  • Privacy Policy
  • Refund Policy