web-dev-qa-db-fra.com

Comment modifier un add_action () dans une boucle d'une fonction principale

Ok je veux éditer bp_core_screen_signup () est une fonction de buddypress qui traitait le formulaire d'enregistrement. Fondamentalement, cette fonction vérifie les erreurs éventuelles, puis les parcourt en utilisant add_action () pour les injecter dans register.php. Eh bien, je dois changer les balises HTML qu’elle utilise et je ne comprends pas comment. Alors d'abord, voici cette grosse fonction méchante.

function bp_core_screen_signup() {
global $bp;

if ( !bp_is_current_component( 'register' ) )
    return;

// Not a directory
bp_update_is_directory( false, 'register' );

// If the user is logged in, redirect away from here
if ( is_user_logged_in() ) {
    if ( bp_is_component_front_page( 'register' ) )
        $redirect_to = trailingslashit( bp_get_root_domain() . '/' . bp_get_members_root_slug() );
    else
        $redirect_to = bp_get_root_domain();

    bp_core_redirect( apply_filters( 'bp_loggedin_register_page_redirect_to', $redirect_to ) );

    return;
}

$bp->signup->step = 'request-details';

if ( !bp_get_signup_allowed() ) {
    $bp->signup->step = 'registration-disabled';

// If the signup page is submitted, validate and save
} elseif ( isset( $_POST['signup_submit'] ) && bp_verify_nonce_request( 'bp_new_signup' ) ) {

    do_action( 'bp_signup_pre_validate' );

    // Check the base account details for problems
    $account_details = bp_core_validate_user_signup( $_POST['signup_username'], $_POST['signup_email'] );

    // If there are errors with account details, set them for display
    if ( !empty( $account_details['errors']->errors['user_name'] ) )
        $bp->signup->errors['signup_username'] = $account_details['errors']->errors['user_name'][0];

    if ( !empty( $account_details['errors']->errors['user_email'] ) )
        $bp->signup->errors['signup_email'] = $account_details['errors']->errors['user_email'][0];

    // Check that both password fields are filled in
    if ( empty( $_POST['signup_password'] ) || empty( $_POST['signup_password_confirm'] ) )
        $bp->signup->errors['signup_password'] = __( 'Please make sure you enter your password twice', 'buddypress' );

    // Check that the passwords match
    if ( ( !empty( $_POST['signup_password'] ) && !empty( $_POST['signup_password_confirm'] ) ) && $_POST['signup_password'] != $_POST['signup_password_confirm'] )
        $bp->signup->errors['signup_password'] = __( 'The passwords you entered do not match.', 'buddypress' );

    $bp->signup->username = $_POST['signup_username'];
    $bp->signup->email = $_POST['signup_email'];

    // Now we've checked account details, we can check profile information
    if ( bp_is_active( 'xprofile' ) ) {

        // Make sure hidden field is passed and populated
        if ( isset( $_POST['signup_profile_field_ids'] ) && !empty( $_POST['signup_profile_field_ids'] ) ) {

            // Let's compact any profile field info into an array
            $profile_field_ids = explode( ',', $_POST['signup_profile_field_ids'] );

            // Loop through the posted fields formatting any datebox values then validate the field
            foreach ( (array) $profile_field_ids as $field_id ) {
                if ( !isset( $_POST['field_' . $field_id] ) ) {
                    if ( !empty( $_POST['field_' . $field_id . '_day'] ) && !empty( $_POST['field_' . $field_id . '_month'] ) && !empty( $_POST['field_' . $field_id . '_year'] ) )
                        $_POST['field_' . $field_id] = date( 'Y-m-d H:i:s', strtotime( $_POST['field_' . $field_id . '_day'] . $_POST['field_' . $field_id . '_month'] . $_POST['field_' . $field_id . '_year'] ) );
                }

                // Create errors for required fields without values
                if ( xprofile_check_is_required_field( $field_id ) && empty( $_POST['field_' . $field_id] ) )
                    $bp->signup->errors['field_' . $field_id] = __( 'This is a required field', 'buddypress' );
            }

        // This situation doesn't naturally occur so bounce to website root
        } else {
            bp_core_redirect( bp_get_root_domain() );
        }
    }

    // Finally, let's check the blog details, if the user wants a blog and blog creation is enabled
    if ( isset( $_POST['signup_with_blog'] ) ) {
        $active_signup = $bp->site_options['registration'];

        if ( 'blog' == $active_signup || 'all' == $active_signup ) {
            $blog_details = bp_core_validate_blog_signup( $_POST['signup_blog_url'], $_POST['signup_blog_title'] );

            // If there are errors with blog details, set them for display
            if ( !empty( $blog_details['errors']->errors['blogname'] ) )
                $bp->signup->errors['signup_blog_url'] = $blog_details['errors']->errors['blogname'][0];

            if ( !empty( $blog_details['errors']->errors['blog_title'] ) )
                $bp->signup->errors['signup_blog_title'] = $blog_details['errors']->errors['blog_title'][0];
        }
    }

    do_action( 'bp_signup_validate' );

    // Add any errors to the action for the field in the template for display.
    if ( !empty( $bp->signup->errors ) ) {
        foreach ( (array) $bp->signup->errors as $fieldname => $error_message ) {
            // addslashes() and stripslashes() to avoid create_function()
            // syntax errors when the $error_message contains quotes
            add_action( 'bp_' . $fieldname . '_errors', create_function( '', 'echo apply_filters(\'bp_members_signup_error_message\', "<div class=\"error\">" . stripslashes( \'' . addslashes( $error_message ) . '\' ) . "</div>" );' ) );
        }
    } else {
        $bp->signup->step = 'save-details';

        // No errors! Let's register those deets.
        $active_signup = !empty( $bp->site_options['registration'] ) ? $bp->site_options['registration'] : '';

        if ( 'none' != $active_signup ) {

            // Make sure the extended profiles module is enabled
            if ( bp_is_active( 'xprofile' ) ) {
                // Let's compact any profile field info into usermeta
                $profile_field_ids = explode( ',', $_POST['signup_profile_field_ids'] );

                // Loop through the posted fields formatting any datebox values then add to usermeta - @todo This logic should be shared with the same in xprofile_screen_edit_profile()
                foreach ( (array) $profile_field_ids as $field_id ) {
                    if ( ! isset( $_POST['field_' . $field_id] ) ) {

                        if ( ! empty( $_POST['field_' . $field_id . '_day'] ) && ! empty( $_POST['field_' . $field_id . '_month'] ) && ! empty( $_POST['field_' . $field_id . '_year'] ) ) {
                            // Concatenate the values
                            $date_value = $_POST['field_' . $field_id . '_day'] . ' ' . $_POST['field_' . $field_id . '_month'] . ' ' . $_POST['field_' . $field_id . '_year'];

                            // Turn the concatenated value into a timestamp
                            $_POST['field_' . $field_id] = date( 'Y-m-d H:i:s', strtotime( $date_value ) );
                        }
                    }

                    if ( !empty( $_POST['field_' . $field_id] ) )
                        $usermeta['field_' . $field_id] = $_POST['field_' . $field_id];

                    if ( !empty( $_POST['field_' . $field_id . '_visibility'] ) )
                        $usermeta['field_' . $field_id . '_visibility'] = $_POST['field_' . $field_id . '_visibility'];
                }

                // Store the profile field ID's in usermeta
                $usermeta['profile_field_ids'] = $_POST['signup_profile_field_ids'];
            }

            // Hash and store the password
            $usermeta['password'] = wp_hash_password( $_POST['signup_password'] );

            // If the user decided to create a blog, save those details to usermeta
            if ( 'blog' == $active_signup || 'all' == $active_signup )
                $usermeta['public'] = ( isset( $_POST['signup_blog_privacy'] ) && 'public' == $_POST['signup_blog_privacy'] ) ? true : false;

            $usermeta = apply_filters( 'bp_signup_usermeta', $usermeta );

            // Finally, sign up the user and/or blog
            if ( isset( $_POST['signup_with_blog'] ) && is_multisite() )
                $wp_user_id = bp_core_signup_blog( $blog_details['domain'], $blog_details['path'], $blog_details['blog_title'], $_POST['signup_username'], $_POST['signup_email'], $usermeta );
            else
                $wp_user_id = bp_core_signup_user( $_POST['signup_username'], $_POST['signup_password'], $_POST['signup_email'], $usermeta );

            if ( is_wp_error( $wp_user_id ) ) {
                $bp->signup->step = 'request-details';
                bp_core_add_message( $wp_user_id->get_error_message(), 'error' );
            } else {
                $bp->signup->step = 'completed-confirmation';
            }
        }

        do_action( 'bp_complete_signup' );
    }

}

do_action( 'bp_core_screen_signup' );
bp_core_load_template( apply_filters( 'bp_core_template_register', array( 'register', 'registration/register' ) ) );
}
add_action( 'bp_screens', 'bp_core_screen_signup' );

Maintenant, à la ligne 98, vous verrez .. // Ajoutez les erreurs éventuelles à l'action pour le champ du modèle à afficher.

Ensuite, il boucle à travers les erreurs et vous venez à ..

add_action( 'bp_' . $fieldname . '_errors', create_function( '', 'echo apply_filters(\'bp_members_signup_error_message\', "<div class=\"error\">" . stripslashes( \'' . addslashes( $error_message ) . '\' ) . "</div>" );' ) );

Je dois éditer ces balises HTML dans mon fichier bp-custom.php sans reproduire la totalité de la fonction. Comment puis-je me connecter correctement pour faire cela?

2
user300979

Utilisez le crochet de filtre bp_members_signup_error_message

Essayer:

function signup_error_change( $error_message ) {
     $error_message = str_replace('<div class="error">', '<span class="val-error">', $error_message);
     $error_message = str_replace('</div>', '</span>', $error_message);
     return $error_message;
}
add_filter('bp_members_signup_error_message', 'signup_error_change', 1, 1);
4
shanebp