简体   繁体   中英

Wordpress - Custom Registration Form, Redirect After

I have a custom registration form. I am trying to redirect users to a specific page after they've registered, but the methods I have tried have not worked, here is my code - how can I get a redirection after a user has registered?:

EDIT: (a jQuery or Javascript solutuion for this would be acceptable too)

<?php
/* Load registration file. */
require_once( ABSPATH . WPINC . '/registration.php' );

/* If user registered, input info. */
if ( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && $_POST['action'] == 'adduser' ) {
    $user_pass = wp_generate_password();
    $userdata = array(
        'user_pass' => esc_attr( $_POST['user_pass'] ),
        'user_login' => esc_attr( $_POST['user_name'] ),
        'user_email' => esc_attr( $_POST['email'] ),
    );

    if ( !$userdata['user_login'] )
        $error = __('A username is required for registration.', 'frontendprofile');
    elseif ( username_exists($userdata['user_login']) )
        $error = __('Sorry, that username already exists!', 'frontendprofile');
    elseif ( !is_email($userdata['user_email'], true) )
        $error = __('You must enter a valid email address.', 'frontendprofile');
    elseif ( email_exists($userdata['user_email']) )
        $error = __('Sorry, that email address is already used!', 'frontendprofile');

    else{
        $new_user = wp_insert_user( $userdata );
        update_usermeta( $new_user, 'fullname', esc_attr( $_POST['fullname']  ) );
        update_usermeta( $new_user, 'publication', esc_attr( $_POST['publication']  ) );
        update_usermeta( $new_user, 'usertype', esc_attr( $_POST['usertype']  ) );
        wp_new_user_notification($new_user, $user_pass);
        wp_redirect( 'http://www.google.com' );
    }
}

?>

<form method="post" id="adduser" class="user-forms" action="http://<?php echo $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; ?>">
  <p class="form-usertype">
  <strong>TYPE</strong>
    <?php $usertype = get_the_author_meta( 'usertype', $current_user->ID ); ?>
  <ul>
    <li>
      <input class="radio" value="Media" name="usertype" <?php if ($_POST['usertype'] == 'Media' ) { ?>checked="checked"<?php }?> type="radio" />
      <span><?php _e('Media', 'frontendprofile'); ?></span>
    </li>
    <li>
      <input class="radio" value="Freelance"  name="usertype" <?php if ($_POST['usertype'] == 'Freelance'  ) { ?>checked="checked"<?php }?> type="radio" />
      <span><?php _e('Freelance',  'frontendprofile'); ?></span>
    </li>
    <li>
      <input class="radio" value="Student" name="usertype" <?php if ($_POST['usertype'] == 'Student' ) { ?>checked="checked"<?php }?> type="radio" />
      <span><?php _e('Student', 'frontendprofile'); ?></span>
    </li>
  </ul>
  </p>
  <!-- .form-usertype -->

  <p class="form-username">
    <strong>FULL NAME</strong>
    <input class="text-input" name="user_name" type="text" id="user_name" value="<?php if ( $error ) echo wp_specialchars( $_POST['user_name'], 1 ); ?>" />
  </p>
  <!-- .form-username -->

  <p class="form-email">
    <strong>E-MAIL</strong>
    <input class="text-input" name="email" type="text" id="email" value="<?php if ( $error ) echo wp_specialchars( $_POST['email'], 1 ); ?>" />
  </p>
  <!-- .form-email -->

  <p class="form-password">
  <strong>CONFIRM E-MAIL</strong>
  <input type="text" name="user_pass" id="user_pass" class="input" value="" size="20" tabindex="10" />
  </p>

  <p class="form-publication">
  <strong>MEDIA OUTLET</strong>
    <input class="text-input" name="publication" type="text" id="publication" value="<?php if ( $error ) echo wp_specialchars( $_POST['publication'], 1 ); ?>"/>
  </p>
  <!-- .form-publication -->

  <p class="form-submit"> <?php echo $referer; ?>
    <input name="adduser" type="submit" id="addusersub" class="submit button" value="<?php if ( current_user_can( 'create_users' ) ) _e('Add User', 'frontendprofile'); else _e('Register', 'frontendprofile'); ?>" />
    <?php wp_nonce_field( 'add-user' ) ?>
    <input name="action" type="hidden" id="action" value="adduser" />
  </p>
  <!-- .form-submit -->

</form>

<script type="text/javascript">
$(document).ready(function(){

  $("input[name$='usertype']").click(function(){

  var radio_value = $(this).val();

  if(radio_value=='Media') {
     $("p.form-publication").show();
  }
  else if(radio_value=='Student') {
    $("p.form-publication").hide();
  }
  else if(radio_value=='Freelance') {
    $("p.form-publication").hide();
  }
  }); 
});
</script>

Your pluggin is not respecting the expected action hook format that you'd normally use. What you have to do here is to hook two different functions for your pluggin.

One will draw the pluggin when necessary, using a shortcode for example.

The other will hook into the early processing of wordpress to actually do what it's got to do such as adding a user. Then, if you use wp_redirect it will allow you to redirect before any output is sent to the browser.

For example, in my pluggins, i use the hooks:

add_action('init', 'my_function_to_process');
add_action('template_redirect', 'my_function_to_draw');

And i create those two functions to do what they have to do in my pluggin's file.

You might want to check out the hooks database api for more information on hooks:

http://codex.wordpress.org/Plugin_API/Action_Reference

Good luck

EDIT

Just change:

wp_redirect( 'http://www.google.com' );

For:

?><script>window.href.location = "http://www.google.com";</script><?php exit();

And you would be on your way to victory... It's ugly in terms of integration, i'd have done it with a pluggin but it should work fine...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM