• Какой видеокурс по основам WordPress действительно стоит изучить?

    maksym1991
    @maksym1991
    WordPress adept
    Этот хорош, автор пишет все без плагинов, дает понимание как все работает -
    https://www.youtube.com/watch?v=ViZLtFIcSfo&list=P...
    Ответ написан
    4 комментария
  • Почему Дата в статье Wordpress с ссылкой?

    maksym1991
    @maksym1991
    WordPress adept
    Зайдите в шаблон поста single.php и удалите ссылку, если хотите.
    Ответ написан
    2 комментария
  • Как добавить пункт в меню через API WP?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    Смотри функцию wp_update_nav_menu_item() . Позволяет создать или обновить пункт меню.
    Ответ написан
    1 комментарий
  • WordPress "out of memory" ошибка при добавлении простого кода в functions.php файле?

    wp_enqueue_scripts
    У вас рекурсия.
    В функции wp_enqueue_scripts замените на wp_enqueue_script
    Ответ написан
    1 комментарий
  • Чат для Wordpress?

    OtshelnikFm
    @OtshelnikFm Куратор тега WordPress
    Обо мне расскажет yawncato.com
    Посмотри чат от плагина WP-Recall (доп идет в составе плагина). Создается шорткодами https://codeseller.ru/api-rcl/rcl-chat/
    Ответ написан
    4 комментария
  • Как правильно написать цикл постов wordpress?

    deniscopro
    @deniscopro Куратор тега WordPress
    WordPress-разработчик, denisco.pro
    может есть еще какие то варианты реализации?чтобы можно было в цикле вордпресса вывести все

    Самое простое, что приходит в голову — добавить флаг и его переключать. Что-то типа:
    <?php $args = array(
      'post_type' => 'glavnaya',
      'posts_per_page' => -1
    );
    $glavnaya= new WP_Query( $args  );
    
    ?>
    
    <?php $flag = true; if( $glavnaya->have_posts() ) : while ( $glavnaya->have_posts() ) : $glavnaya->the_post(); ?>
    <?php if($flag) : ?>
    Блок с картинкой после текст
    <?php else : ?>
    Блок с картинкой перед текстом
    <?php endif; ?>
    <?php $flag = !$flag; endwhile; else: ?>
      <h3>Записей нет</h3>
    <?php endif; ?>
    Ответ написан
    1 комментарий
  • Почему упал сайт из-за сканирования на вирусы?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Вы сами ответили на свой вопрос:
    когда я просканила сайт на вирусы плагином Anti-Malware, он выдал мне зараженные файлы, Я ИХ УДАЛИЛА в карантин, и открываю сайт, и бац - все ссылки на сайте не работают и не меняется цвет кнопок


    Вы проасто удалили нужные рнр файлы сайта (ядра ВП, темы или плагина). Попробуйте сделать по другому. Залейте сайт не сканируя его на вирусы. А только потом установите плагин Wordfence. просканируйте и избирательно уберите вредоносный код. Также проверьте БД и functions.php на наличие вредоносного кода
    Ответ написан
    1 комментарий
  • Почему не работает git push?

    судя по всему, коммит ты так и не сделал
    Ответ написан
  • После обновления chrome стал перенаправлять домены apache на https протокол?

    kumaxim
    @kumaxim
    Web-программист
    Столкнулся к этой же проблемой, после того как с утра набрал apt update && apt -y full-upgrade

    Мое девелоперское окружение развернуло на Docker-контейнерах, т.е. в одном у меня работает MySQL, во втором nginx, в третьем php-fpm. Для доступа из хостовой ОС к контейнеру я использовал домен host.dev. После обновления Google Chrome до версии 63.0.3239.84 (Official Build) (64-bit), дата 07-12-2017 мой девелоперский домен перестал работать, причем только в Хроме. В Firefox все ОК

    Начал копать. Первое на что наткнулся это пост на Stackoverflow Google Chrome redirecting localhost to https. Ответ от BigJump, отмеченный решением не наш случай, однако, меня зацепила его заметка про HSTS, поэтому на всякий случай в свой конфиг nginx я добавил следующее:

    server {
        add_header Strict-Transport-Security "max-age=0;";
        ...........
    }


    Листаю немного ниже, этот же самый вопрос и вижу замечательный ответ от rafawhs. Оказывается, зона .devявляется новым gTLD доменом, который теперь принадлежит Google. Вот это и является корнем. Google Chrome - браузер от гугла, в который они добавили ограничение ERR_ICANN_NAME_COLLISION, из-за которого никакой домен имеющий зону .dev с моего локального сервера теперь работать не будет. Остальные браузеры, в частности FireFox пока, по всей видимости, еще не подтянулось, впрочем, я думаю, что это только вопрос времени.

    На момент написания этой статьи эта проблема встречается только в Google Chrome с версии 63.0.3239.84. У меня на нетбуке стоял Chrome 61 версии, там ограничение ERR_ICANN_NAME_COLLISION на домены .dev с локального сервера отсутствует.

    Проблему я решил просто, открыв /etc/hosts и изменил host.dev на host.ld, который в данный момент gTLD зоной не является. Поправил доменное имя в настройках приложения и теперь у меня снова все работает.
    Ответ написан
    2 комментария
  • Как настроить git на phpstorm?

    zorro76
    @zorro76
    1) установить git в систему(пример на Ubuntu):
    $ sudo apt update

    $ sudo apt install git


    2) настроить git на IDE
    указав путь к git
    в результате вот так и все работает:
    03b53f5f6c2241989da31248ecc2c1bb.png
    а далее уже git clone с нужного репозитория
    Ответ написан
    Комментировать
  • Как сделать AJAX запрос безопасным?

    @cluberr
    Защита: используем nonce и проверяем права

    Нет острой необходимости проверять AJAX запрос, если он потенциально не опасный. Например, когда он просто получает какие-то данные. Но когда запрос удаляет или обновляет данные, то его просто необходимо дополнительно защитить с помощью nonce кода и проверкой прав доступа.

    Разработчики часто ленятся ставить такую защиту, получая самый неожиданный результат. Недобросовестные пользователи могут каким-либо образом заставить юзера с правами сделать то что им нужно и в итоге навредить сайту над которым вы работали долгие месяцы, годы.

    Существует два вида защиты, которые нужно использовать в AJAX запросах в большинстве случаев.

    1. Код nonce (случайный код)

    Nonce - это уникальная строка, которая создается и используется один раз - одноразовое число. Nonce проверка используется, когда нужно убедится, что запрос был послан с указанного «места».

    В WordPress есть функции wp_create_nonce() и check_ajax_referer() - это базовые функции для создания и последующей проверки nonce кода. С их помощью мы и будем создавать защиту nonce для AJAX запросов.

    Для начала создадим nonce код:

    add_action( 'wp_enqueue_scripts', 'myajax_data', 99 );
    function myajax_data(){
    
    	wp_localize_script('twentyfifteen-script', 'myajax', 
    		array(
    			'url' => admin_url('admin-ajax.php'),
    			'nonce' => wp_create_nonce('myajax-nonce')
    		)
    	);  
    
    }

    twentyfifteen-script это название основного скрипта темы (см. выше), который подключается на сайте с помощью wp_enqueue_script().

    Затем, в AJAX запросе добавим переменную с кодом nonce:

    var ajaxdata = {
    	action     : 'myajax-submit',
    	nonce_code : myajax.nonce
    };
    jQuery.post( myajax.url, ajaxdata, function( response ) {
    	alert( response );
    });

    Теперь, в обработке заброса необходимо проверить nonce код:

    add_action( 'wp_ajax_nopriv_myajax-submit', 'myajax_submit' );
    add_action( 'wp_ajax_myajax-submit', 'myajax_submit' );
    function myajax_submit(){
    	// проверяем nonce код, если проверка не пройдена прерываем обработку
    	check_ajax_referer( 'myajax-nonce', 'nonce_code' );
    	// или так
    	if( ! wp_verify_nonce( $_POST['nonce_code'], 'myajax-nonce' ) ) die( 'Stop!');
    
    	// обрабатываем данные и возвращаем
    	echo 'Возвращаемые данные';
    
    	// не забываем завершать PHP
    	wp_die();
    }

    check_ajax_referer()работает на основе функции wp_verify_nonce() и по сути является её оберткой для AJAX запросов.
    Обратите внимание, что в данном случае Nonce код создается в HTML коде. А это значит, если у вас установлен плагин страничного кэширования, то этот код может и наверняка будет устаревать к моменту очередного AJAX запроса.
    2. Проверка прав доступа

    Тут AJAX запросы будут срабатывать только для пользователей с правом author. Для всех остальных включая неавторизованных пользователей, AJAX запрос вернет ошибку.

    Особенность тут в том, что не авторизованные пользователи тоже должны видеть сообщение об ошибке при AJAX запросе. Для этого нужно обрабатывать запрос для них возвратом ошибки:

    add_action( 'wp_ajax_nopriv_myajax-submit', 'myajax_submit' );
    add_action( 'wp_ajax_myajax-submit', 'myajax_submit' );
    function myajax_submit(){
    	// проверяем nonce код, если проверка не пройдена прерываем обработку
    	check_ajax_referer( 'myajax-nonce', 'nonce_code' );
    
    	// текущий пользователь имеет права автора или выше
    	if( ! current_user_can('publish_posts') )
    		die('Этот запрос доступен пользователям с правом автора или выше.')
    
    	// Делаем что нужно и выводим данные на экран, чтобы вернуть их скрипту
    
    	// Не забываем выходить
    	wp_die();
    }
    Ответ написан
    2 комментария
  • Как очистить кеш url редиректов?

    @inkvizitor68sl
    Linux-сисадмин с 8 летним стажем.
    ctrl-shift-n в хром(иум)е, ctrl-shift-b в ff.
    Ответ написан
    Комментировать
  • Зачем нужен sourcemap?

    @lemme
    Frontend
    Вот представь, собрал ты 10 файлов в 1 бандл, потом минифицировал, а как дебажить эту лапшу?

    На помощь приходит sourcemaps, который будет показывать реальную структуру файлов и.т.д
    Ответ написан
    2 комментария
  • Почему многие ругаются на flex и float? Что в таком случае использовать?

    Встречаю много

    Да, в интернетах много чего встречается.
    Если бы эти "статьи" не были полное давно, вы бы не задали здесь этот вопрос.
    Знаете, почему?
    Потому что в нормальных источниках было бы написано
    1. Не юзайте то, потому что ....
    2. Юзайте вместо того это.
    В хороших статьях ещё и будут описаны плюсы и минусы как того, так и этого.
    Ответ написан
    Комментировать
  • Что делать веб разработчику, если уже всё придумано?

    bingo347
    @bingo347
    Crazy on performance...
    Пока не возникнет потребности в чем-то - не появится и идеи. Делать что-либо ради того, чтобы сделать - результаты будут плачевными, хотя бы потому, что Вы даже не представляете себе потребности ожидаемые от продукта, который Вы делаете.
    Пример. Все мои пакеты на npm возникли из-за того, что я не нашел того, что хорошо бы решало мою задачу, далее делался велосипед, далее приходило понимание, что этот велосипед нужен где-то еще, в итоге я создаю пакет, npm publish и... блин, а мой велосипед полезен кому-то еще
    Ответ написан
    Комментировать
  • Что делать веб разработчику, если уже всё придумано?

    AgentProvocateur
    @AgentProvocateur
    Правильно заметили, что есть люди-исполнители, а есть люди-генераторы идей. Нужно реально взглянуть на себя и...принять это. Быть профессиональным исполнителем гораздо кошернее, чем быть генератором провальных идей. По статистике, 9 из 10 стартапов провальны...зачем пополнять собой этот список? Если ты - рыба, то многого ли ты добьешься от фрустрации по поводу неумения залезать на дерево?

    Самый верный путь к рабочей идее:
    1. Проработать в какой-либо сфере достаточное количество времени;
    2. Познать её изнутри на собственной шкуре;
    3. Выявить в ней боли/проблемы/недостатки;
    4. Решить их с помощью прикладного навыка (программирования);
    5. Обкатать в собственной работе;
    6. Упаковать решение и реализовать коллегам по сфере;
    ...
    7. PROFIT!

    Далее...даже если завтра в голову залетит рабочая идея, готов ли ты её реализовать? У тебя есть команда, готовая работать минимум полгода-год бесплатно на время создания беты, тестов, обкатки, раскрутки? Она сможет действительно реализовать всё как надо? Если нет команды, имеются ли у тебя средства на зарплатный фонд хотя бы для 5 человек на эти полгода-год? А с учетом налогов и отчислений (+30% к зарплате на руки)? У тебя есть условия для работы этих 5 человек? Есть ли у тебя сумма на маркетинговое исследование твоей идеи (или лучше облажаться на авось)? Есть ли у тебя хотя бы миллион на первичный трафик из директа? Или надеешься донести свой стартап до пользователей путём емэйл-спама?)) Я не указал и доли того, что потребуется для реализации небольшого web-сервиса, даже при наличии действительно рабочей идеи. Может быть, идеи не прут именно потому, что ты просто не готов к их реализации, и неча порожняка гонять?)

    Как выглядит стартап глазами романтичного юноши, начитавшегося глянцевых историй успеха:
    1. Придумать гениальную идею;
    2. Закодить в гараже в одну харю или в паре с дружбаном;
    3. Разместить на сервере и получать от мира благодарности, признание и мешки денег.

    Как выглядит стартап на самом деле:
    1. Пахота минимум 10 лет в одном направлении/сфере;
    2. Наработка профессионализма, идей, контактов, связей, клиентской базы, понимания всех нюансов сферы;
    3. Угон базы, угон клиентов на себя, переманивание лучших коллег/сотрудников, оформление юрлица, открытие "своего дела" на рабочей идее)))

    К примеру, "икона стиля" стартаперов - Павел Дуров, он идеолог? Нет! Прикол в том, что он именно стырил рабочую идею (также, как тырят клиентскую базу у работодателя), собрал команду, создал для неё условия, привлек корешей-евреев с еврейскими ресурсами, бюджетами и влиятельной питерской крышей, и обеспечил этому всему грамотный проект-менеджмент и маркетинг. Дело в идее? Нет, дело в реализации:)

    А если серьезно, сайт - это просто промо-материал, как билборд, только интерактивный и в интернете. Языки веб-разработки - такие же инструменты, как молоток для изготовления билбордов. Веб-разработчик - нифига не носитель уникальных знаний (который просто обязан повторить успех Цукерберга, иначе не тру), и всего-лишь современный слесарь, изготавливающий технологичные интерактивные промо-материалы. А теперь представь слесаря, который завидует предпринимателям, которые заказывают у него билборды, и вскидывает руки к небу с криком "Доколе??")) Смешно? Смешнее только реплики других слесарей на тему "если нет идей, значит меняй профессию"))

    P.S. Понимаю, что вряд ли отметишь мой ответ решением, ведь тебе хочется подбадриваний вида "Не сдавайся! Ищи и обрящешь! Не опускай руки и всё получится! Вот тебе ссылочки, вот тебе инструкции!", а не режущей глаза суровой реальности. Но в некоторых случаях действительно полезно осознать своё место в пищевой цепочке - антилопа или гепард, слесарь или архитектор, промо-изготовитель или промо-заказчик и т.д. И исходя из этого уже взращивать свои амбиции, комплексы и фрустрации. Повторюсь - в стремлении стать самым крутым слесарем нет ничего постыдного, и даже в финансовом плане может оказаться куда выгоднее и стабильнее других амбициозных вариантов.
    Ответ написан
    4 комментария
  • Не отображаются категории при редактировании пользовательского типа записи. Как исправить?

    maksym1991
    @maksym1991
    WordPress adept
    Это метки(без иерархии), нужно выбрать hierarchical: true при создании таксономии
    Ответ написан
    1 комментарий
  • Как к wordpress подключить внешний js с https?

    EaGames
    @EaGames
    Front-end developer
    соответственно яндекс даст его по https и wp так его и подключит.
    но вообще ничего не мешает указать конкретно https:// wordpress на это ругаться не будет
    Ответ написан
    Комментировать
  • Как динамически изменять пути в gulp?

    @yaroslavgrishajev
    Если не ошибаюсь, то достаточно просто указать путь типа 'src/**/*.*'

    Пересмотрел вопрос :)
    Плагин gulp-rename делает то, что Вам нужно. Там в документации это описано: можно на лету поменять путь указанный в gulp.src (например заменить sass на css).

    У меня это выглядело вот так:

    var gulp = require('gulp'),
        sass = require('gulp-sass'),
        rename = require('gulp-rename');
    
    gulp.task('sass', function () {
        gulp.src('./src/**/*.scss') 
            .pipe(sass({
                includePaths: ['./src/']
            }))
            .pipe(rename(function(path){
    
                    // path.dirname = 'module-a(b)/sass' - это то, что задано в gulp.src
            	path.dirname = path.dirname.replace( "sass", "css" );
    
                    // path.dirname = 'module-a(b)/css' - а теперь мы поменяли так, как нам нужно
            	return path; 
    		  }))
            .pipe(gulp.dest('./src/')); // и тогда все сложится в src/module-a(b)/css - в нужную папку модуля
    });
    
    gulp.task('default', ['sass']);


    Но там уже как душе угодно можно плясать.
    Ответ написан