Ответы пользователя по тегу WordPress
  • Как добиться правильного чпу?

    Slams
    @Slams
    Не заморачивайтесь с ЧПУ, главное, чтобы в архивах и хлебных крошках иерархия была понятна.

    Потом вдруг придется изменить структуру директории, а вы окажетесь привязаны к урлам и придется заморачиваться с 301-ми редиректами.
    Ответ написан
    Комментировать
  • Как в шаблоне wordpress убрать сверху css и js?

    Slams
    @Slams
    Поставьте плагин Autoptimize https://ru.wordpress.org/plugins/autoptimize/
    Собирает в кучу скрипты и стили, может стили загружать inline или в футере с подгрузкой critical стилей inline.

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

    В общем, там хорошая документация, разберетесь :)
    Ответ написан
    Комментировать
  • Wordpress не отправляет почту - где что править и куда рыть?

    Slams
    @Slams
    SELinux может блокировать доступ к почтовику. Решается выполнением команды:

    setsebool -P httpd_can_sendmail=1
    Ответ написан
    Комментировать
  • Как в 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;
    }
    Ответ написан
    Комментировать
  • Вирус на сайте, как полностью убрать?

    Slams
    @Slams
    Скорее всего на сайте установлен nulled версия какого-то плагина. Посмотрите на наличие картинок большого размера в папке с таким плагином, вот как раз в них может быть шелл.

    Если хостинг VPS, то скорее всего зловред уже добавил ключи для доступа к хостингу по SSH, так что может даже смена паролей не поможет.
    Ответ написан
    Комментировать
  • Как выбрать хостинг?

    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
    Ответ написан
    Комментировать
  • Оптимизация Nginx для сайта на Wordpress?

    Slams
    @Slams
    Еще поставьте APC кешер и кешируйте с помощью плагина em object cache. Также кешируйте виджеты widget output cache.

    Я на шаред хостинге за 500 рублей под новый год и 80к без проблем держал и никакого статического кеширования.
    Ответ написан
    Комментировать
  • Как в Wordpress создать страницу для результатов фильтра по терминам таксономии?

    Slams
    @Slams
    Если подходит платный софт, то вот есть отличный плагин. Походу, аналогов нормальных я пока еще не находил.
    Ответ написан
    Комментировать
  • Как украсть тему для Wordpress?

    Slams
    @Slams
    Гуглите, большинство тем с земефореста, правда чуть более старых версий, есть на всяких сайтах. скриптмафия, nulled.cc и т.д.. Самый раз, чтобы ознакомится и если подойдет - купить. В нуллед версиях может быть зашит вредоносный код, поэтому - на локалке тестируйте.
    Ответ написан
    Комментировать
  • Что выбрать wordpress или joomla?

    Slams
    @Slams
    KyIIpyM А Вы поставьте на тестовом сервере и то и то, и попробуйте минимально решить свою задачу. Сразу поймете, какая CMS удобней.
    Лично я примкну к полку Wordpress, так как легкий в освоении и администрировании, очень быстро работает при правильно настроенном кешировании, SEO дружелюбен, что очень важно, куча плагинов, тем, гайдов, советов.. в общем, хороший движок. Да и количество специалистов на рынке большое - дешевле обойдется разработка и поддержка.
    В свое время ставил Joomla - это нечто ужасное, по моему мнению. Проблемы с обновлениями, производительностью, с СЕО, да и вообще в ней разобраться - убиться можно.
    Нескольким работающим проектам помогал фиксить баги с темами и т.д. и зарекся когда либо вообще прикасаться к этой CMS.
    Ответ написан
    Комментировать
  • Определить источник нагрузки на сервер?

    Slams
    @Slams
    Самый простой способ - изменить хостинг. Есть хостинги на ссд, которые не ограничивают Ваши ресурсы. При такой посещаемости, говорить о какой-то нагрузке - смешно.

    Хотя, можно пойти следующим путем - начать кешировать запросы к базе и использовать объектное кеширование. Поставьте em object cache плагин, а также APC menu object cache. Включите обязательно apc.so в настройках php.
    Ответ написан
    Комментировать
  • Как в Wordpress выводить в посте определенные мета?

    Slams
    @Slams
    Сначала изучаете, как работает эта функция codex.wordpress.org/Function_Reference/get_post_meta
    Получаете с помощью нее нужную инфу и выводите через echo.
    Ответ написан
    Комментировать
  • Оптимизация Wordpress на centos 6?

    Slams
    @Slams
    Вы бы как-то детально расписали, что установлено на Вашем сервере, а то не совсем понятно, где собака зарыта. Если wordpress крутится на голом апаче - значит тут бяда.
    Ответ написан
    Комментировать
  • На WordPress переделать Несколько пунктов?

    Slams
    @Slams
    Возможно сделать, только непонятно:
    3. На остальных страницах (widget-area) Белый блок должен работать как текстовый блок с возможнастью редактирования текста.


    За 70-80 usd можно сделать. Правда, пункт пока не понятен еще.
    Ответ написан
    Комментировать
  • Как настроить Wordpress для правильной индексации в Яндексе?

    Slams
    @Slams
    Во первых, сделайте нормальную карту сайта, используя плагины. Чтобы поисковые системы видели, что индексировать.

    Во вторых, какая логика запрещать *?" ?

    В третьих, с ?p=1111 делается 301-ый редирект уже на настроенное ЧПУ. В таком случае, рано или поздно, Яндекс проиндексирует нормальные линки.
    Ответ написан
    Комментировать
  • Как реализовать региональные поддомены на Wordpress?

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

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

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

    Slams
    @Slams
    1) Я у этих ребят проект под Wordpress держу на шареде. Трафик на пиках был 70к - выдерживает на ура. Хорошее оборудование и грамотно настроено.
    Сервера по ссылке вполне подходят для начала, а дальше, смотрите где слабое место.

    Обычно, для Wordpress, а тем более MU версии нужен приличный объем памяти, я начинал бы с 8гб, но тут все зависит от Вашей аудитории, количества просмотров за минуту и т.д.

    2) Собственно, ссылку уже дал. Сколько не кочевал по хостингам, на этом без пару месяцев 2 года.

    3) Обратитесь обязательно за помощью к их системному администратору, пусть сделает Вам настройку под Wordpress. APC, Memcached. Обязательно и настроить в Wordpress кэширование: Batchcache, Em Object Cache, Widget & Menu Output Cache.
    Правильно закешированный Wordpress - залог его быстрой работы и
    Ответ написан
    Комментировать
  • Как добавить картинку в media library в Вордпрессе через URL?

    Slams
    @Slams
    Объясните внятно, что имеется в виду "как в тело поста, через URL"?
    Это означает, что картинка по внешнему урлу или что просто тамб должен в середине поста выводится? В общем, вопрос не понятен.
    Ответ написан
    Комментировать
  • Как авторизовать пользователя на сайте с Wordpress?

    Slams
    @Slams
    Задам логичный вопрос: а почему не подходят встроенные функции? Или какой-то бридж делаете?
    Ответ написан
  • Почему так тупит админка Wordpress?

    Slams
    @Slams
    + поставьте Em object cache, как кеширущий плагин.
    Ответ написан
    Комментировать