Antonoff
@Antonoff
Разработчик

Как в WordPress реализовать галерею изображений от пользователей?

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

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

Может кто-то сталкивался с такого рода заданием?
  • Вопрос задан
  • 219 просмотров
Решения вопроса 1
Slams
@Slams
Допилите уже под свои нужды.

По нажатию на кнопку будет открываться библиотека мультимедиа, как в админке и туда можно будет загружать фотографии авторизированому пользователю.

Пользователь будет видеть только свои фотографии.

<div id="main_photo" class="upload_file button green"><span>Загрузить заглавное фото</span></div>


$('#selector').on('click','.upload_file',(function(e) {
        e.preventDefault();
        upload_image($(this));
    }));

function upload_image(el){

    var custom_uploader;
    var button = $(el);
    var id = button.attr('id').replace('_button', '');
    var att_id = button.next().val();

    if (custom_uploader) {
        custom_uploader.open();
        return;
    }
    //Extend the wp.media object
    custom_uploader = wp.media.frames.file_frame = wp.media({
        title: 'Выберите картинку из библиотеки или загрузите новую',
        library : {
            type : 'image',
        },
        button: {
            text: $(this).data( 'uploader_button_text' )
        },
        multiple: false,
        editing:   false


    });
    custom_uploader.on('select', function() {

        selection = custom_uploader.state().get('selection');
        if ( ! selection )
            return;

        selection.each( function( attachment ) {
            var src = attachment.attributes.sizes.full.url;
            var src_m = attachment.attributes.sizes.medium.url;
            var id = attachment.id;
            var alt = attachment.attributes.alt;
            var height = attachment.attributes.sizes.medium.height;
            var width = attachment.attributes.sizes.medium.width;

            $(button).parent().find('p').html('<img src="'+src_m+'" height="235" width="325">');
            $(button).next().attr('value',id);
            $(button).hide();
            $(button).parent().find('span').html('Изменить фотографию');

        });

    });
    custom_uploader.on('open',function() {

        var selection = custom_uploader.state().get('selection');
        var selected = att_id; // the id of the image
        if (selected) {
            selection.add(wp.media.attachment(selected));
        }
    });
    custom_uploader.open();

}


functions.php

add_action('wp_enqueue_scripts', '263459_enqueue_main_script');
function 263459_enqueue_main_script() {
if(is_page('add-gallery-page-name')){
        wp_enqueue_media();
}
}
/*
 * Отображаем посты и картинки только для текущего пользователя
 */

add_action('pre_get_posts', 'query_set_only_author' );
function query_set_only_author( $wp_query ) {
    global $current_user;
    if( is_admin() && !current_user_can('edit_others_posts') ) {
        $wp_query->set( 'author', $current_user->ID );
        add_filter('views_edit-post', 'fix_post_counts');
        add_filter('views_upload', 'fix_media_counts');
    }
}

// Корректируем подсчет постов
function fix_post_counts($views) {
    global $current_user, $wp_query;
    unset($views['mine']);
    $types = array(
        array( 'status' =>  NULL ),
        array( 'status' => 'publish' ),
        array( 'status' => 'draft' ),
        array( 'status' => 'pending' ),
        array( 'status' => 'trash' )
    );
    foreach( $types as $type ) {
        $query = array(
            'author'      => $current_user->ID,
            'post_type'   => 'recipe',
            'post_status' => $type['status']
        );
        $result = new WP_Query($query);
        if( $type['status'] == NULL ):
            $class = ($wp_query->query_vars['post_status'] == NULL) ? ' class="current"' : '';
            $views['all'] = sprintf(
                '<a href="%1$s"%2$s>%4$s <span class="count">(%3$d)</span></a>',
                admin_url('edit.php?post_type=recipe'),
                $class,
                $result->found_posts,
                __('All')
            );
        elseif( $type['status'] == 'publish' ):
            $class = ($wp_query->query_vars['post_status'] == 'publish') ? ' class="current"' : '';
            $views['publish'] = sprintf(
                '<a href="%1$s"%2$s>%4$s <span class="count">(%3$d)</span></a>',
                admin_url('edit.php?post_type=recipe'),
                $class,
                $result->found_posts,
                __('Publish')
            );
        elseif( $type['status'] == 'draft' ):
            $class = ($wp_query->query_vars['post_status'] == 'draft') ? ' class="current"' : '';
            $views['draft'] = sprintf(
                '<a href="%1$s"%2$s>%4$s <span class="count">(%3$d)</span></a>',
                admin_url('edit.php?post_type=recipe'),
                $class,
                $result->found_posts,
                __('Draft')
            );
        elseif( $type['status'] == 'pending' ):
            $class = ($wp_query->query_vars['post_status'] == 'pending') ? ' class="current"' : '';
            $views['pending'] = sprintf(
                '<a href="%1$s"%2$s>%4$s <span class="count">(%3$d)</span></a>',
                admin_url('edit.php?post_type=recipe'),
                $class,
                $result->found_posts,
                __('Pending')
            );
        elseif( $type['status'] == 'trash' ):
            $class = ($wp_query->query_vars['post_status'] == 'trash') ? ' class="current"' : '';
            $views['trash'] = sprintf(
                '<a href="%1$s"%2$s>%4$s <span class="count">(%3$d)</span></a>',
                admin_url('edit.php?post_type=recipe'),
                $class,
                $result->found_posts,
                __('Trash')
            );
        endif;
    }
    return $views;
}

// Корректируем подсчет элементов галерени
function fix_media_counts($views) {
    global $wpdb, $current_user, $post_mime_types, $avail_post_mime_types;
    $views = array();
    $count = $wpdb->get_results( "
        SELECT post_mime_type, COUNT( * ) AS num_posts
        FROM $wpdb->posts
        WHERE post_type = 'attachment'
        AND post_author = $current_user->ID
        AND post_status != 'trash'
        GROUP BY post_mime_type
    ", ARRAY_A );
    foreach( $count as $row )
        $_num_posts[$row['post_mime_type']] = $row['num_posts'];
    $_total_posts = array_sum($_num_posts);
    $detached = isset( $_REQUEST['detached'] ) || isset( $_REQUEST['find_detached'] );
    if ( !isset( $total_orphans ) )
        $total_orphans = $wpdb->get_var("
            SELECT COUNT( * )
            FROM $wpdb->posts
            WHERE post_type = 'attachment'
            AND post_author = $current_user->ID
            AND post_status != 'trash'
            AND post_parent < 1
        ");
    $matches = wp_match_mime_types(array_keys($post_mime_types), array_keys($_num_posts));
    foreach ( $matches as $type => $reals )
        foreach ( $reals as $real )
            $num_posts[$type] = ( isset( $num_posts[$type] ) ) ? $num_posts[$type] + $_num_posts[$real] : $_num_posts[$real];
    $class = ( empty($_GET['post_mime_type']) && !$detached && !isset($_GET['status']) ) ? ' class="current"' : '';
    $views['all'] = "<a href='upload.php'$class>" . sprintf( __('All <span class="count">(%s)</span>', 'uploaded files' ), number_format_i18n( $_total_posts )) . '</a>';
    foreach ( $post_mime_types as $mime_type => $label ) {
        $class = '';
        if ( !wp_match_mime_types($mime_type, $avail_post_mime_types) )
            continue;
        if ( !empty($_GET['post_mime_type']) && wp_match_mime_types($mime_type, $_GET['post_mime_type']) )
            $class = ' class="current"';
        if ( !empty( $num_posts[$mime_type] ) )
            $views[$mime_type] = "<a href='upload.php?post_mime_type=$mime_type'$class>" . sprintf( translate_nooped_plural( $label[2], $num_posts[$mime_type] ), $num_posts[$mime_type] ) . '</a>';
    }
    $views['detached'] = '<a href="upload.php?detached=1"' . ( $detached ? ' class="current"' : '' ) . '>' . sprintf( __( 'Unattached <span class="count">(%s)</span>', 'detached files' ), $total_orphans ) . '</a>';
    return $views;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы