• Стоит ли уходить с разработки WordPress?

    OtshelnikFm
    @OtshelnikFm Куратор тега WordPress
    Обо мне расскажет yawncato.com
    Уходите.

    А вообще как один этап развития в фрилансе (в частности в вордпресс) - это уход от фриланса как такового в сторону пассивного дохода: блогеры, курсы, менторство, премиум решения (уход на энвато, кодеселлер в рунете).
    Уход вообще из рунета. Но скиллы вы понимаете какие там должны быть?

    Ну или развитие своей площадки - многие авторы не продают на чужих площадках свои решения, а делают это через свои сайты. Но тут придется решить множество вопросов:
    - это ИП или иное оформление. Но выйти из тени придется.
    - прием платежей на своем сайте
    - создание своей ТП
    - магазина
    - решить вопрос с лецинзированием и ключами для своих премиум решений (защищать придется вам), их обновлением
    - продумать систему продаж. Маркетинг.

    Мне не интересен фриланс как таковой, а вот разрабатывать премиум решения - это удовольствие. Конечно еще работы много предстоит - но я думаю это хорошее направление. Тут ты сам себе заказчик.

    В фрилансе перегорают почему? Потому что надо искать заказ, снова общаться с заказчиками (жрать хочется - поэтому многие за сложных клиентов борются) узнавая т.з. (а иногда выбивая т.з.) - это психологически сложно. Это иногда долго по времени и вот только потом начинаешь работать. Хорошо если проект не стандартный, а если типовой сайт/магазин/элементор (материться нельзя) - это тоска. И ты понимаешь что живешь день за днем как в дне сурка. Дне. Дно... Всё - мотивация ушла, депрессняк.

    Поэтому бросайте заниматься ерундой - и если скиллы есть - ищите уникальную нишу. Рынок переполнен типовыми исполнителями - докажите что вы круче. А для этого вы должны выделяться и в вас должно быть что-то что выделяет вас выгодно от других.
    Ответ написан
    3 комментария
  • С JQuery на чистый Javascript код?

    @bro-dev0
    JQuery это не js для нубов, это инструмент позволяющий не думать о кроссбраузерности. Даже зная как всё устроено, все равно лучше юзайте готовые либы, в общем случае $(document).on() работает предсказуемие чем addEventListener
    Ответ написан
    Комментировать
  • Как сделать AJAX запрос безопасным?

    @dady_KK
    PM
    CSRF - почитайте про это, именно этот тип атак Вы описали в вопросе, для защиты используют обычно уникальные токены, которые рандомно меняются при каждом посещении (каждом просмотре страницы) и проверяются бекендом (совпал токен или нет). Таким образом чтобы запрос был успешно обработан в форме должен быть правильный токен для этого конкретного посещения
    Ответ написан
    4 комментария
  • Как сделать 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 комментария
  • Не могу получить заказ на бирже?

    angrySCV
    @angrySCV
    machine learning, programming, startuping
    потребность рынка растет еще больше, просто вы выбрали очень конкурентный, низкоквалифицированный сегмент с низким уровнем входа, начните заниматься разработкой для ЭПЛ ватч например, или там какой-нибудь автоматизацию на ардуино, сегментов становится все больше и больше с каждым днем, а также ниш. Не стоит замыкаться, тот сегмент который вы выбрали, очевидно загибается, оставьте его школьникам или индусам, идите дальше, повышайте качество, беритесь за более сложные проекты, на них всегда будет спрос.
    Ответ написан
    Комментировать
  • Какое тестовое задание junior php дают на собеседовании?

    toxicmt
    @toxicmt
    CTO at hexlet.io
    Я собираю тестовые задания разных компаний в этом репозитории https://github.com/Hexlet/ru-test-assignments
    Ответ написан
    1 комментарий
  • Что делать веб разработчику, если уже всё придумано?

    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 комментария
  • Как в комбобоксе формы убрать один из элементов?

    e_svirsky
    @e_svirsky
    Web Developer
    Передавайте в createForm параметр $options с текущей категорией. А уже внутри формы он будет доступен, сделайте проверку в queryBuilder-е.
    https://stackoverflow.com/questions/34027711/passi...
    Ответ написан
    Комментировать
  • Как в комбобоксе формы убрать один из элементов?

    Austin_Powers
    @Austin_Powers
    Web developer (Symfony, Go, Vue.js)
    Попробуйте в форме:
    $entity = $builder->getData();

    QueryBuilder:
    'query_builder' => function(EntityRepository $er) use ($entity) {
                        return $er->createQueryBuilder('c')
                            ->where('c.parent != :category')
                            ->setParameter('category', $entity);
    Ответ написан
    1 комментарий
  • Почему не запускается firefox?

    dronov_dmitry
    @dronov_dmitry
    Архитектор, BIM, Python
    Кстати...
    Благодаря Александру Виткалову
    Определил почему именно Аваст блокирует файфокс.
    В моём случае виной всему оказался плагин MusigSig vkontakte
    Когда его отключил - файрфокс и аваст задружили
    Ответ написан
    Комментировать
  • PHP7 и foreach. Коварное изменение?

    65536
    @65536
    в общем то и раньше не стоило менять массив из форыча по нему
    Ответ написан
    5 комментариев
  • Как узнать, что адресат открыл письмо?

    WarGot
    @WarGot
    Пиксель от Google Analytics в письме
    siliconrus.com/2015/02/ga-email-tracking
    Ответ написан
    Комментировать
  • Какой движок выучить для фриланса?

    nazarpc
    @nazarpc
    Open Source enthusiast
    1) Посмотрите на биржах фриланса чего просят (правда логично?)
    2) Введите в поиске тостера CMS, посмотрите первых 10 ответов, отсортируйте названия упоминаемых движков по количеству упоминаний (правда элементарно?)

    Будьте хоть минимально самостоятельными, надоели дебильные вопросы каждый день.
    Ответ написан
    Комментировать
  • Почему mail.ru не отображает бэкграунд тела письма?

    y0u
    @y0u
    dev
    Ответ написан
    Комментировать
  • Как улучшить регулярное выражение?

    He11ion
    @He11ion
    PHP-monkey
    $str = ".class li.class .class.class div.class2.class3 .class3.class4.class5";
    $result = preg_replace("/(?<=\\.)([^\\.\\s]*)(\\.)/", "$1,$2", $str);

    Так, наверное.
    Ответ написан
    Комментировать
  • Счетчик цифр с интервалом в 5 секунд на JQUERY?

    @IceJOKER
    Web/Android developer
    setInterval и localStorage вам в помощь.
    Сначала проверяете есть ли в storage циферки, если есть, то их увеличиваем (и естественно не забываем сохранять в storage), иначе с 1000 увеличиваем.
    Ответ написан
    1 комментарий