WordPress.org

Ready to get started?Download WordPress

Forums

Contact Form 7: Automatically send with username and email (11 posts)

  1. PigMan49
    Member
    Posted 4 years ago #

    Hi,

    I'm working on a WordPress blog and am trying to modify part of Contact Form 7 to automatically send the email using the User's name and password for their account. There doesn't seem to be a way to do this automatically, which is unfortunate, so I'm trying to modify the code where it submits the email to just read in the user info. Unfortunately, I can't find what part of the code sends off the email.

    This has to be done this way - we're not using it for simply a contact form but for something integrated with the site, and we need to be sure the correct user info is supplied. Is there a way to do this easily with Contact Form 7, or is there another email plugin that can be made to do this, or where in the source code for CF7 should I change things?

    Any help would be greatly appreciated.

  2. dotblend
    Member
    Posted 4 years ago #

    i'm facing the same problem, did you sort it out already?

  3. PigMan49
    Member
    Posted 4 years ago #

    No. I'm hoping that somebody around here knows how Contact Form 7 works.

  4. Jakob Smith
    Member
    Posted 4 years ago #

    I managed to hack my way to a solution regarding sending the username of the logged in user.

    To the file plugins/contact-form-7/modules/special-mail-tags.php I added this code:

    add_filter( 'wpcf7_special_mail_tags', 'wpcf7_special_mail_tag_userdata', 10, 2 );
    
    function wpcf7_special_mail_tag_userdata( $output, $name ) {
    
    	// For backwards compat.
    	$name = preg_replace( '/^wpcf7\./', '_', $name );
    
    	global $current_user;
    
    	if ( 'user_login' == $name )
    		$output = $current_user->user_login;
    
    	return $output;
    }

    This allows me to use the special mail tag [user_login] just like these special mail tags:
    http://contactform7.com/2009/12/25/special-mail-tags/

  5. JonasVorwerk
    Member
    Posted 4 years ago #

    Is there also a way to take a email address from a customfield from the post/page where the form is placed?

  6. phycel
    Member
    Posted 4 years ago #

    @Jonas - I just posted a way to output custom fields in another thread, might help achieve what you're trying to do http://wordpress.org/support/topic/plugin-contact-form-7-mail-recipient-always-different?replies=2#post-1641672

  7. propulso
    Member
    Posted 3 years ago #

    Hi,

    my problem is the same. I need the forms sent to me, with the logged user name in it. I tried modifying special-mail-tags.php as Jacob Smith said, and it worked. The mail was sent with the user name using a [user_login] tag. But, when I tried to log out, I got problems:

    Warning: Cannot modify header information - headers already sent by (output started at /XXX/wp-content/plugins/contact-form-7/modules/special-mail-tags.php:86) in /XXX/wp-login.php on line 337
    
    Warning: Cannot modify header information - headers already sent by (output started at /XXX/wp-content/plugins/contact-form-7/modules/special-mail-tags.php:86) in /XXX/wp-login.php on line 349
    
    Warning: Cannot modify header information - headers already sent by (output started at /XXX/wp-content/plugins/contact-form-7/modules/special-mail-tags.php:86) in /XXX/wp-includes/pluggable.php on line 717
    
    Warning: Cannot modify header information - headers already sent by (output started at /XXX/wp-content/plugins/contact-form-7/modules/special-mail-tags.php:86) in /XXX/wp-includes/pluggable.php on line 718
    
    Warning: Cannot modify header information - headers already sent by (output started at /XXX/wp-content/plugins/contact-form-7/modules/special-mail-tags.php:86) in /XXX/wp-includes/pluggable.php on line 719
    
    Warning: Cannot modify header information - headers already sent by (output started at /XXX/wp-content/plugins/contact-form-7/modules/special-mail-tags.php:86) in /XXX/wp-includes/pluggable.php on line 720
    
    Warning: Cannot modify header information - headers already sent by (output started at /XXX/wp-content/plugins/contact-form-7/modules/special-mail-tags.php:86) in /XXX/wp-includes/pluggable.php on line 721
    
    Warning: Cannot modify header information - headers already sent by (output started at /XXX/wp-content/plugins/contact-form-7/modules/special-mail-tags.php:86) in /XXX/wp-includes/pluggable.php on line 722
    
    Warning: Cannot modify header information - headers already sent by (output started at /XXX/wp-content/plugins/contact-form-7/modules/special-mail-tags.php:86) in /XXX/wp-includes/pluggable.php on line 725
    
    Warning: Cannot modify header information - headers already sent by (output started at /XXX/wp-content/plugins/contact-form-7/modules/special-mail-tags.php:86) in /XXX/wp-includes/pluggable.php on line 726
    
    Warning: Cannot modify header information - headers already sent by (output started at /XXX/wp-content/plugins/contact-form-7/modules/special-mail-tags.php:86) in /XXX/wp-includes/pluggable.php on line 727
    
    Warning: Cannot modify header information - headers already sent by (output started at /XXX/wp-content/plugins/contact-form-7/modules/special-mail-tags.php:86) in /XXX/wp-includes/pluggable.php on line 728
    
    Warning: Cannot modify header information - headers already sent by (output started at /XXX/wp-content/plugins/contact-form-7/modules/special-mail-tags.php:86) in /XXX/wp-includes/pluggable.php on line 731
    
    Warning: Cannot modify header information - headers already sent by (output started at /XXX/wp-content/plugins/contact-form-7/modules/special-mail-tags.php:86) in /XXX/wp-includes/pluggable.php on line 732
    
    Warning: Cannot modify header information - headers already sent by (output started at /XXX/wp-content/plugins/contact-form-7/modules/special-mail-tags.php:86) in /XXX/wp-includes/pluggable.php on line 733
    
    Warning: Cannot modify header information - headers already sent by (output started at /XXX/wp-content/plugins/contact-form-7/modules/special-mail-tags.php:86) in /XXX/wp-includes/pluggable.php on line 734
    
    Warning: Cannot modify header information - headers already sent by (output started at /XXX/wp-content/plugins/contact-form-7/modules/special-mail-tags.php:86) in /XXX/wp-includes/pluggable.php on line 890

    What did I do wrong? Could you please give the full special-mail-tags.php text so that I can use it in my site?

    Thanks a lot.

  8. propulso
    Member
    Posted 3 years ago #

    No answers?

  9. Jakob Smith
    Member
    Posted 3 years ago #

    @propulso: Just saw your comments now.

    Here is the full contents of my special-mail-tags.php:

    <?php
    /**
    ** Filters for Special Mail Tags
    **/
    
    add_filter( 'wpcf7_special_mail_tags', 'wpcf7_special_mail_tag', 10, 2 );
    
    function wpcf7_special_mail_tag( $output, $name ) {
    
        // For backwards compat.
        $name = preg_replace( '/^wpcf7\./', '_', $name );
    
        if ( '_remote_ip' == $name )
            $output = preg_replace( '/[^0-9a-f.:, ]/', '', $_SERVER['REMOTE_ADDR'] );
    
        elseif ( '_url' == $name )
            $output = get_option( 'home' ) . wpcf7_get_request_uri();
    
        elseif ( '_date' == $name )
            $output = date_i18n( get_option( 'date_format' ) );
    
        elseif ( '_time' == $name )
            $output = date_i18n( get_option( 'time_format' ) );
    
        return $output;
    }
    
    add_filter( 'wpcf7_special_mail_tags', 'wpcf7_special_mail_tag_for_post_data', 10, 2 );
    
    function wpcf7_special_mail_tag_for_post_data( $output, $name ) {
    
        if ( ! isset( $_POST['_wpcf7_unit_tag'] ) || empty( $_POST['_wpcf7_unit_tag'] ) )
            return $output;
    
        if ( ! preg_match( '/^wpcf7-f(\d+)-p(\d+)-o(\d+)$/', $_POST['_wpcf7_unit_tag'], $matches ) )
            return $output;
    
        $post_id = (int) $matches[2];
    
        if ( ! $post = get_post( $post_id ) )
            return $output;
    
        $user = new WP_User( $post->post_author );
    
        // For backwards compat.
        $name = preg_replace( '/^wpcf7\./', '_', $name );
    
        if ( '_post_id' == $name )
            $output = (string) $post->ID;
    
        elseif ( '_post_name' == $name )
            $output = $post->post_name;
    
        elseif ( '_post_title' == $name )
            $output = $post->post_title;
    
        elseif ( '_post_url' == $name )
            $output = get_permalink( $post->ID );
    
        elseif ( '_post_author' == $name )
            $output = $user->display_name;
    
        elseif ( '_post_author_email' == $name )
            $output = $user->user_email;
    
        return $output;
    }
    
    add_filter( 'wpcf7_special_mail_tags', 'wpcf7_special_mail_tag_userdata', 10, 2 );
    
    function wpcf7_special_mail_tag_userdata( $output, $name ) {
    
    // For backwards compat.
    
    $name = preg_replace( '/^wpcf7\./', '_', $name );
    
    global $current_user;
    
    if ( 'user_login' == $name )
    $output = $current_user->user_login;
    
    return $output;
    }
    
    ?>

    I hope it helps; I haven't encountered that error.

    It seems that that kind of error can be related to spaces before and/or after PHP code in various files:
    http://www.hongkiat.com/blog/wordpress-error-warning-cannot-modify-header-information/

  10. propulso
    Member
    Posted 3 years ago #

    Hi Jacob,

    sorry I didn't comment before just to thank you for your help. It works just FINE. Great job, great help, big thanks.

    :)

  11. mdiessner
    Member
    Posted 3 years ago #

    It would be great if this became a DEFAULT option otherwise everytime there is an update of the plugin this gets overwritten.

    If a blog user is logged in, then the email/name should be pre-populated by default.

Topic Closed

This topic has been closed to new replies.

About this Topic