Страница загрузки пользовательского аватара Buddypress

Я надеюсь, что кто-нибудь на этом форуме поможет мне с пользовательской страницей загрузки аватара, которую я пытаюсь создать для Buddypress. Заранее извиняюсь за длинное письмо, но я хочу быть максимально ясным, чтобы, надеюсь, получить четкий и конкретный ответ :)

Страница является частью трехэтапного процесса «начало работы», который пользователь выполняет после регистрации на веб-сайте (1. заполнение полей профиля 2. загрузка аватара 3. приглашение друзей).

Я не эксперт в коде, но я отсортировал шаги 1 и 3, скопировав и отредактировав код из файлов profile/edit.php и пригласить кого-либо/по электронной почте/по электронной почте.php соответственно, а затем выполнив перенаправление при отправке на следующий шаг.

Чтобы выполнить шаг 1, мне также пришлось отредактировать файл bp-xprofile-template.php, включив в него if is_page... else..., чтобы страница использовала loggedin_user, а не display_user.

На шаге 2 у меня страница отображается правильно, но после того, как я выбираю изображение для аватара и нажимаю «Загрузить», страница обновляется и не переходит к кадрированию, что было бы, если бы вы загружали аватар на изменение аватара. страницу в профиле.

Если я изменю действие формы, чтобы перенаправить на страницу смены аватара в профиле пользователя, вошедшего в систему (по умолчанию нет действия), то появится обрезка, но я не хочу, чтобы пользователь покидал «шаги».

Думал, может нужно что-то изменить в наборе функций avatar_admin в bp-core-template.php, чтобы он работал на других страницах, но это не выходит за рамки моих возможностей. Я действительно надеюсь, что кто-то может помочь с этим, потому что это последнее препятствие для завершения этого процесса.

Ниже приведен код для change-avatar.php, и это то, что я скопировал и пытаюсь заставить работать на пользовательской странице. Моя страница перестает работать должным образом на "if ('crop-image' == bp_get_avatar_admin_step()". Заранее спасибо.

    <h4><?php _e( 'Change Avatar', 'buddypress' ) ?></h4>

<?php do_action( 'bp_before_profile_avatar_upload_content' ) ?>

<?php if ( !(int)bp_get_option( 'bp-disable-avatar-uploads' ) ) : ?>

    <p><?php _e( 'Your avatar will be used on your profile and throughout the site. If there is a <a href="http://gravatar.com">Gravatar</a> associated with your account email we will use that, or you can upload an image from your computer.', 'buddypress') ?></p>

    <form action="" method="post" id="avatar-upload-form" class="standard-form" enctype="multipart/form-data">

        <?php if ( 'upload-image' == bp_get_avatar_admin_step() ) : ?>

            <?php wp_nonce_field( 'bp_avatar_upload' ) ?>
            <p><?php _e( 'Click below to select a JPG, GIF or PNG format photo from your computer and then click \'Upload Image\' to proceed.', 'buddypress' ) ?></p>

            <p id="avatar-upload">
                <input type="file" name="file" id="file" />
                <input type="submit" name="upload" id="upload" value="<?php _e( 'Upload Image', 'buddypress' ) ?>" />
                <input type="hidden" name="action" id="action" value="bp_avatar_upload" />
            </p>

            <?php if ( bp_get_user_has_avatar() ) : ?>
                <p><?php _e( "If you'd like to delete your current avatar but not upload a new one, please use the delete avatar button.", 'buddypress' ) ?></p>
                <p><a class="button edit" href="<?php bp_avatar_delete_link() ?>" title="<?php _e( 'Delete Avatar', 'buddypress' ) ?>"><?php _e( 'Delete My Avatar', 'buddypress' ) ?></a></p>
            <?php endif; ?>

        <?php endif; ?>

        <?php if ( 'crop-image' == bp_get_avatar_admin_step() ) : ?>

            <h5><?php _e( 'Crop Your New Avatar', 'buddypress' ) ?></h5>

            <img src="<?php bp_avatar_to_crop() ?>" id="avatar-to-crop" class="avatar" alt="<?php _e( 'Avatar to crop', 'buddypress' ) ?>" />

            <div id="avatar-crop-pane">
                <img src="<?php bp_avatar_to_crop() ?>" id="avatar-crop-preview" class="avatar" alt="<?php _e( 'Avatar preview', 'buddypress' ) ?>" />
            </div>

            <input type="submit" name="avatar-crop-submit" id="avatar-crop-submit" value="<?php _e( 'Crop Image', 'buddypress' ) ?>" />

            <input type="hidden" name="image_src" id="image_src" value="<?php bp_avatar_to_crop_src() ?>" />
            <input type="hidden" id="x" name="x" />
            <input type="hidden" id="y" name="y" />
            <input type="hidden" id="w" name="w" />
            <input type="hidden" id="h" name="h" />

            <?php wp_nonce_field( 'bp_avatar_cropstore' ) ?>

        <?php endif; ?>

    </form>

<?php else : ?>

    <p><?php _e( 'Your avatar will be used on your profile and throughout the site. To change your avatar, please create an account with <a href="http://gravatar.com">Gravatar</a> using the same email address as you used to register with this site.', 'buddypress' ) ?></p>

<?php endif; ?>

<?php do_action( 'bp_after_profile_avatar_upload_content' ) ?>

person Dylan Aubrey    schedule 16.05.2012    source источник
comment
Привет, я нашел решение, вы можете увидеть в stackoverflow.com/a/40312684/4016011   -  person gfirem    schedule 28.10.2016


Ответы (3)


Моя страница перестает работать должным образом на "if ( 'crop-image' == bp_get_avatar_admin_step()"

Так что же тогда означает bp_get_avatar_admin_step() =? Эхо, чтобы увидеть.

Аватар вообще загружается? Если это так, вам нужно выяснить, как продвинуть admin_step.

Думал, может нужно что-то изменить в наборе функций avatar_admin в bp-core-template.php, но это не выходит за рамки моих возможностей

Вместо того, чтобы менять, выясните, как они называются.

person shanebp    schedule 16.05.2012

Я только что закончил работу над реализацией своей собственной пользовательской страницы аватара и столкнулся с той же проблемой. Я думаю, что я действительно потерял волосы из-за этого. хаха. В итоге я адаптировал код со своей стороны, чтобы убедиться, что bp все еще можно обновить, взяв несколько фрагментов соответствующего кода и встроив его в новую функцию как часть моей темы.

Проблема в том, что скрытое значение отправки 'w' является одним из многих зарезервированных терминов wordpress.

<input type="hidden" name="image_src" id="image_src" value="<?php bp_avatar_to_crop_src(); ?>" />
<input type="hidden" id="x" name="x" />
<input type="hidden" id="y" name="y" />
<input type="hidden" id="w" name="w" />
<input type="hidden" id="h" name="h" />

Вам нужно будет изменить это значение на любое другое, а затем реализовать собственную версию функции-обработчика:

buddypress/bp-xprofile/bp-xprofile-screens.php->xprofile_screen_change_avatar();

Кроме того, возможно, есть лучший способ, но для того, чтобы обрезка работала, мне пришлось реализовать отдельный вызов содержимого внутри

bp_core_add_jquery_cropper(){
 wp_enqueue_style( 'jcrop' );
 wp_enqueue_script( 'jcrop', array( 'jquery' ) );
 add_action( 'wp_head', 'bp_core_add_cropper_inline_js' );
 add_action( 'wp_head', 'bp_core_add_cropper_inline_css' );
}

to

 wp_enqueue_style( 'jcrop' );
 wp_enqueue_script( 'jcrop', array( 'jquery' ) );
 add_action( 'wp_footer', 'bp_core_add_cropper_inline_js' );
 add_action( 'wp_footer', 'bp_core_add_cropper_inline_css' );

в моей собственной реализации profile_screen_change_avatar().

Надеюсь, это все еще может быть полезно для вас или других. Дайте мне знать, если все это имеет смысл (ну или нет;)).

person Zenvied    schedule 13.02.2014

Спасибо за ваши полезные предложения. Просто добавлю, что предложения @Zenvied работают очень хорошо. Единственное, мне пришлось добавить свои собственные реализации «bp_core_add_cropper_inline_js()» и «bp_core_add_cropper_inline_css()», а затем вызвать их из моей реализации «xprofile_screen_change_avatar()». Итак, вместо этого:

 wp_enqueue_style( 'jcrop' );
 wp_enqueue_script( 'jcrop', array( 'jquery' ) );
 add_action( 'wp_footer', 'bp_core_add_cropper_inline_js' );
 add_action( 'wp_footer', 'bp_core_add_cropper_inline_css' );

Я сделал это:

self::bp_custom_core_add_cropper_inline_css();
self::bp_custom_core_add_cropper_inline_js();
wp_enqueue_style( 'jcrop' );
wp_enqueue_script( 'jcrop', array( 'jquery' ) );

Надеюсь, это поможет кому-то! :-)

person Biswadip Dasgupta    schedule 05.05.2014