Intereting Posts
Genesis Child и пользовательский тип сообщения Проверьте, не является ли родительский пост липкой на странице вложений? Где хранить медиа, загруженные плагином? Крючок для количества элементов в Внешний вид> Меню> CustomPostType> Просмотреть все Символ \ появляется до 'после сохранения страницы настроек Добавить категорию в переменный продукт Переписать правила, применяемые по-разному после обновления GET метод веб-api из скрипта WordPress PHP Как я могу повторно использовать код для захвата параметра в URL-адрес и поместить его в значение в скрытой форме? Многопользовательский вход в WordPress для вторичных сайтов ? posts_type = xxx не переписан Боковые столбы показывают текущую категорию также в одном сообщении Эхо-код короткого кода после каждых 3 сообщений Как добавить категорию в: 'wp-admin / post-new.php'? Пользовательская домашняя страница с полным сообщением только для первого

Функция, которая запрещает пользователям загружать фотографии больше фотографий

Mjello,

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

Таким образом, у них есть 10 фотографий для загрузки. Когда они достигнут 0, они больше не смогут загружать фотографию. Как и сейчас, изображение, которое они загружают, когда достигло 0, не вставлено в их профиль, но оно все равно загружается на сервер. Мое сообщение об ошибке также не срабатывает.

Я немного смущен тем, чего здесь не хватает.

Вот как выглядит функция:

/** * Uploads image */ public static function uploadImage($file) { require_once(ABSPATH.'wp-admin/includes/image.php'); $attachment=array('ID' => 0); if(!empty($file['name'])) { $uploads=wp_upload_dir(); $filetype=wp_check_filetype($file['name'], null); $filename=wp_unique_filename($uploads['path'], 'o.'.$filetype['ext']); $filepath=$uploads['path'].'/'.$filename; //validate file if (!in_array($filetype['ext'], array('jpg', 'JPG', 'jpeg', 'JPEG', 'png', 'PNG'))) { SWPInterface::$messages[]=__('Only JPG and PNG images are allowed.', ); } else if(move_uploaded_file($file['tmp_name'], $filepath)) { //upload image $attachment=array( 'guid' => $uploads['url'].'/'.$filename, 'post_mime_type' => $filetype['type'], 'post_title' => sanitize_title(current(explode('.', $filename))), 'post_content' => '', 'post_status' => 'inherit', 'post_author' => get_current_user_id(), ); //add image $attachment['ID']=wp_insert_attachment($attachment, $attachment['guid'], 0); update_post_meta($attachment['ID'], '_wp_attached_file', substr($uploads['subdir'], 1).'/'.$filename); //add thumbnails $metadata=wp_generate_attachment_metadata($attachment['ID'], $filepath); wp_update_attachment_metadata($attachment['ID'], $metadata); } else { SWPInterface::$messages[]=__('This image is too large for uploading.'); } } return $attachment; } } 

И вот как выглядит фактическая форма:

 <div class="widget clearfix"> <h4 class="widget-title clearfix"> <span class="left"><?php _e('Photos'); ?> </span> <span class="widget-options"> <?php if(SWPUser::isProfile()) { ?> <form action="" enctype="multipart/form-data" method="POST" class="upload-form popup-container"> <label for="user_photo" title="<?php _e('Upload a new image'); ?>"></label> <input type="file" id="user_photo" name="user_photo" class="shifted" /> <input type="hidden" name="user_action" value="add_photo" /> <input type="hidden" name="nonce" value="<?php echo wp_create_nonce(SWP_PREFIX.'nonce'); ?>" /> <?php if(SWPUser::$data['user']['membership']['photos']<=0) { ?> <div class="popup hidden"> <ul class="error"> <li><?php _e('You are not allowed to upload more images.'); ?></li> </ul> </div> <?php } ?> </form> <?php } ?> </span> </h4> <?php if(empty(SWPUser::$data['active_user']['photos'])) { ?> <span class="secondary"><?php _e('You have not uploaded any photos yet.'); ?></span> <?php } else { ?> <div class="SWP-slider carousel-slider"> <ul> <?php $counter=0; foreach(SWPUser::sortPhotos(SWPUser::$data['active_user']['photos']) as $photo) { $thumbnail=wp_get_attachment_image_src($photo['ID'], 'full'); $fullsize=wp_get_attachment_image_src($photo['ID'], 'extended'); $counter++; if($counter==1) { ?> <li class="clearfix"> <?php } ?> <div class="fourcol static-column <?php if($counter==3) { ?>last<?php } ?>"> <div class="profile-preview widget-profile"> <div class="profile-image popup-container"> <a href="<?php echo $fullsize[0]; ?>" class="colorbox" data-group="photos"><img src="<?php echo SWP_resize($thumbnail[0], 150, 150); ?>" class="fullwidth" alt="" /></a> <?php if(!is_user_logged_in()) { ?> <div class="popup hidden"> <ul class="error"> <li><?php _e('Please login ); ?></li> </ul> </div> <?php } ?> </div> <?php if(SWPUser::isProfile()) { ?> <div class="profile-options clearfix"> <div class="profile-option"> <form class="ajax-form" action="<?php echo AJAX_URL; ?>" method="POST"> <?php if(SWPUser::isFeaturedPhoto($photo['ID'])) { ?> <a href="#" title="<?php _e('Unfeature Photo'); ?>" data-title="<?php _e('Feature Photo'); ?>" class="icon-star submit-button current"></a> <input type="hidden" class="toggle" name="user_action" value="unfeature_photo" data-value="feature_photo" /> <?php } else { ?> <a href="#" title="<?php _e('Feature Photo'); ?>" data-title="<?php _e('Unfeature Photo'); ?>" class="icon-star submit-button"></a> <input type="hidden" class="toggle" name="user_action" value="feature_photo" data-value="unfeature_photo" /> <?php } ?> <input type="hidden" name="user_photo" value="<?php echo $photo['ID']; ?>" /> <input type="hidden" class="nonce" value="<?php echo wp_create_nonce(SWP_PREFIX.'nonce'); ?>" /> <input type="hidden" class="action" value="<?php echo SWP_PREFIX; ?>update_user" /> </form> </div> <div class="profile-option"> <form action="" method="POST"> <a href="#" title="<?php _e('Remove Photo'); ?>" class="submit-button icon-remove"></a> <input type="hidden" name="user_photo" value="<?php echo $photo['ID']; ?>" /> <input type="hidden" name="user_action" value="remove_photo" /> <input type="hidden" name="nonce" value="<?php echo wp_create_nonce(SWP_PREFIX.'nonce'); ?>" /> </form> </div> </div> <?php } ?> </div> </div> <?php if($counter==3) { $counter=0; ?> </li> <?php } } if($counter!==0) { ?> </li> <?php } ?> </ul> </div> <?php } ?> </div> 

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

 if(TiliaUser::$data['user']['membership']['photos']<=0) { return $file; } 

Однако я не могу получить сообщение об ошибке. Есть идеи?

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

Если ограничение, которое вы указали, выглядит приятным, чтобы его было достаточно, чтобы ограничить загрузку в пользовательском интерфейсе, но если у него есть последствия для бизнеса или права, тогда единственный способ – проверка на стороне сервера.