Intereting Posts
Добавьте меню «сортировка по умолчанию» на страницы дочернего хранилища Как вернуть изображение из пользовательской конечной точки API REST? 404 (категория, страницы, архивы) при использовании пользовательских правил перезаписи Рабочий процесс InDesign для WordPress Как проверить, является ли сообщение приватным? Добавление другого состояния (спама, отклонения, одобрения) для комментариев WordPress? отображение динамического содержимого на основе URL-адреса на пользовательской странице как случайным образом перечислить 5 авторов с не менее чем 3 опубликованными сообщениями Медиа-библиотека пуста после перемещения сервера (точная копия файлов и db) Повторите использование аутентифицированного HTTP-соединения или cUrl-дескриптора Мой класс плагина не работает! пользовательская заголовочная навигация имеет нечетное расстояние Постоянная ссылка для пользовательских пост-типов в пользовательских таксономах не найдена Как написать urlencode () описание блога? Как включить или отключить разбиение на страницы в результатах поиска и списках категорий по ссылке?

Загрузка файла Frontend Simple Local Avatar

Я использую Simple Local Avatars для загрузки пользовательских аватаров пользователей.

Как создать внешнюю страницу с функцией загрузки аватара?

Ниже вы найдете код плагина Simple Local Avatars:

<?php /** * add field to user profiles */ class simple_local_avatars { function simple_local_avatars() { add_filter('get_avatar', array($this, 'get_avatar'), 10, 5); add_action('admin_init', array($this, 'admin_init')); add_action('show_user_profile', array($this, 'edit_user_profile')); add_action('edit_user_profile', array($this, 'edit_user_profile')); add_action('personal_options_update', array($this, 'edit_user_profile_update')); add_action('edit_user_profile_update', array($this, 'edit_user_profile_update')); add_filter('avatar_defaults', array($this, 'avatar_defaults')); } function get_avatar($avatar = '', $id_or_email, $size = '80', $default = '', $alt = false) { if (is_numeric($id_or_email)) $user_id = (int) $id_or_email; elseif (is_string($id_or_email)) { if ($user = get_user_by_email($id_or_email)) $user_id = $user->ID; } elseif (is_object($id_or_email) && !empty($id_or_email->user_id)) $user_id = (int) $id_or_email->user_id; if (!empty($user_id)) $local_avatars = get_user_meta($user_id, 'simple_local_avatar', true); if (!isset($local_avatars) || empty($local_avatars) || !isset($local_avatars['full'])) { if (!empty($avatar)) return "<img src='http://www.wrongmag.ru/wp-content/themes/wrongmag/scripts/timthumb.php?src=/uploads/default-avatar.png&amp;w={$size}&amp;h={$size}&amp;zc=1' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />"; remove_filter('get_avatar', 'get_simple_local_avatar'); $avatar = get_avatar($id_or_email, $size, $default); add_filter('get_avatar', 'get_simple_local_avatar', 10, 5); return $avatar; } if (!is_numeric($size)) $size = '80'; if (empty($alt)) $alt = get_the_author_meta('display_name', $user_id); if (empty($local_avatars[$size])) { $upload_path = wp_upload_dir(); $avatar_full_path = str_replace($upload_path['baseurl'], $upload_path['basedir'], $local_avatars['full']); $image_sized = image_resize($avatar_full_path, $size, $size, true); if (is_wp_error($image_sized)) $local_avatars[$size] = $local_avatars['full']; else $local_avatars[$size] = str_replace($upload_path['basedir'], $upload_path['baseurl'], $image_sized); update_user_meta($user_id, 'simple_local_avatar', $local_avatars); } elseif (substr($local_avatars[$size], 0, 4) != 'http') $local_avatars[$size] = site_url($local_avatars[$size]); $author_class = is_author($user_id) ? ' current-author' : ''; $avatar = "<img alt='" . esc_attr($alt) . "' src='" . $local_avatars[$size] . "' class='avatar avatar-{$size}{$author_class} photo' height='{$size}' width='{$size}' />"; return $avatar; } function admin_init() { load_plugin_textdomain('simple-local-avatars', false, dirname(plugin_basename(__FILE__)) . '/languages/'); register_setting('discussion', 'simple_local_avatars_caps', array($this, 'sanitize_options')); add_settings_field('simple-local-avatars-caps', __('Local Avatar Permissions', 'simple-local-avatars'), array($this, 'avatar_settings_field'), 'discussion', 'avatars'); } function sanitize_options($input) { $new_input['simple_local_avatars_caps'] = empty($input['simple_local_avatars_caps']) ? 0 : 1; return $new_input; } function avatar_settings_field($args) { $options = get_option('simple_local_avatars_caps'); echo '<label for="simple_local_avatars_caps"> <input type="checkbox" name="simple_local_avatars_caps" id="simple_local_avatars_caps" value="1" ' . @checked($options['simple_local_avatars_caps'], 1, false) . ' /> ' . __('Only allow users with file upload capabilities to upload local avatars (Authors and above)', 'simple-local-avatars') . ' </label>'; } function edit_user_profile($profileuser) { ?> <h3><?php _e('Avatar', 'simple-local-avatars'); ?></h3> <table class="form-table"> <tr> <th><label for="simple-local-avatar"><?php _e('Upload Avatar', 'simple-local-avatars'); ?></label></th> <td style="width: 50px;" valign="top"> <?php echo get_avatar($profileuser->ID); ?> </td> <td> <?php $options = get_option('simple_local_avatars_caps'); if (empty($options['simple_local_avatars_caps']) || current_user_can('upload_files')) { do_action('simple_local_avatar_notices'); wp_nonce_field('simple_local_avatar_nonce', '_simple_local_avatar_nonce', false); ?> <input type="file" name="simple-local-avatar" id="simple-local-avatar" /><br /> <?php if (empty($profileuser->simple_local_avatar)) echo '<span class="description">' . __('No local avatar is set. Use the upload field to add a local avatar.', 'simple-local-avatars') . '</span>'; else echo '<input type="checkbox" name="simple-local-avatar-erase" value="1" /> ' . __('Delete local avatar', 'simple-local-avatars') . '<br /> <span class="description">' . __('Replace the local avatar by uploading a new avatar, or erase the local avatar (falling back to a gravatar) by checking the delete option.', 'simple-local-avatars') . '</span>'; } else { if (empty($profileuser->simple_local_avatar)) echo '<span class="description">' . __('No local avatar is set. Set up your avatar at Gravatar.com.', 'simple-local-avatars') . '</span>'; else echo '<span class="description">' . __('You do not have media management permissions. To change your local avatar, contact the blog administrator.', 'simple-local-avatars') . '</span>'; } ?> </td> </tr> </table> <script type="text/javascript">var form=document.getElementById('your-profile');form.encoding='multipart/form-data';form.setAttribute('enctype','multipart/form-data');</script> <?php } function edit_user_profile_update($user_id) { if (!wp_verify_nonce($_POST['_simple_local_avatar_nonce'], 'simple_local_avatar_nonce')) return; if (!empty($_FILES['simple-local-avatar']['name'])) { $mimes = array( 'jpg|jpeg|jpe' => 'image/jpeg', 'gif' => 'image/gif', 'png' => 'image/png', 'bmp' => 'image/bmp', 'tif|tiff' => 'image/tiff' ); $avatar = wp_handle_upload($_FILES['simple-local-avatar'], array('mimes' => $mimes, 'test_form' => false)); if (empty($avatar['file'])) { switch ($avatar['error']) { case 'File type does not meet security guidelines. Try another.': add_action('user_profile_update_errors', create_function('$a', '$a->add("avatar_error",__("Please upload a valid image file for the avatar.","simple-local-avatars"));')); break; default: add_action('user_profile_update_errors', create_function('$a', '$a->add("avatar_error","<strong>".__("There was an error uploading the avatar:","simple-local-avatars")."</strong> ' . esc_attr($avatar['error']) . '");')); } return; } $this->avatar_delete($user_id); update_user_meta($user_id, 'simple_local_avatar', array('full' => $avatar['url'])); } elseif (isset($_POST['simple-local-avatar-erase']) && $_POST['simple-local-avatar-erase'] == 1) $this->avatar_delete($user_id); } function avatar_defaults($avatar_defaults) { remove_action('get_avatar', array($this, 'get_avatar')); return $avatar_defaults; } function avatar_delete($user_id) { $old_avatars = get_user_meta($user_id, 'simple_local_avatar', true); $upload_path = wp_upload_dir(); if (is_array($old_avatars)) { foreach ($old_avatars as $old_avatar) { $old_avatar_path = str_replace($upload_path['baseurl'], $upload_path['basedir'], $old_avatar); @unlink($old_avatar_path); } } delete_user_meta($user_id, 'simple_local_avatar'); } } $simple_local_avatars = new simple_local_avatars; if (!function_exists('get_simple_local_avatar')): function get_simple_local_avatar($id_or_email, $size = '80', $default = '', $alt = false) { global $simple_local_avatars; return $simple_local_avatars->get_avatar('', $id_or_email, $size, $default, $alt); } endif; register_uninstall_hook(__FILE__, 'simple_local_avatars_uninstall'); function simple_local_avatars_uninstall() { $simple_local_avatars = new simple_local_avatars; $users = get_users_of_blog(); foreach ($users as $user) $simple_local_avatars->avatar_delete($user->user_id); delete_option('simple_local_avatars_caps'); } 

Я пробовал много вариантов, но все они потерпели неудачу.

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

Большое спасибо.

Solutions Collecting From Web of "Загрузка файла Frontend Simple Local Avatar"

Сергей, используйте это там, где вы собираетесь поместить форму для редактирования аватара:

 <?php $myAv = new simple_local_avatars(); $myAv->edit_user_profile($profileuser); ?> 

Добавить

 do_action('show_user_profile'); do_action('edit_user_profile'); 

к вашему пользовательскому шаблону интерфейса

и при сохранении добавьте:

 do_action('personal_options_update'); do_action('edit_user_profile_update'); 

Нам нужны следующие параметры:

  1. action edit_user_profile нужен объект WordPress (мы берем его из класса WP_User)
  2. Действие edit_user_profile_update требует идентификатора пользователя

Первое действие – это рендеринг поля для загрузки, а текущий аватар – второй, который выполняет загрузку. Вот почему нам нужно вызвать его после нажатия кнопки. Мы слушаем кнопку в начале кода, поэтому после отправки обновления страницы и обновления аватара (в противном случае она отображается как сломанное изображение).

Вот моя настройка:

 <?php if(isset($_POST['user_avatar_edit_submit'])) { do_action('edit_user_profile_update', bbp_get_displayed_user_id()); } ?> <form id="your-profile" action="<?php bbp_user_profile_edit_url( bbp_get_displayed_user_id() ); ?>" method="post"> <?php $this_user = new WP_User(bbp_get_displayed_user_id()); do_action('edit_user_profile', $this_user); ?> <input type="submit" name="user_avatar_edit_submit" value="OK"/> </form> 
 <?php get_header(); global $user_ID; if ($user_ID) { $user_info = get_userdata($user_ID); $id = $user_info->ID; } ?> <?php if(isset($_POST['user_avatar_edit_submit'])) { do_action('edit_user_profile_update', $id); } ?> <form id="your-profile" action="" method="post"> <?php $myAv = new simple_local_avatars(); $myAv->edit_user_profile($user_info); ?> <input type="submit" name="user_avatar_edit_submit" value="OK"/> </form> <?php get_footer(); ?> 

Примечание редактора. Следующий фрагмент, как представляется, содержит исходный код частично из следующего плагина Simple Local Avatars .

 <?php global $current_user; $user_id = get_current_user_id(); $user_last = get_user_meta($user_id); $unserialize = unserialize($user_last['simple_local_avatar'][0]); class Simple_Local_Avatarssss { private $user_id_being_edited, $avatar_upload_error, $remove_nonce, $avatar_ratings; public $options; public function unique_filename_callback( $dir, $name, $ext ) { $user = get_user_by( 'id', (int) $this->user_id_being_edited ); $name = $base_name = sanitize_file_name( $user->display_name . '_avatar_' . time() ); // ensure no conflicts with existing file names $number = 1; while ( file_exists( $dir . "/$name$ext" ) ) { $name = $base_name . '_' . $number; $number++; } return $name . $ext; } private function assign_new_user_avatar( $url_or_media_id, $user_id ) { // delete the old avatar $this->avatar_delete( $user_id ); // delete old images if successful $meta_value = array(); // set the new avatar if ( is_int( $url_or_media_id ) ) { $meta_value['media_id'] = $url_or_media_id; $url_or_media_id = wp_get_attachment_url( $url_or_media_id ); } $meta_value['full'] = $url_or_media_id; update_user_meta( $user_id, 'simple_local_avatar', $meta_value ); // save user information (overwriting old) } public function avatar_delete( $user_id ) { $old_avatars = (array) get_user_meta( $user_id, 'simple_local_avatar', true ); if ( empty( $old_avatars ) ) return; // if it was uploaded media, don't erase the full size or try to erase an the ID if ( array_key_exists( 'media_id', $old_avatars ) ) unset( $old_avatars['media_id'], $old_avatars['full'] ); if ( ! empty( $old_avatars ) ) { $upload_path = wp_upload_dir(); foreach ($old_avatars as $old_avatar ) { // derive the path for the file based on the upload directory $old_avatar_path = str_replace( $upload_path['baseurl'], $upload_path['basedir'], $old_avatar ); if ( file_exists( $old_avatar_path ) ) unlink( $old_avatar_path ); } } delete_user_meta( $user_id, 'simple_local_avatar' ); delete_user_meta( $user_id, 'simple_local_avatar_rating' ); } public function edit_user_profile_update( $file , $user_id ) { $_FILES['simple-local-avatar'] = $file['file']; // check for uploaded files if ( ! empty( $_FILES['simple-local-avatar']['name'] ) ) : // front end (theme my profile etc) support if ( ! function_exists( 'wp_handle_upload' ) ) require_once( ABSPATH . 'wp-admin/includes/file.php' ); $this->user_id_being_edited = $user_id; // make user_id known to unique_filename_callback function $avatar = wp_handle_upload( $_FILES['simple-local-avatar'], array( 'mimes' => array( 'jpg|jpeg|jpe' => 'image/jpeg', 'gif' => 'image/gif', 'png' => 'image/png', ), 'test_form' => false, 'unique_filename_callback' => array( $this, 'unique_filename_callback' ) ) ); if ( empty($avatar['file']) ) { // handle failures switch ( $avatar['error'] ) { case 'File type does not meet security guidelines. Try another.' : $this->avatar_upload_error = __('Please upload a valid image file for the avatar.','simple-local-avatars'); break; default : $this->avatar_upload_error = '<strong>' . __('There was an error uploading the avatar:','simple-local-avatars') . '</strong> ' . esc_html( $avatar['error'] ); } return; } $this->assign_new_user_avatar( $avatar['url'], $user_id ); endif; // handle rating if ( isset( $avatar['url'] ) || $avatar = get_user_meta( $user_id, 'simple_local_avatar', true ) ) { if ( empty( $_POST['simple_local_avatar_rating'] ) || ! array_key_exists( $_POST['simple_local_avatar_rating'], $this->avatar_ratings ) ) // $_POST['simple_local_avatar_rating'] = key( $this->avatar_ratings ); update_user_meta( $user_id, 'simple_local_avatar_rating', $_POST['simple_local_avatar_rating'] ); return 1; } } } if(isset($_POST['sub'])) { $fname=$_FILES['file']['name']; $ftype=$_FILES['file']['type']; } if(isset($_FILES['file']['name']) && !empty($_FILES['file']['name']) ){ $simple_local_avatars = new Simple_Local_Avatarssss; $result = $simple_local_avatars->edit_user_profile_update($_FILES,$user_id); if($result): echo 'Updated'; endif; } ?> <form action="" method="POST" enctype="multipart/form-data"> <?php echo get_avatar( $user_id, 96, $default, $alt ); ?><br /><br /> <input type="file" name="file"><br /><br /> <input style="float: left;" type="submit" name="sub" value="Upload Image"> </form>