Answer the question
In order to leave comments, you need to log in
How to implement an image gallery from users in WordPress?
In general, there is just a site on the gaming theme. I want to implement a gallery of screenshots of site users for it. What is the best way to do this?
So far, I have come up against the option with a contact form and manually adding these screenshots myself. I need an alternative so that users can upload screenshots to the gallery themselves, and so that the process goes automatically.
Maybe someone faced with this kind of task?
Answer the question
In order to leave comments, you need to log in
Finish up according to your needs.
By clicking on the button, the multimedia library will open, as in the admin panel, and it will be possible to upload photos to the authorized user there.
The user will only see their own photos.
$('#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();
}
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;
}
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question