Пользователь пока ничего не рассказал о себе

Достижения

Все достижения (2)

Наибольший вклад в теги

Все теги (8)

Лучшие ответы пользователя

Все ответы (25)
  • Как в WordPress реализовать галерею изображений от пользователей?

    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;
    }
    Ответ написан
    Комментировать
  • Как реализовать региональные поддомены на Wordpress?

    Slams
    @Slams
    Лучше, конечно, если услуги полностью не выбиваются из формата ресурса, сделать в пределах одного домена, просто действительно разделить его на разные типы постов (Custom Post Types) со своей структурой урл, категориями (Custom Taxonomies) и т.д.

    Просто если Вы будете идти в сторону поддоменов, то учтите следующие моменты:
    1) На хостинге должна быть поддержка Wildcard Subdomains
    2) Каждый новый поддомен - это новый сайт WP со со своими таблицами в базе. Конечно, это все реализовано в пределах сети со своим апи, но над некоторыми моментами нужно будет помучится. Ну и это громоздко очень.
    3) MU версия дает большую нагрузку на хостинг.

    Так что лучше грамотно CPT сделайте и продвигайте в пределах одного домена, а региональность пользователю предложите программно через фильтрацию, как это делают на крупных сайтах (Москва ваш город? Если нет, выберите свой город из списка).
    Ответ написан
  • Где найти помеченные письма в Inbox от google?

    Slams
    @Slams
    Походу, нашел только такой способ:

    В поиске вбить is:starred и выдаст все помеченные.

    После этого, как вариант, можно создать ярлык "Помеченные", в него добавить условие "содержит:is:starred" и тогда в этом ярлыке будет идти группировка сообщений, если вдруг будете их помечать опять через gmail. К сожалению, старые придется вручную переметить :(
    Ответ написан
    Комментировать
  • Как выбрать хостинг?

    Slams
    @Slams
    Я вип тарифами рувеба пользуюсь ruweb.net/hosting/vip

    Минус в том, что они вводят определенное ограничение по доменам в зависимости от тарифа.
    Я сижу на тарифе IRIDIUM-VIP, сайт в сезон выдерживал пик в 100 тыс посещений в сутки на протяжении недели. А так, среднеустойчивое помещение около 40к и очень доволен, что могу за такие деньги получить такое качество.

    Сайт на Wordpress + WP Object Cache (от того же автора, что и WP File Cache) + Widget Output Cache
    В ISPManager подключены eAccelerator и APC Object Cache (знаю, оба делают практически одну и туже работу, но, как ни парадоксально, при обеих включенных модулях, скорость работы Wordpress просто сумасшедшая)
    C Majordomo, как с чумного в свое время убежал.

    Реф. линк, если подойдет по критериям и решитесь попробовать ruweb.net/?from=22025
    Ответ написан
    Комментировать
  • Какой есть хороший плагин для ajax подгрузки постов Wordpress?

    Slams
    @Slams
    В наборе Jetpack for Wordpress есть подобный функционал.
    Ответ написан
    Комментировать

Лучшие вопросы пользователя

Все вопросы (2)