PHP Portal https://www.kobzarev.com Дайджест свежих материалов из мира веб-разработки ru 7391CC2B1408947EFD5084459F5BD0CA https://www.kobzarev.com/programming/how-to-index-new-site/ Чек-лист по первичной индексации сайта Кобзарёв Михаил Thu, 19 Mar 2020 11:57:54 +0000

Чек-лист по первичной индексации сайта

Автора! Проекты Шпаргалки Файлы Карта

Чтобы сообщить поисковым системам о вашем новом сайте, следуйте моему чек-листу и ваши проекты очень быстро появятся в индексе.

(далее…)

]]>
https://www.kobzarev.com/programming/https-is-easy/ HTTPS — это просто! Кобзарёв Михаил Thu, 20 Feb 2020 19:03:23 +0000

HTTPS — это просто!

Автора! Проекты Шпаргалки Файлы Карта

Серьёзно, это очень просто. В этой серии из четырех роликов вы познакомитесь с основами бесплатного добавления HTTPS на свой сайт при помощи Cloudflare.

(далее…)1
]]>
https://www.kobzarev.com/plugins/wp-recall/ WP-Recall — лучший плагин личных кабинетов под WordPress Кобзарёв Михаил Mon, 17 Feb 2020 20:59:25 +0000

WP-Recall — лучший плагин личных кабинетов под WordPress

Автора! Проекты Шпаргалки Файлы Карта

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

(далее…)1
]]>
https://www.kobzarev.com/wordpress/dooplay-tricks/ Доработка темы DooPlay Кобзарёв Михаил Sun, 16 Feb 2020 08:31:00 +0000

Доработка темы DooPlay

Автора! Проекты Шпаргалки Файлы Карта

Платная тема DooPlay под WordPress является лидером среди инструментов для создания сайтов видео тематики (фильмы, сериалы, ТВ шоу). Предлагаю несколько трюков по её оптимизации.

(далее…)1

Header code my friend pls?

What code do you want to see from me?

i want to edit dooplay this like site : http://www.dizimodu.com how to move sidebar right to left.

Type in your custom CSS:
.module .content {
    margin-left: 340px;
    margin-right: 0;
    float: right;
}
module .sidebar {
    float: left;
    right: auto;
    left: 0;
}

Thank you sir and header code pls?

Hello sir, i have dooplay 2.3.3 how to make this like site: http://www.dizimodu.com/ pls help me?

How can I help you?

Привет, нашел только куда вставить код с рейтингом. Подскажите, пожалуйста, куда вставлять другие?

Все сниппеты вставляются в functions.php дочерней темы, свой плагин или mu-plugins.

Спасибо! Полезная тема, надо будет опробовать 🙂

Не забудьте рассказать о результатах!
]]> https://www.kobzarev.com/browser/html5-proprietary-media-on-linux/ Проприетарное HTML5 медиа на Linux в Vivaldi Кобзарёв Михаил Fri, 14 Feb 2020 09:05:06 +0000

Проприетарное HTML5 медиа на Linux в Vivaldi

Автора! Проекты Шпаргалки Файлы Карта

Все HTML5 аудио и видео форматы, включая все медиатипы, такие как H.264 (видео) и AAC (аудио), — запатентованы.

(далее…)1
]]>
https://www.kobzarev.com/programming/call-link-html-phone-number/ Ставим правильные ссылки на телефонные номера Кобзарёв Михаил Tue, 11 Feb 2020 09:18:30 +0000

Ставим правильные ссылки на телефонные номера

Автора! Проекты Шпаргалки Файлы Карта

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

(далее…)1

А как микроразметку реализовать, если телефон выводится с помощью кнопки «Элементор»?

О какой микроразметке речь?

О такой:

<div itemscope itemtype="https://schema.org/LocalBusiness">

    <h1 itemprop="name">Рога и Копыта</h1>

    Телефон: <span itemprop="telephone"><a href="tel:+7123456890">+7 (234) 567-890</a></span>

</div>

К сожалению, из коробки нет возможности сделать подобное в Elementor.
]]> https://www.kobzarev.com/browser/material-devtools-theme-collection/ Коллекция Material тем для DevTools браузера Chrome Кобзарёв Михаил Wed, 05 Feb 2020 12:00:00 +0000

Коллекция Material тем для DevTools браузера Chrome

Автора! Проекты Шпаргалки Файлы Карта

Material DevTools Theme Collection — это расширение для браузеров на основе Chromium (Chrome, Opera, Vivaldi), которое портирует известную Material Theme для инструментов разработчика DevTools.

(далее…)1
]]>
https://www.kobzarev.com/wordpress/wp-cli-dummy-content/ Создание фиктивного контента для тестирования при помощи WP-CLI Кобзарёв Михаил Wed, 05 Feb 2020 11:07:07 +0000

Создание фиктивного контента для тестирования при помощи WP-CLI

Автора! Проекты Шпаргалки Файлы Карта

При работе над любым WordPress проектом (темой или плагином) фиктивный контент — это то, что вам, скорее всего, нужно достаточно часто.

(далее…)1
]]>
https://www.kobzarev.com/browser/vivaldi-wordpress/ Браузер Vivaldi в стиле WordPress Кобзарёв Михаил Sun, 19 Jan 2020 20:38:33 +0000

Браузер Vivaldi в стиле WordPress

Автора! Проекты Шпаргалки Файлы Карта

Если вы, как и я, являетесь фанатом тёмных тем, WordPress и браузера Vivaldi. То предлагаю сделать из нашего горячо любимого Vivaldi браузер, похожий на админку WordPress.

(далее…)1
]]>
https://www.kobzarev.com/soft/jetbrains-mono/ JetBrains Mono Кобзарёв Михаил Thu, 16 Jan 2020 15:21:25 +0000

JetBrains Mono

Автора! Проекты Шпаргалки Файлы Карта

JetBrains Mono — новый моноширный шрифт с поддержкой лигатур и русского языка для разработчиков от компании JetBrains, от которого не вытекают глаза.

(далее…)1
]]>
https://www.kobzarev.com/projects/ajax-edit-comments/ Ajax Edit Comments Кобзарёв Михаил Thu, 16 Jan 2020 09:59:50 +0000

Ajax Edit Comments

Автора! Проекты Шпаргалки Файлы Карта

Ajax Edit Comments — это плагин под WordPress, который позволяет пользователям редактировать их собственные комментарии ограниченное количество времени. Администраторы могут править любые комментарии во фронтенде.

(далее…)1

авыавы

Asd asd
]]>
https://www.kobzarev.com/linux/blackfire-local-lightning/ Установка Blackfire в Local Lightning Кобзарёв Михаил Fri, 10 Jan 2020 09:54:24 +0000

Установка Blackfire в Local Lightning

Автора! Проекты Шпаргалки Файлы Карта

Прикрутить профилировщик PHP кода Blackfire к Local Lightning не составляет особого труда, а вот профита от этого вагон и маленькая тележка.

(далее…)1

спасибо за статью! а с докером как это все подружить?)

Докер пока с Local не дружит, но попробуем пост написать)
]]>
https://www.kobzarev.com/wordpress/cleaning-db-after-wpml-removal/ Очистка базы данных WordPress после удаления WPML Кобзарёв Михаил Sun, 05 Jan 2020 17:29:01 +0000

Очистка базы данных WordPress после удаления WPML

Автора! Проекты Шпаргалки Файлы Карта

После полного удаления плагина WPML и его аддонов очень часто приходится ручками очищать базу данных WordPress от ненужных более данных.

(далее…)1
]]>
https://www.kobzarev.com/wordpress/bulletproof-css-js-clear-cache/ Автосброс кеша стилей и скриптов Кобзарёв Михаил Thu, 19 Dec 2019 21:25:37 +0000

Автосброс кеша стилей и скриптов

Автора! Проекты Шпаргалки Файлы Карта

Пуленепробиваемый сниппет под WordPress для автоматического сброса кеша стилей и скриптов путем добавления к их URL параметра с датой обновления самого этого файла.

(далее…)1
]]>
https://www.kobzarev.com/other/christmas-wordpress-templates/ Топ-5 шаблонов WordPress для Рождества Кобзарёв Михаил Mon, 16 Dec 2019 14:45:50 +0000

Топ-5 шаблонов WordPress для Рождества

Автора! Проекты Шпаргалки Файлы Карта

Как ни странно и удивительно, но зима уже началась, рождественские праздники не за горами и самое время наслаждаться шаблонами для Рождества.

(далее…)1
]]>
https://www.kobzarev.com/linux/audacity-ubuntu/ Установка Audacity в Ubuntu Кобзарёв Михаил Sun, 15 Dec 2019 12:31:22 +0000

Установка Audacity в Ubuntu

Автора! Проекты Шпаргалки Файлы Карта

Audacity — бесплатный кроссплатформенный аудио редактор с открытым исходным кодом. Работает в Windows, Mac OS X, GNU/Linux и других операционных системах. Разрабатывается группой волонтёров.

(далее…)1
]]>
https://www.kobzarev.com/wordpress/woocommerce-custom-orders-table/ Оптимизация WooCommerce путём переноса заказов в отдельную таблицу Кобзарёв Михаил Fri, 06 Dec 2019 09:12:35 +0000

Оптимизация WooCommerce путём переноса заказов в отдельную таблицу

Автора! Проекты Шпаргалки Файлы Карта

WooCommerce Custom Orders Table — простой, но полезный плагин, который улучшает производительность WooCommerce, добавляя пользовательскую таблицу с правильными индексами для хранения информации о заказах.

(далее…)1

Хочу выразить огромную благодарность разработчикам WooCommerce Custom Orders Table — у нас было 18 тысяч заказов, сайт начал дико зависать, а API вообще не отвечало. После переноса всех заказов в единую таблицу уменьшилось количество записей в БД, а поиск по заказам ускорился в разы. Планирую описать свой опыт в статье, а плагин применять в будущем.

Ждём от вас статью. Благодраности передам.
]]>
https://www.kobzarev.com/wordpress/generatepress-breadcrumbs/ Как добавить хлебные крошки в тему GeneratePress Кобзарёв Михаил Tue, 03 Dec 2019 10:05:55 +0000

Как добавить хлебные крошки в тему GeneratePress

Автора! Проекты Шпаргалки Файлы Карта

В популярной и легковесной теме GeneratePress под WordPress по умолчанию, к сожалению, нет хлебных крошек, которые полезны для сео и удобной навигации по сайту.

(далее…)1

Михаил, а как вывести например, просмотры страниц, время чтения статьи, Last update в GeneratePress в одну линию с временем публикации? Вывод через generate_after_entry_title они ниже отображаются.

А покажите что и как вы выводите? Скорее всего нужен просто CSS, типа white-space: nowrap.

Использую плагин для просмотров WP-PostViews, добавляю код <?php if(function_exists(‘the_views’)) { the_views(); } ?> в Hook generate_after_entry_title


Я бы наверное смог бы напрямую вставить код, но тема обновляется и опять придётся по новому вставлять. Я понимаю что нужен наверное CSS, но как я говорил я не спец. Написали бы пост как в теме GeneratePress красиво вывести просмотры страниц, время чтения статьи и Last update.


Сейчас многие используют данную тему, вот было бы полезно всем почитать.

Если я правильно понял, про какой блок вы говорите, то тогда допишите произвольный CSS:

.entry-meta {
    display: flex;
}
.entry-meta > * {
    padding-right: 10px;
}

Чтобы ваши изменения не терялись при обновлении темы — используйте дочернюю тему.

Это я тоже знаю.

Чего то не выводятся через Hook Element. Вот здесь — https://wpmania.ru/ Всё сделал по инструкции.


Так а плагин Breadcrumb NavXT установлен?

Всё справился.

В чём была ошибка?
В плагине Clearfy были отключены хлебные крошки от Yoast SEO.


Понятно, только не понятно зачем вам Clearfy, который отключает крошки, которые отключают я в самом Yoast. Из-за Clearfy от обоих поставщиков всегда больше проблем, чем пользы.

Это вам проблемы заметны, а нам простым пользователям нет. Не полностью отключают, а Удаляют дублирование названия статьи в хлебных крошках Yoast SEO. Сам не знаю зачем это они эти настройки сделали.

У меня Yoast SEO


]]> https://www.kobzarev.com/soft/spotify-russia/ Spotify в России Кобзарёв Михаил Mon, 25 Nov 2019 10:20:02 +0000

Spotify в России

Автора! Проекты Шпаргалки Файлы Карта

Как известно, Spotify снова отложил запуск своего сервиса на территории России. Но как быть, если хочется его скачать прямо сейчас под Ubuntu и попробовать перед тем, как платить 150 рублей за месячную подписку?

(далее…)1
]]>
https://www.kobzarev.com/wordpress/elementor-black-friday/ Чёрная пятница в Elementor Кобзарёв Михаил Mon, 25 Nov 2019 08:42:23 +0000

Чёрная пятница в Elementor

Автора! Проекты Шпаргалки Файлы Карта

Черная пятница в Elementor начата! Успейте апгрейдить существующую или купить новую лицензию со скидкой до 30% и поучаствовать в конкурсе и выиграть крутые призы!

(далее…)1
]]>
https://www.kobzarev.com/wordpress/gutenberg-themes/ Топ-10 оптимизированных шаблонов для плагина Guterberg Кобзарёв Михаил Thu, 14 Nov 2019 10:36:54 +0000

Топ-10 оптимизированных шаблонов для плагина Guterberg

Автора! Проекты Шпаргалки Файлы Карта

Дизайн сайтов имеет огромное значение, и современные разработчики это отлично понимают. Поэтому собственно регулярно появляются новые решения и совершенствуются уже известные.

(далее…)1
]]>
https://www.kobzarev.com/linux/google-chrome-ubuntu-19-10/ Как установить Google Chrome в Ubuntu 19.10 Кобзарёв Михаил Thu, 07 Nov 2019 12:39:40 +0000

Как установить Google Chrome в Ubuntu 19.10

Автора! Проекты Шпаргалки Файлы Карта

В этой короткой заметке мы научимся устанавливать браузер Google Chrome в Ubuntu 19.10 Eoan Ermine напрямую из deb-пакета, минуя установку из snap-пакета.

(далее…)1
]]>
https://www.kobzarev.com/programming/solid-principles/ Принципы SOLID Кобзарёв Михаил Tue, 05 Nov 2019 22:41:29 +0000

Принципы SOLID

Автора! Проекты Шпаргалки Файлы Карта

SOLID — мнемонический акроним, введённый Майклом Фэзерсом (Michael Feathers) для первых пяти принципов, названных Робертом Мартином в начале 2000-х, которые означали пять основных принципов объектно-ориентированного программирования и проектирования.

(далее…)1
]]>
https://www.kobzarev.com/wordpress/woocommerce-valid-permalinks/ Правильная структура ссылок WooCommerce Кобзарёв Михаил Tue, 05 Nov 2019 11:52:19 +0000

Правильная структура ссылок WooCommerce

Автора! Проекты Шпаргалки Файлы Карта

Данные манипуляции негативно сказываются на скорости работы вашего сайта, зато сеошник будет спать спокойно.

(далее…)1
]]>
https://www.kobzarev.com/wordpress/gutenberg-acf/ Создание Gutenberg блоков при помощи плагина ACF Pro Кобзарёв Михаил Thu, 31 Oct 2019 17:25:34 +0000

Создание Gutenberg блоков при помощи плагина ACF Pro

Автора! Проекты Шпаргалки Файлы Карта

Благодаря Elliot Condon, создавшему замечательный плагин Advanced Custom Fields, теперь можно за считанные минуты создавать профессиональные блоки под редактор блоков Gutenberg без знания JavaScript на чистом PHP.

(далее…)1
]]>
https://www.kobzarev.com/browser/disable-chrome-tab-hover-cards/ Отключение подсказок на вкладках Chrome 78 и выше Кобзарёв Михаил Thu, 31 Oct 2019 07:33:18 +0000

Отключение подсказок на вкладках Chrome 78 и выше

Автора! Проекты Шпаргалки Файлы Карта

Если вы обновили ваш Google Chrome до версии 78, то, наверное, сразу заметили бесячие всплывающие подсказки на табах при наведении на них мышкой, которые легко отключаются.

(далее…)1
]]>
https://www.kobzarev.com/soft/insomnia-ubuntu/ Установка Insomnia в Ubuntu Кобзарёв Михаил Thu, 17 Oct 2019 09:01:25 +0000

Установка Insomnia в Ubuntu

Автора! Проекты Шпаргалки Файлы Карта

Insomnia — очень удобный кроссплатформенный REST Client для тестирования и проектирования REST API.

(далее…)1
]]>
https://www.kobzarev.com/wordpress/woocommerce-custom-product-tables/ Оптимизация WooCommerce путём переноса товаров в отдельную таблицу Кобзарёв Михаил Wed, 16 Oct 2019 17:47:49 +0000

Оптимизация WooCommerce путём переноса товаров в отдельную таблицу

Автора! Проекты Шпаргалки Файлы Карта

Одним из самых узких мест в WooCommerce по производительности является хранение товаров и заказов в стандартной таблице записей WordPress.

(далее…)1

Планируете ли Вы объединять этот плагин с WooCommerce Custom Orders Table или даже создавать отдельный WooCommerce Bundle?

Смысла объединять нет, так как оба плагина в этом году должны быть интегрированы в ядро WooCommerce.

В ядро WooCommerce или WordPress 5.4?

Само собой WooCommerce.

А случайно не знаете, пострадают ли от этого те, кто уже использовал плагин WooCommerce Custom Orders Table? Да и вообще, будут ли предусмотрены какие-то механизмы миграции? Вообще, идея оптимизировать таблицы в БД мне нравится.

Скорее всего нет, так как это официальный плагин от самих WooCommerce.

В любом случае можно сделать откат к старому формату базы и потом обновить WooCommerce.

Следите за новостями в нашем @wordpress_digest.

]]> https://www.kobzarev.com/other/meizu-mx6-audio-vlume/ Как увеличить громкость разговорного динамика Meizu MX6 Кобзарёв Михаил Sun, 13 Oct 2019 19:42:40 +0000

Как увеличить громкость разговорного динамика Meizu MX6

Автора! Проекты Шпаргалки Файлы Карта

Если в вашем Meizu MX6 вы плохо слышите собеседника, то можно увеличить громкость разговорного динамика с помощью инженерного меню.

(далее…)1
]]>
https://www.kobzarev.com/soft/local-lightning/ Local Lightning — локальная разработка под WordPress Кобзарёв Михаил Tue, 08 Oct 2019 18:58:32 +0000

Local Lightning — локальная разработка под WordPress

Автора! Проекты Шпаргалки Файлы Карта

Стала доступна для тестирования новая локальная среда Local Lightning для разработки сайтов под WordPress от компании Flywheel.

(далее…)1

Просто волшебство! Уже тестирую!

Да, это реально очень крутой продукт. Успел заценить но пока не перехожу из-за не полной поддержки нужных версий PHP ( пока только 32bit). Жду релиза!

7.3 уже поддерживает, скорость бешенная на ноуте!

Пользуйтесь, удобная штука и кроссплатформенная.
Я тоже жду, но пока и так пользуюсь. Очень годный продукт.
]]>
https://www.kobzarev.com/browser/mozilla-pkix-error-key-pinning-failure/ Ошибка MOZILLA_PKIX_ERROR_KEY_PINNING_FAILURE Кобзарёв Михаил Tue, 08 Oct 2019 10:46:08 +0000

Ошибка MOZILLA_PKIX_ERROR_KEY_PINNING_FAILURE

Автора! Проекты Шпаргалки Файлы Карта

Если у вас возникла ошибка MOZILLA_PKIX_ERROR_KEY_PINNING_FAILURE при заходе на сайт toster.ru (или любой в будущем) в браузере FireFox, то лекарство ниже именно для вас.

(далее…)1

А как быть с мобильным firefox в android?

Я думаю, что аналогично. Нет возможности проверить.
]]>
https://www.kobzarev.com/wordpress/trailing-slash-canonical-yoast-seo/ Автоматическое добавление завершающего слэша в rel=canonical Кобзарёв Михаил Tue, 08 Oct 2019 09:22:28 +0000

Автоматическое добавление завершающего слэша в rel=canonical

Автора! Проекты Шпаргалки Файлы Карта

Простой, но полезный сниппет для плагина Yoast SEO, который добавляет завершающий слэш, если его там не было, во все канонические URL на сайте.

(далее…)1
]]>
https://www.kobzarev.com/other/10-templates-for-business/ Зачем платить, если есть бесплатно? Кобзарёв Михаил Thu, 03 Oct 2019 10:07:29 +0000

Зачем платить, если есть бесплатно?

Автора! Проекты Шпаргалки Файлы Карта

10 платных и бесплатных шаблонов на все случаи бизнеса.

(далее…)1
]]>
https://www.kobzarev.com/wordpress/woocommerce-autoupdate-cart/ Автообновление корзины WooCommerce Кобзарёв Михаил Sun, 22 Sep 2019 18:57:04 +0000

Автообновление корзины WooCommerce

Автора! Проекты Шпаргалки Файлы Карта

Простой сниппет для автоматическоого обновления корзины в WooCommerce при изменении количества товара.

(далее…)1

Подскжите как сделать чтоб данный хук работал так же с нажатия на кнопку + или — У меня работает только при вводе через input

Судя по всему, у вас кастомные контролы, тогда просто к ним на onchange.

не работает, на странице выводится:

jQuery( function( $ ) { ... } );

Простите, это у меня в сниппете ошибка была (забыл тег <script>). Поправил, проверьте.
А кто минусует пост, не судьба написать в комментах причину? Или религия не позволяет?
]]>
https://www.kobzarev.com/wordpress/admin-notices/ WPTRT Admin Notices Кобзарёв Михаил Fri, 20 Sep 2019 19:34:57 +0000

WPTRT Admin Notices

Автора! Проекты Шпаргалки Файлы Карта

Ребята из команды, которые делают ревью тем на wp.org, представили своё отличное решение WPTRT Admin Notices для показа уведомлений в админке WordPress.

(далее…)1
]]>
https://www.kobzarev.com/projects/no-external-links/ Плагин No External Links Кобзарёв Михаил Wed, 18 Sep 2019 11:04:54 +0000

Плагин No External Links

Автора! Проекты Шпаргалки Файлы Карта

Мой плагин No External Links является доработанным форком широко известного плагина WP No External Links, который, к сожалению, был взломан и заброшен автором.

(далее…)1
]]>
https://www.kobzarev.com/wordpress/gutenberg-full-width-content/ Выравнивание блоков Gutenberg во всю ширину экрана Кобзарёв Михаил Mon, 16 Sep 2019 14:05:44 +0000

Выравнивание блоков Gutenberg во всю ширину экрана

Автора! Проекты Шпаргалки Файлы Карта

В редакторе блоков Gutenberg появились новые опции выравнивания: «По ширине содержимого» и «Во всю ширину«.

(далее…)1
]]>
https://www.kobzarev.com/windows/wp-all-import-php-cli/ Запуск WP All Import напрямую из PHP Кобзарёв Михаил Mon, 09 Sep 2019 10:28:47 +0000

Запуск WP All Import напрямую из PHP

Автора! Проекты Шпаргалки Файлы Карта

Если вы хотите запустить крон-задачи плагина WP All Import напрямую через PHP, то попробуйте сделать это следующим образом.

(далее…)1
]]>
https://www.kobzarev.com/wordpress/cache-nav-menus/ Оптимизация WordPress при помощи кэширования меню Кобзарёв Михаил Mon, 02 Sep 2019 14:54:18 +0000

Оптимизация WordPress при помощи кэширования меню

Автора! Проекты Шпаргалки Файлы Карта

На сайтах с большим количеством пунктов в меню создаётся множество ненужных запросов в базу данных, которых можно избежать, если закэшировать всё меню в транзитный кэш.

(далее…)1

Хорошо бы замеры эффективности в цифрах привести, насколько изменяется ответ сервера. Иначе, это может быть всего лишь нано-улучшения.

Был у меня сайт, где в многоуровневом меню было порядка 40+ категорий товаров, которые раз в сутки менялись по крону в зависимости от наличия в них товаров. При включении кэширования меню количество запросов в базу уменьшилось на 240 и скорость загрузки всей страницы на 1 секунду.
]]>
https://www.kobzarev.com/projects/mihdan-yandex-dialogs/ Плагин Dialogs For Yandex Кобзарёв Михаил Wed, 28 Aug 2019 22:17:18 +0000

Плагин Dialogs For Yandex

Автора! Проекты Шпаргалки Файлы Карта

Dialogs For Yandex — это плагин под WordPress, который добавляет виджет Яндекс.Диалоги на все страницы вашего сайта.

(далее…)1
]]>
https://www.kobzarev.com/wordpress/woocommerce-minimum-quantity-drop-down/ Дропдаун с количеством товара в WooCommerce Кобзарёв Михаил Wed, 14 Aug 2019 07:46:34 +0000

Дропдаун с количеством товара в WooCommerce

Автора! Проекты Шпаргалки Файлы Карта

Как-то я переделывал сайт одного из своих клиентов на WooCommerce под названием CELIAS и меня попросили добавить дропдаун с выбором количества товаров.

(далее…)1
]]>
https://www.kobzarev.com/soft/figma-linux/ Установка Figma под Linux Кобзарёв Михаил Mon, 12 Aug 2019 16:58:16 +0000

Установка Figma под Linux

Автора! Проекты Шпаргалки Файлы Карта

Figma-linux — это неофициальное десктоп приложение под Linux для работы с вебмордой сервиса Figma, которое базируется на фреймворке Electron.

(далее…)1

А можно ли отсюда экспортировать файлы в зеплин?

Да, они плотно интегрированы между собой.
]]>
https://www.kobzarev.com/other/why-elementor-is-cool/ Почему Elementor — это круто? Кобзарёв Михаил Fri, 09 Aug 2019 15:10:58 +0000

Почему Elementor — это круто?

Автора! Проекты Шпаргалки Файлы Карта

Почему конструкторы сайтов с плагинами Elementor круче, чем аналоги без него и чем это полезно для бизнеса?

(далее…)1

Так почему элементор это круто для бизнеса?

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

Elementor — это развёрнутая документация, понятный API, отзывчивые разработчики, удобный интерфейс для пользователя, простая кастомизации, дружелюбное комьюнити.
]]>
https://www.kobzarev.com/wordpress/gravity-forms-fields-ids/ Как задать свои идентификаторы для полей в Gravity Forms Кобзарёв Михаил Thu, 08 Aug 2019 08:58:06 +0000

Как задать свои идентификаторы для полей в Gravity Forms

Автора! Проекты Шпаргалки Файлы Карта

По какой-то странной причине из коробки в Gravity Forms нет возможности задать свои идентификаторы для полей, чтобы потом было удобно с ними работать внутри хука gform_after_submission, например.

(далее…)1
]]>
https://www.kobzarev.com/wordpress/disable-woocommerce-assets/ Оптимизация WordPress путём отключения ресурсов WooCommerce Кобзарёв Михаил Fri, 02 Aug 2019 15:20:08 +0000

Оптимизация WordPress путём отключения ресурсов WooCommerce

Автора! Проекты Шпаргалки Файлы Карта

Замечали ли вы, что после активации плагина WooCommerce начинает тормозить весь сайт, а не только страницы магазина?

(далее…)1

Шикарный сниппет, musthave так сказать. Интересно, почему он по дефолту не включен? Мне кажется загрузка asset’ов только на необходимых страницах это обязательная практика, но почему-то почти никто этим не озадачивается.

Да. Еще мне нравится подгружать js библиотеки только при необходимости. Например, fancybox только при нажатии на объект с классом .fancybox или datepicker при нажатии на .datepicker и т.д. 🙂

Годное замечание!
Этот вопрос я всегда задаю разработчикам WooCommerce, но они отмалчиваются.

Подcкажите, пожалуйста, правильно ли я понял, что это нужно добавить в functions.php?

Да, либо в functions.php, либо в плагин, либо в mu плагин.
]]> https://www.kobzarev.com/programming/laravel-admin-panels/ Панели администрирования под Laravel Кобзарёв Михаил Thu, 01 Aug 2019 10:58:47 +0000

Панели администрирования под Laravel

Автора! Проекты Шпаргалки Файлы Карта

Laravel — один из самых популярных фреймворков на PHP для веб-мастеров, на базе которого написано огромное количество заготовок для создания панелей администрирования для сайтов, приложений и сервисов.

(далее…)1

Работал с Nova — не понравилось. Функционала немного, сильно (очень сильно) тормозит. Из плюсов есть некий маркетплейс дополнений, правда пока небогатый. Документация неплохая, платная.


Есть еще https://github.com/LaravelRUS/SleepingOwlAdmin/ — неплохая админка, русскоязычные разаработчики (документация тоже на русском). Для небольших сайтов, самое то. Применял в двух проектах, не пожалел. Из минусов — нет функционала отображения (т.е. только создать/отредактировать)


А сейчас работаю с https://github.com/z-song/laravel-admin — ну это прям бомба. Пока функциоанала хватает с головой, реально есть все и довольно неплохо сделано. Правда, что удивило (может плохо искал) — нет своих эвентов. А так — все супер.


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

У меня на Nova 2 крупных проекта, один из них — АПИ и бекенд для мобильного фитнесс-приложения. Nova — огонь. Расширяемая, удобная.

Люто плюсую!

]]> https://www.kobzarev.com/plugins/wp-search-with-algolia/ Миграция с плагина Search by Algolia – Instant & Relevant results Кобзарёв Михаил Wed, 31 Jul 2019 11:38:05 +0000

Миграция с плагина Search by Algolia – Instant & Relevant results

Автора! Проекты Шпаргалки Файлы Карта

В связи с прекращением поддержки компанией Algolia своего плагина «Search by Algolia – Instant & Relevant results» ребята из WebDevStudios сделали его форк под названием «WP Search with Algolia«, который обещают поддерживать еще долгое время, так как сами используют этот плагин на многих своих проектах.

(далее…)1
]]>
https://www.kobzarev.com/wordpress/elementor-goals/ Отслеживание целей кнопок и форм в Elementor Кобзарёв Михаил Tue, 30 Jul 2019 14:55:23 +0000

Отслеживание целей кнопок и форм в Elementor

Автора! Проекты Шпаргалки Файлы Карта

Отследить нажатие на кнопки и отправку форм, сделанных при помощи Elementor, в Google Analytics или Яндекс Метрике можно с помощью простых сниппетов.

(далее…)1

Я может быть что-то упустил но ответьте плиз на вопрос, мне нужно отслеживать кнопку оплаты которая находится на странице но она не является ни гуглом ни метрикой, здесь мне нужно узнать сколько по этой кнопке уже тыкнули. И вывести эту цифру на главной странице, как это можно сделать? Тоже пользуюсь элементором

Ну это явно не по теме вопроса, тут нужен вам плагин для отслеживания кликов по кнопке, а почему не метрика или аналитика?

Ну просто мне потом суммировать все клики по всем таким кнопкам нужно. Я если честно сходу даже не вдупляю как это реализовать )) какой плаг посоветуете?

Спросите у наших ребят в чате в телеграме @elementor_ru — там точно плагин посоветуют.

Увы — не работает в моем Элементоре отслеживание кнопки. Все сделал пошагово, как указано выше + отключил cache plugin чтоб не мешал.Но GA так и не видит клика по кнопке. Если есть возможность, прошу связаться. Требуется помощь в данном вопросе

Проблема на вашем сайте была вызвана тем, что вместо analytics.js вы используете gtag.js, соответственно все вызовы ga() надо заменить на gtag(). Подробнее смотрите в документации.

Очень признателен за помощь. Спасибо!

Пожалуйста!
Ссылку на сайт дайте, посмотрим.

Без проблем. Но не в комментах. Напишите на почту пжлста. Я вышлю ссылки и что было сделано

Отправил!

Единственно правильная строчка для ЯМ — ym( 'XXXXXX', 'reachGoal', 'header-email' );

Или можно подставить стандартную — yaCounterXXXXXX.reachGoal('header-email'); return true; ?

Обе строчки являются валидно верными, но yaCounterXXXXXX — морально и физически устарела.

Кто голосует ниже пятёрки, поясните в комментах, что не так, что добавить или изменить, спасибо.

]]> https://www.kobzarev.com/other/system-administrator-appreciation-day-2019/ С днём сисадмина, коллеги! Кобзарёв Михаил Fri, 26 Jul 2019 10:38:03 +0000

С днём сисадмина, коллеги!

Автора! Проекты Шпаргалки Файлы Карта

Последняя пятница июля – особенный день, это — международный день системного администратора.

(далее…)1
]]>
https://www.kobzarev.com/programming/composer-fork-require/ Как добавить форк зависимости в Composer Кобзарёв Михаил Thu, 25 Jul 2019 08:22:10 +0000

Как добавить форк зависимости в Composer

Автора! Проекты Шпаргалки Файлы Карта

Если в своём проекте вы используете чей-то репозиторий, который не поддерживается автором, но при этом имеете свой акутальный форк с новыми фичами и исправлением ошибок, то его можно добавить в composer.json.

(далее…)1
]]>
https://www.kobzarev.com/linux/oh-my-zsh/ Oh My ZSH в Ubuntu Кобзарёв Михаил Mon, 22 Jul 2019 17:26:01 +0000

Oh My ZSH в Ubuntu

Автора! Проекты Шпаргалки Файлы Карта

Oh My Zsh — бесплатный опенсорсный фреймворк для управления конфигурацией zsh, которая превращает вашу консоль в очень продуктивный инструмент.

(далее…)1
]]>
https://www.kobzarev.com/other/flush-social-media-cache/ Как сбросить кэш URL в социальных сетях Кобзарёв Михаил Mon, 22 Jul 2019 13:17:43 +0000

Как сбросить кэш URL в социальных сетях

Автора! Проекты Шпаргалки Файлы Карта

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

(далее…)1
]]>
https://www.kobzarev.com/projects/mihdan-clockwork/ Отладка WordPress при помощи Clockwork Кобзарёв Михаил Fri, 19 Jul 2019 12:51:35 +0000

Отладка WordPress при помощи Clockwork

Автора! Проекты Шпаргалки Файлы Карта

Предлагаю вашему вниманию плагин под WordPress Mihdan: Clockwork для отладки сайта через Clockwork.

(далее…)1
]]>
https://www.kobzarev.com/wordpress/wordpress-optimization-with-disable-translation-for-rest-api/ Оптимизация WordPress путём отключения переводов для REST API Кобзарёв Михаил Thu, 18 Jul 2019 16:33:21 +0000

Оптимизация WordPress путём отключения переводов для REST API

Автора! Проекты Шпаргалки Файлы Карта

Если вы используете на своём сайте WordPress REST API и вам НЕ нужны там переводы, например, у вас на его основе реализованы счётчики посещаемости, то ускорить такие запросы, а как следствие и сам сайт, можно при помощи отключения переводов для запросов REST API.

(далее…)1
]]>
https://www.kobzarev.com/wordpress/wordpress-resources/ Ресурсы по WordPress Кобзарёв Михаил Thu, 18 Jul 2019 10:06:08 +0000

Ресурсы по WordPress

Автора! Проекты Шпаргалки Файлы Карта

Составил свой список полезных ресурсов по WordPress, которые я периодически посещаю.

(далее…)1

на ua_wp стоит неверная ссылка

Спасибо, исправил.
]]>
https://www.kobzarev.com/wordpress/pomodoro-cache/ Оптимизация WordPress путём кэширования переводов Кобзарёв Михаил Wed, 17 Jul 2019 09:59:39 +0000

Оптимизация WordPress путём кэширования переводов

Автора! Проекты Шпаргалки Файлы Карта

API интернационализации i18n в WordPress реализован очень неэффективено.

(далее…)1
]]>
https://www.kobzarev.com/other/15-templates-for-holiday/ 15 лучших шаблонов сайтов праздничной тематики Кобзарёв Михаил Tue, 16 Jul 2019 13:17:50 +0000

15 лучших шаблонов сайтов праздничной тематики

Автора! Проекты Шпаргалки Файлы Карта

Это подборка ярких и функциональных шаблонов сайтов для тех, кто хочет привнести ощущение праздника и подарить своим пользователям хорошее настроение. 

(далее…)1
]]>
https://www.kobzarev.com/wordpress/redirect-users-after-add-to-cart/ Редирект на чекаут после добавления товара в корзину на WooCommerce Кобзарёв Михаил Tue, 16 Jul 2019 08:42:13 +0000

Редирект на чекаут после добавления товара в корзину на WooCommerce

Автора! Проекты Шпаргалки Файлы Карта

В настройках по умолчанию у WooCommerce есть галочка для включения перенаправления пользователя в корзину после добавления им товара в неё. Но что делать, если редирект нужен сразу на страницу оформления заказа?

(далее…)1
]]>
https://www.kobzarev.com/makeup/body-height-research/ Исследование высоты BODY Кобзарёв Михаил Fri, 12 Jul 2019 14:11:22 +0000

Исследование высоты BODY

Автора! Проекты Шпаргалки Файлы Карта

Небольшое исследование поведения элемента BODY в различных браузерах. Отступы от границ окна (margin, padding). Высота BODY и ее изменение в зависимости от высоты контента в Internet Explorer 6, Firefox 1.5, Opera 8.

(далее…)1
]]>
https://www.kobzarev.com/projects/cyr2lat/ Плагин Cyr To Lat Кобзарёв Михаил Wed, 10 Jul 2019 11:27:06 +0000

Плагин Cyr To Lat

Автора! Проекты Шпаргалки Файлы Карта

Cyr To Lat — это плагин под WordPress, который преобразует кириллические символы в ярлыках записей, страниц и рубрик в латинские. Полезно для создания URL-ов, легко читаемых людьми.

(далее…)1

Михаил, добрый день. Возможно, вы, как разбирающийся человек, найдёте минутку, чтобы объяснить новичку. Вот все говорят о том, что использовать кириллические адреса не стоит. Не является ли этот принцип устаревшим? Ведь мой браузер, например, прекрасно показывает кириллические символы в URL сайтов. Яндекс тоже прекрасно воспринимает кириллицу. Гугл тоже. Смысл заставлять русских пользователей ломать глаза о транслит? Пусть себе перекодируется там где-то внутри по каким угодно правилам. Если вовне это никак не проявляется, то к чему вся эта история к транслитом?

Ссылки на криллице обычно преобразутся через urlencode и Punycoder, если ее оставить в соцсети, форуме, блоге, телеграме или браузере, который НЕ на движке chromium.

Если изначально ссылка выглядела как сайт.рф/страница, то после преобразований станет примерно так xn--80aswg.xn--p1ai/%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0

Так люди точно сломают глаза. Так что кардинально ничего не поменялось.

Спасибо, стало теперь стало понятнее.

]]> https://www.kobzarev.com/wordpress/syntaxhighlighter-evolved-in-anycomment/ SyntaxHighlighter Evolved в AnyComment Кобзарёв Михаил Mon, 08 Jul 2019 21:05:57 +0000

SyntaxHighlighter Evolved в AnyComment

Автора! Проекты Шпаргалки Файлы Карта

AnyComment — лучший плагин под WordPress для вывода комментариев на вашем сайте, но «из коробки» он не умеет подсветку синтаксиса.

(далее…)1
<input type="hidden" class="hidden" value="1" id="required_fields_email" name="required_fields[email]">
]]>
https://www.kobzarev.com/programming/github-action-for-telegram/ Отправляем сообщения в Telegram из GitHub Кобзарёв Михаил Sat, 06 Jul 2019 20:51:13 +0000

Отправляем сообщения в Telegram из GitHub

Автора! Проекты Шпаргалки Файлы Карта

Представляю вашему вниманию GitHub Action для отправки уведомлений в Telegram из вашего репозитория.

(далее…)1
]]>
https://www.kobzarev.com/wordpress/elementor-business-themes/ 10 WordPress бизнес тем для конструктора Elementor Кобзарёв Михаил Mon, 17 Jun 2019 13:40:55 +0000

10 WordPress бизнес тем для конструктора Elementor

Автора! Проекты Шпаргалки Файлы Карта

Стоит ли напоминать, что сегодня создание онлайн-проектов пользуется большим спросом?

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

Почему это так необходимо? Все очень просто: в настоящее время запуск веб-сайта в Интернете является наиболее рентабельной и, следовательно, самой выгодной бизнес-моделью.

Как и визитная карточка, высококачественный веб-сайт демонстрирует потенциальным клиентам весь спектр услуг, предоставляемых владельцем. Более того, наличие достойного сайта, безусловно, помогает в расширении клиентской базы.

С каждым днем такие простые процедуры, как онлайн-покупки, становятся все более распространенными. То же самое происходит с поиском нужных услуг — люди присматриваются, проверяют, и оценивают исходя из информации в сети.

И, конечно же, после того, как вы, решили использовать платформу WordPress для создания своего собственного бизнес сайта, следующий вопрос — какой конструктор страниц для него лучше всего? В этой статье вы узнаете о WordPress шаблонах для конструктора Elementor.

Этот инструмент значительно расширяет возможности стандартного редактора WordPress. Благодаря этому плагину, становится возможным создать собственный сайт и легко добавить в него все необходимые элементы, страницы и контент.

Elementor призван решить один из главных недостатков WordPress — недостаточная гибкость, в которой нуждаются пользователи. Это, пожалуй, один из самых удобных и функциональных плагинов для создания страниц на этой платформе.

Простой и удобный интерфейс интуитивно понятен и не требует специальных знаний, а большое количество виджетов позволяет создавать сайты любой сложности и любым количеством страниц.

С его помощью вы можете создать бизнес сайт с красивым дизайном, отлично работающим интерфейсом без навыков программирования.

Кроме того, этот плагин незаменим в разработке адаптивного сайта. Такой сайт будет более удобный для пользователей и поможет вам получить высокий рейтинг в поисковике.

24.Storycle

Детали | Демо

24.Storycle — многофункциональное решение для вашего новостного сайта. Этот шаблон включает в себя множество невероятных возможностей: 10 макетов для постов, 7 макетов для блогов, 3 макета для страниц.

Вместе со всем этим вы получаете полный пакет подключаемых Jet модулей (Jet Menu, Jet Elements, Jet Blog, Jet Tables, Jet Reviews, JetTricks).

Шаблон предлагает расширенные настройки типографии, поэтому вы можете использовать Google Web Fonts и изменять его размер, стиль и цвет.

Вы можете легко настроить верхние и нижние колонтитулы, боковые панели и любую другую часть вашего сайта, используя мощные возможности визуального конструктора Elementor с функцией drag n drop.

JohnnyGo

Детали | Демо

JohnyGo — это первоклассный готовый шаблон, посвященный услугам разнорабочих.

Получите 20 демок с эффектным пользовательским интерфейсом и широкими функциональными возможностями в одном пакете.

Продемонстрируйте свой проект с помощью плагина Cherry Projects.

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

Этот многоцелевой шаблон полностью адаптивный и кросс-браузерный, поэтому Вам не нужно будет переживать за мобильную версию сайта.

Выберите эту SEO-оптимизированную тему и станьте самым популярным поставщиком услуг по ремонту в Интернете.

Projexon

Детали | Демо

Получите премиальный веб-дизайн для вашей строительной компании.

Projexon — это множество потрясающих страниц, включая Домашнюю страницу, Услуги, О нас, Проекты, Команда и Блог.

Настройка шаблона не требует навыков программирования, так как вы просто перетаскиваете блоки контента по странице с помощью мышки.

Шаблон полностью адаптивный, поэтому ваш сайт будет подстраиваться под мобильные устройства, мониторы ПК и планшетов.

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

FrameMe

Детали | Демо

Чистый и изящный дизайн шаблона FrameMe поможет вам создать великолепное онлайн-портфолио и привлечь клиентов с первой секунды.

С шаблоном вы получаете 7 изящных макета хедера, 3 макета футера, и 4 макета блога.

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

Пакет полезных плагинов обогатит ваш сайт первоклассной функциональностью.

Этот готовый и на 100% отзывчивый шаблон привлечет внимание посетителей с первого взгляда.

Forceair

Детали | Демо

Повысьте эффективность своего онлайн-бизнеса с WordPress шаблоном Forceair.

С помощью этого шаблона, вы можете успешно вести свой проект, демонстрировать услуги, организовывать встречи и продавать товары через Интернет с помощью плагина WooCommerce.

Вы будете поражены простотой интерфейса редактора и его возможностями.

С помощью Elementor вы можете корректировать дизайн и добавлять контент, не обращаясь к коду.

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

Grafique

Детали | Демо

Это чистый, минималистичный, стильный шаблон с полностью адаптивной версткой.

Адаптивность призвана помочь вам завоевать популярность пользователей смартфонов и планшетов, получить лучший рейтинг в поисковиках.

Шаблон поддерживает множество плагинов премиум-класса, различные форматы постов, пользовательские фоны, хедеры, футеры и т. д.

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

Идущий в комплекте пакет стоковых изображений пригодится вам в начале создания контента.

Персонализация шаблона происходит в удобной панели управления, а процесс установки требует одного щелчка мыши.

ExtraOrdinarz

Детали |  Демо

Продвигайте свое рекламное агентство с темой ExtraOrdinary, и Вы добьетесь больших успехов.

Легко корректируйте внешний вид сайта с помощью мощного drug n drop редактора Elementor.

Кроме того, вы получаете множество бесплатных бонусов, таких как высококачественные изображения, пакет Jet Elements и плагин Jet Menu.

Кроме того, Вы можете сделать свой сайт еще более надежным, используя функциональность Cherry.

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

Почувствуйте преимущества премиального веб-дизайна.

Digitalium

Детали |  Демо

Digitalium — идеальный шаблон сайта как для маркетингового агентства, так и для любого бизнес аналитика.

Шаблон состоит из готовых, легко настраиваемых страниц. Вы можете легко изменить дизайн любой страницы и всего шаблона, используя такой универсальный инструмент как Elementor.

Визуальный конструктор позволяет добавлять изменения и просматривать результаты без перезагрузки страницы, и редактировать страницы с помощью простой функции перетаскивания элементов (drug n drop).

Этот шаблон отлично оптимизирован под поисковые системы. Тем не менее вы всегда можете повысить рейтинг своего сайта, запустив блог и настроив SEO.

Делитесь интересным контентом и расширяйте список своих подписчиков.

Kiddlez

Детали |  Демо

Современная школа требует современного и качественного веб-решения. Удобный сайт школы с красочным дизайном привлечет как детей, так и их родителей.

WordPress шаблон Kiddlez имеет множество тематических изображений, которые вы получаете бесплатно.

Кроме того, Вы можете расширить возможности своего сайта, используя Jet плагины. Например, плагин Jet Menu поможет Вам установить простую, интуитивно понятную навигацию, чтобы посетители могли легко найти всю информацию.

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

Edem Spa

Детали |  Демо

Создайте сайт с комфортной и спокойной атмосферой с помощью WordPress шаблона Edem Spa.

Оптимизированная и отзывчивая структура шаблона позволит вашим клиентам оценить ваши лучшие предложения с помощью смартфона или планшета.

Плагин WPML предоставляет вам возможность создать сайт на нескольких языках и привлечь клиентов даже из-за рубежа.

Получите стоковые изображения, функциональность Cherry, дополнения Jet Elements и множество потрясающих возможностей, которые помогут вам создать профессиональный сайт спа салона и продемонстрировать лучшие предложения.

Создайте свой бизнес сайт за несколько часов с помощью Elementor

Elementor — это один из самых популярных конструкторов вебсайтов в мире. Это не удивительно, потому что это действительно гибкий, удобный, универсальный инструмент для начинающих.

Сегодня он превратился в своего рода стандарт drug-n-drop редактора. Вы можете не только настраивать макет своего сайта, играя с модулями и блоками контента, но также настраивать хедер и футер, организовывать вкладки и разделители, создавать превосходное меню, экспериментировать с анимацией и делать много других удивительных вещей, не касаясь кода.

Если вы считаете, что это может быть полезно для вашего бизнес-проекта, взгляните на список топовых WordPress шаблонов Elementor.

Вы можете настроить такую тему без дополнительной помощи и больших денежных вложений.

Кроме того, каждый из этих шаблонов поставляется с набором плагинов Elementor, которые вы можете использовать, чтобы сделать свой бизнес профессиональным, надежным и прибыльным.

1
]]>
https://www.kobzarev.com/projects/wordpress-disable-aggressive-updates/ Disable Aggressive Updates — отключение агрессивных обновлений WordPress Кобзарёв Михаил Mon, 06 May 2019 08:17:36 +0000

Disable Aggressive Updates — отключение агрессивных обновлений WordPress

Автора! Проекты Шпаргалки Файлы Карта

Предлагаю вашему вниманию плагин Disable Aggressive Updates под WordPress для ускорения админки путём отключения агрессивных проверок обновлений.

(далее…)1

В WordPress 4.9.12 вкладка ОБНОВЛЕНИЕ выглядит /wp-admin/update-core.php

Почему же тогда у вас load-update-core.php ?

Откуда также ссылки в коде:

load-plugins.php

load-themes.php

load-update-core.php

load-update-core.php

load-update.php

load-update.php

Подскажите пожалуйста где увидеть такие страницы в админке?

Верно ли указаны страницы, возможно они устарели в коде?

Это не ссылки на файлы, это название хуков. Смотрите, например, исходный файл wp-includes/update.php.

Здравствуйте.

1) Уточните пожалуйста чем отличается от аналогичных плагинов?

Аналоги:

Webcraftic Updates Manager

Easy Updates Manager

Disable All WordPress Updates 

Данные плагины полностью отключают обновления. Правильно ли я понимаю, что ваш плагин не отключает кроновые обновления — именно в этом и разница?


2) «…для AJAX запросов работает и во фронтэнде» — можно подробнее?


3) Получается при установки плагина будут запрошены новые версии плагинов но уже по крону? Т.е. что бы увидеть обновления нужно будет подождать выполнения крона, или обновить страницу (например, плагины)?


4) Плагин чем-то отличается от кода указанного на странице «Оригинальная идея принадлежит WordPress как на ладони.» ??


5) Ваш плагин не отключает критические автообновления CMS?


6) Планируется ли сделать страницу настроек плагина?

  1. Плагин отключает ТОЛЬКО агрессивные обновления, чтобы не тормозила админка и у плагина нет настроек. Никогда НЕ отключайте полностью обновления, ваш сайт тупо сломают или оно само сломается при обновлении сервера у хостера. Кроны я не трогаю.
  2. Агрессивные обновления работают и на лицевой стороне сайта через ajax, поэтому они также начинают тормозить. В статье вроде написано даже почему 🙂
  3. Будут отключены агрессивные обновления, кроны продолжат работу. Либо можно ручками перейти на страницу обновления и в этот момент будет запущена стандартная проверка обновлний.
  4. Там указан просто код, у меня этот код обёрнут в плагин, чтобы не было зависимости от темы на сайте. Всегда отделяйте внешний вид (тему) от функционала (плагины, mu-plugins).
  5. Критические обновления я не трогал.
  6. А что вы там хотите настраивать? Если нужно — сделаем!

Огромное спасибо!

Пожалуйста!

Спасибо. Тоже добавил в обязательные плагины.

Пользуйтесь 🙂

admin_init не затрагивает юзеров. Это хук админ-панели.

Не понял сути вашего комментария.

Спасибо, за ваш плагин! Входит в мой обязательный стак при установке WP)

Надеюсь и в репе его увидеть)

Спасибо за добрые слова. Если к нему будет интерес — обязательно размещу в официальном репозитории.

]]>
https://www.kobzarev.com/makeup/dl-tabs/ Верстка табов с помощью <dl> Кобзарёв Михаил Mon, 29 Apr 2019 14:42:51 +0000

Верстка табов с помощью <dl>

Автора! Проекты Шпаргалки Файлы Карта

Все реализация, которые я увидел, выглядели довольно стандартно, примерно так:

<div class="tabs">
	<ul class="nav">
		<li>Tab 1</li>
		<li>Tab 2</li>
		<li>Tab 3</li>
		<li>Tab 4</li>
		<li>Tab 5</li>
	</ul>

	<ul class="content">
		<li>Tab content 1</li>
		<li>Tab content 2</li>
		<li>Tab content 3</li>
		<li>Tab content 4</li>
		<li>Tab content 5</li>
	</ul>
</div>

То есть два независимых списка, в одном заголовки, во втором — содержимое.

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

Во-первых, данные из бэкэкнда придется выводить в два цикла (сначала заголовки, а потом контент), а не одним. Это хоть немного, но увеличивает объем кода и явно не добавляет производительности.

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

Решил попробовать избавиться от этих проблем, а заодно размять мозги ? При выборе структуры элементов первым делом выбор пал на -список, который как нельзя лучше подходит для этой задачи. Думаю, не я первый решил попробовать сделать табы с помощью этого списка.

Вот что у меня получилось.

See the Pen Верстка табов с помощью by mihdan (@mihdan) on CodePen.0

Чтобы приведенный пример не стал очередным источником бездумного копи-пэйста, давайте рассмотрим, за счет чего это работает.

Предположим, у нас есть набор элементов, которым указан float: left:

float: left

А что будет, если одному из элементов этой последовательности указать float: right?

float: right

Уже неплохо: элементы, следующие за , встали ровно за предыдущими. Но нам нужно, чтобы содержимое таба растягивалось на всю ширину, поэтому прописываем этому элементу width: 100%:

width: 100%

Как и ожидалось, элемент разорвал поток. Размышляем так: если элемент прижат к правому краю контейнера, значит при изменении ширины будет изменяться левый край элемента (то есть растет справа налево). Значит, нам нужно подавить влияние левого края элемента. Сделать это можно с помощью margin-left: -100%:

margin-left: -100%

Осталось сместить элемент вниз, сделать это можно с помощью margin-top:

margin-top

Вот и все. По умолчанию все -элементы скрываем с помощью display: none, выбранному элементу говорим display: block. Скрипт переключения табов на jQuery выглядит совсем уж просто:

jQuery( function( $ ) {
	$( 'dl.tabs dt' ).click( function() {
		$( this )
			.siblings()
			.removeClass( 'selected' )
			.end()
			.next( 'dd' )
			.andSelf()
			.addClass( 'selected' );
	} );
} );

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

Ссылки

1

https://codepen.io/mihdan/pen/Nmmbjg/

.andSelf() was deprecated in jQuery 1.8 and removed in jQuery 3.0. .addBack() should be used instead from jQuery 1.8 onward.


Да, такое бывает, что старые методы умирают

я нашел статью полезной. наверное, стать можно подправить/обновить. и обновить пример кода.

https://codepen.io/bonddesign/pen/gOOXyJL

Простая замена andSelf() на addBack() вываливает фатал.

]]> https://www.kobzarev.com/wordpress/woocommerce-added-to-cart-modal/ Оповещение «Товар добавлен в корзину» в WooCommerce Кобзарёв Михаил Wed, 17 Apr 2019 07:00:38 +0000

Оповещение «Товар добавлен в корзину» в WooCommerce

Автора! Проекты Шпаргалки Файлы Карта

Снппет можно добавить в любой имеющийся у вас в дочерней теме скрипт:

jQuery( function( $ ) {
    // Цепляемся за событие adding_to_cart
    $( document.body ).on( 'adding_to_cart', function( event, button ) {
        // Выцепляем инициатора события (ссылка/кнопка)
        var $btn = $( button[0] );

        // Пытаемся найти в вёрстке название товара
        var product_title = $btn.parents( 'li.product' ).find( '.woocommerce-loop-product__title' ).text();

        if ( product_title ) {
            // Формируем шаблон попапа
            var tpl = '';
            tpl += '<p>Товар "' + product_title + '" добавлен в корзину</p>';
            tpl += '<div>';
            tpl += '<a class="button" onclick="jQuery.unblockUI();">Продолжить</a>';
            tpl += '<a href="/shop/cart/" class="button alt">Оформить</a>';
            tpl += '</div>';

            // Выводим шаблон в модальное окно.
            // Используем blockUI из WooCommerce
            $.blockUI({
                message: tpl,
                timeout: 4000,
                css: {
                    width: '300px',
                    border: 0,
                    padding: 30
                }
            } );
        }
    } );
} );

Также этот сниппет можно вставить на страницу при помощи хука wp_footer внутри файла functions.php вашей активной темы:

add_action(
    'wp_footer',
    function() {
        ?>
        <script>тут сниппет из примера выше</script>
        <?php
    }
);

Стили модального окна можно настроить по вашему вкусу, например в кастомайзере самого WordPress.

1
]]>
https://www.kobzarev.com/plugins/10-plugins-for-fashion-site/ 10+ лучших плагинов для ультрамодного сайта Кобзарёв Михаил Thu, 04 Apr 2019 16:22:09 +0000

10+ лучших плагинов для ультрамодного сайта

Автора! Проекты Шпаргалки Файлы Карта

Этот пробел с лихвой заполняют так называемые плагины. Плагин по сути является программным дополнением, который не конфликтует с остальным функционалом сайта, а помогает реализовать недостающие возможности сайта.

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

Функции, которые выполняют плагины

1. Усовершенствование базовых возможностей программы/сайта.

Плагин как модуль или дополнение может быть подключен к сайту и отключен от него без критических последствий в работе основного функционала. Если на сайте не хватает какой-либо функции, нет необходимости полностью переписывать код, достаточно установить необходимый плагин для ее реализации. Плагины, как правило, не перегружают сайт и имеют достаточно малый объем.

2. Ускоряют работу сайта и не перегружают его.

Если в коде сайта прописать абсолютно весь функционал, то такой файл будет занимать слишком много места, а сам ресурс вряд ли порадует скоростью и динамичностью. Плагины позволяют владельцу сайта не использовать большие полнофункциональные программные коды с лишним для него функционалом, а обойтись набором небольших плагинов, необходимых проекту для выполнения конкретных целей.

3. Расширяют возможности и позволяют сделать веб-проект единственным и индивидуальным.

Один шаблон, а соответственно и его функционал, может использоваться разными владельцами для различных целей. Установка плагинов позволяет уникализировать свой проект и подстроить его под конкретные задачи.

Плагины очень полезны для непрофессионалов в сфере создания сайта. Поскольку их легко установить и просто использовать в работе без необходимости редактирования исходного кода. Нельзя переоценить их полезность и эффективность и для новичков, и для профессионалов.

Это подборка лучших плагинов для конструктора сайтов Elementor от команды TemplateMonster.

Плагин WordPress JetElements для конструктора страниц Elementor

Создавать и редактировать контент просто со специальным плагином WordPress для Elementor. В него также интегрированы элементы интернет-магазина WooCommerce. Это позволит легко управляться не только с обычным сайтом, но и полноценной онлайн-витриной.

Детали |  Демо

Плагин WordPress JetMenu — мега-меню для конструктора Elementor

Быстрый и легкий плагин для настройки мегаменю сайта. JetMenu основан на drag-and-drop конструкторе Elementor. Главная особенность решения — плагин совместим с многими бесплатными темами.

Детали |  Демо

Плагин WordPress JetBlog — модули блогов для Elementor

Лучший плагин для максимальной мощи блога сайта. С модулями, которые содержит это решение, просто работать на интуитивном уровне. Теперь управление контентом станет еще более простым. Содержит различные лейауты, поддерживает RTL, плейлисты видео, текстовые тикеры, смарт-листы и многое другое.

Детали |  Демо

JetEngine — Elementor WordPress плагин для добавления и редактирования контента

Создание и работа с динамическим контентом сайта. Внутри функционал календаря, кастомные поля сайта, детальная документация. Удобно расширение для еще больших возможностей контента сайта.

Детали |  Демо

Плагин WordPress JetTricks — Elementor плагин для визуальных эффектов

Если на вашем сайте не хватает визуальных эффектов, то плагин JetTricks для WordPress поможет вам в этом. Никакого вмешательства в код и понятный набор действий для настройки плагина, с которым справятся даже новички. Увеличивает эффективность конструктора сайта Elementor и расширяет его возможности. С помощью плагина можно настроить эффекты параллакс, настраивать кнопки, закреплять элементы сайта и многое другое.

Детали |  Демо

Плагин WordPress JetTabs — вкладки и аккордеон для конструктора Elementor

Теперь создание вкладок и блоков в стиле “аккордеон” становится простой задачей для каждого. Горизонтальные или вертикальные вкладки сайта, встраиваемые в дизайн сайта виджеты, плагин имеет широкий функционал для настройки веб-проекта в соответствии с видением его владельца. JetTabs также поддерживает RTL.

Детали |  Демо

Плагин WordPress JetWooBuilder — Elementor плагин для создания WooCommerce страниц

С таким плагином, внутри которого содержатся WooCommerce инструменты, управлять страницами для продаж онлайн проще простого. Удобная и понятная кастомизация интернет-магазина позволит сразу продавать собственные товары онлайн. JetWooBuilder поможет создать списки товаров, сетку категорий, сетку товаров и др. удобные для будущих покупателей элементы.

Детали |  Демо

Плагин WordPress JetPopup — расширение для всплывающих окон Elementor

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

Детали |  Демо

Плагин WordPress JetBlocks — Elementor виджет для хедера и футера

Создать хедер или футер? Никаких проблем! Этот плагин создан для того, чтобы выполнить это на профессиональном уровне. С его помощью также можно фиксировать хедер, чтобы при скроллинге он оставался вверху страницы.

Детали |  Демо

WordPress JetParallax — плагин для конструктора Elementor

Параллакс-эффект продолжает оставаться в тренде. Он привлекает внимание пользователя и завораживает. Чтобы быстро настроить такой эффект на своем сайте, воспользуйтесь этим WordPress плагином. Можно отладить скорость анимации, настроить позиции для отображения, выбрать тип прокрутки и многое другое.

Детали |  Демо

Плагин WordPress Element X — расширение для Elementor

Плагин WordPress, внутри которого находится 20 виджетов и 20 шаблонов. Повзоляет настроить на сайте аккордеон, список с иконками, форму контактов, таймлайн, call to action и многое другое. Также есть возможность реализовать меню с ценами, подключить к сайту канал в Instagram и настроить карусель.

Детали |  Демо

JetGuten — плагин для создания блоков контента в WordPress редакторе Gutenberg

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

Детали |  Демо

Плагин WordPress JetReviews — виджет отзывов для конструктора Elementor

Настройка рейтинга и отзывов пользователей. Плагин имеет различные стили отображения, прекрасную типографику и качественное исполнение. Совместим с плагином WP Review, что в свою очередь позволяет усовершенствовать блок отзывов и сделать его 100% удобным для пользователей.

Детали |  Демо

Плагин WordPress JetSearch — ультрабыстрый AJAX виджет поиска для Elementor

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

Детали |  Демо

Какие задачи решают плагины

Плагины способны решить любую задачу и помочь владельцу сайта быстро сориентироваться в быстро меняющемся интернет-пространстве. Эти дополнения помогают мгновенно реализовать на сайте необходимый функционал без привлечения сторонних специалистов.

  • С их помощью можно быстро настроить форму подписки для сбора e-mail пользователей и рассылки актуальных новостей компании.
  • Они позволяют даже небольшой блог в мгновение ока превратить в полноценный интернет-магазин для эффективных продаж.
  • Плагины защитят сайт от спама и вредоносных программ.
  • Изменить дизайн и сделать его еще ярче и заметнее для клиентов — с этим тоже справятся плагины.
  • Плагины обезопасят ресурс и помогут SEO-оптимизировать сайт для рейтинговой выдачи в поисковых системах.

Плагины облегчают жизнь вебмастера, а время потраченное на их поиск и установку компенсируется новыми возможностями сайта. Кстати, все шаблоны, плагины и темы для настоящих поклонников конструктора Elementor собраны на Elementor marketplace. Выбирайте нужные и экономьте не только собственные средства, но и время.


1

Колкото по малко плъгини има един сайт толкова по бързо зарежда

]]>
https://www.kobzarev.com/wordpress/wp-cli-elementor/ WP-CLI в Elementor Кобзарёв Михаил Thu, 28 Mar 2019 08:28:48 +0000

WP-CLI в Elementor

Автора! Проекты Шпаргалки Файлы Карта

На текущий момент Elementor поддерживает следующие команды WP-CLI:

  • flush_css — сбрасывает кэш CSS в билдере Elementor Page
  • import_library — импортирует файлы шаблонов в библиотеку
  • replace_urls — заменяет старый URL на новый во всех страницах Elementor
  • sync_library — синхронизирует библиотеку Elementor
  • license activate или license deactivate — активирует или деактивирует лицензию в Elementor Pro.

wp help elementor

Для просмотра списка всех доступных команд WP-CLI в Elementor используйте wp help elementor.

wp help elementor-pro

Для получения помощи по индивидуальной команде используйте следующий формат: wp help elementor или wp help elementor-pro.

wp help elementor flush_css

wp help elementor import_library

wp help elementor replace_urls

wp help elementor sync_library

wp elementor-pro license activate

wp elementor-pro license deactivate

Ссылки

1

Спасибо воспользовался. Статью в закладки

Рад, что помог

спасибо, очень просто и понятно!

Пользуйтесь!
]]>
https://www.kobzarev.com/wordpress/disable-elementor-widgets/ Как отключить неиспользуемые виджеты Elementor Кобзарёв Михаил Tue, 05 Mar 2019 15:56:43 +0000

Как отключить неиспользуемые виджеты Elementor

Автора! Проекты Шпаргалки Файлы Карта

Возможно, в скором времени этот функционал добавят в настройки самого редактора.

Данный сниппет можно использовать внутри mu-плагина, обычного плагина или внутри functions.php текущей темы WordPress.

global $elementor_widget_blacklist;
 
$elementor_widget_blacklist = [
  //'common', // этот лучше не трогать!
  'heading',
  'image',
  'text-editor',
  'video',
  'button',
  'divider',
  'spacer',
  'image-box',
  'google-maps',
  'icon',
  'icon-box',
  'image-gallery',
  'image-carousel',
  'icon-list',
  'counter',
  'progress',
  'testimonial',
  'tabs',
  'accordion',
  'toggle',
  'social-icons',
  'alert',
  'audio',
  'shortcode',
  'html',
  'menu-anchor',
  'sidebar',
 
  // Для PRO версии
  'posts',
  'portfolio',
  'slides',
  'form',
  'login',
  'media-carousel',
  'testimonial-carousel',
  'nav-menu',
  'pricing',
  'facebook-comment',
  'nav-menu',
  'animated-headline',
  'price-list',
  'price-table',
  'facebook-button',
  'facebook-comments',
  'facebook-embed',
  'facebook-page',
  'add-to-cart',
  'categories',
  'elements',
  'products',
  'flip-box',
  'carousel',
  'countdown',
  'share-buttons',
  'author-box',
  'breadcrumbs',
  'search-form',
  'post-navigation',
  'post-comments',
  'theme-elements',
  'blockquote',
  'template',
  'wp-widget-audio',
  'woocommerce',
  'social',
  'library',
 
  // Виджеты WordPress
  'wp-widget-pages',
  'wp-widget-archives',
  'wp-widget-media_audio',
  'wp-widget-media_image',
  'wp-widget-media_gallery',
  'wp-widget-media_video',
  'wp-widget-meta',
  'wp-widget-search',
  'wp-widget-text',
  'wp-widget-categories',
  'wp-widget-recent-posts',
  'wp-widget-recent-comments',
  'wp-widget-rss',
  'wp-widget-tag_cloud',
  'wp-widget-nav_menu',
  'wp-widget-custom_html',
  'wp-widget-polylang',
  'wp-widget-calendar',
  'wp-widget-elementor-library',
];
 
add_action( 'elementor/widgets/widgets_registered', function( $widgets_manager ){
  global $elementor_widget_blacklist; 
  foreach( $elementor_widget_blacklist as $widget_name ){
    $widgets_manager->unregister_widget_type( $widget_name );
  }
}, 15);

Строки с названиями виджетов, которые вам нужны, необходимо закомментировать.

Ссылки

1

э в это есть какое-то преимущество, кроме более чистого интерфейса?

Я у себя расширил данный сниппет условиями для разных ролей, чтобы авторы, например, не могли использовать блок цитат, а редакторы могли. Ну и немного быстродействия это тоже добавит. Есть идея сделать из этого плагин за минимальную копеечку.
]]>
https://www.kobzarev.com/wordpress/redux-framework-disable-dev-mode/ Как отключить режим разработки в Redux Framework Кобзарёв Михаил Mon, 04 Mar 2019 10:19:47 +0000

Как отключить режим разработки в Redux Framework

Автора! Проекты Шпаргалки Файлы Карта

Также в левом меню админки в Инструментах всегда болтается ссылка на страницу диагностики Redux Framework.

Чтобы удалить все следы использования фреймворка от пользователя и не пугать его лишними меню и баннерами, если у него случайно окажется включённым дебаг, предлагаю использовать простой сниппет:

/**
 * Отключаем режима разработки
 *
 * @param ReduxFramework $redux
 */
function mihdan_redux_disable_dev_mode( ReduxFramework $redux ) {
    $redux->args['dev_mode'] = false;
    $redux->args['forced_dev_mode_off'] = false;
}
add_action( 'redux/construct', 'mihdan_redux_disable_dev_mode' );

/**
 * Удаляем меню Redux из Инструментов
 *
 * @param string        $page
 * @param Redux_Welcome $welcome
 */
function mihdan_redux_remove_tools_menu( $page, Redux_Welcome $welcome ) {
		remove_submenu_page( 'tools.php', 'redux-framework' );
	}
add_action( 'redux/pro/welcome/admin/menu', 'mihdan_redux_remove_tools_menu', 10, 2 );

Если вы боитесь лезть в код, то специально для таких случаев на официальном сайте проекта есть платное расширение Ad Remover за 60$, которое сделает всё это за вас.

1

Добрый день, некоторое время разбираюсь с Redux ищу плагин аля фрейворк для создания панели настройки сайта на WordPress. Меня интересует настройка комплексных полей, к примеру создаю 1 комплексное поле : в него закидаю пару текстовых полей. изображение. И количество комплексных полей определяетсся менеджером контента. на фронтенде вывожу с помощью цикла.

если не понятно обьяснил то может быть более понятно станет после просмотра этой страницы на кама

 https://wp-kama.ru/plugin/carbon-fields/complex-field и особо комментарий от Oleg он внизу самый длиный и без бороды

Спасибо

В Redux как раз есть платный экстеншн https://redux.io/extension/repeater/

Redux для бэкенда, не для фронтенда. На нём делают страницы настроек тем и плагинов. На Каме сейчас поглядим. Я бы советовал ACF PRO.
]]> https://www.kobzarev.com/projects/mail-ru-pulse-feed/ Плагин Mail.ru Pulse Feed Кобзарёв Михаил Mon, 04 Mar 2019 08:56:38 +0000

Плагин Mail.ru Pulse Feed

Автора! Проекты Шпаргалки Файлы Карта

Mail.ru Pulse Feed — это плагин под WordPress, формирующий ленту для новой рекомендательной системы Пульс от компании Mail.ru. Пульс создает персонализованный контент на базе технологий машинного обучения.

(далее…)1
]]>
https://www.kobzarev.com/wordpress/redux-framework/ Как подключить Redux Framework в свой плагин Кобзарёв Михаил Tue, 26 Feb 2019 12:03:51 +0000

Как подключить Redux Framework в свой плагин

Автора! Проекты Шпаргалки Файлы Карта

Подходит для случаев, когда настроек очень много, для простых же ситуаций лучше использовать нативный Settings API.

На данный момент имеется уже четвертая версия Redux Framework, которая находится на стадии бета-тестирования, вот ее мы и возьмем за основу, так как эта версия фреймворка стала значительно быстрее и полностью соответствует стандартам WPCS.

Для начала добавим Redux Framework как зависимость к нашему проекту в composer.json:

"require": {
    "composer/installers": "*",
    "reduxframework/redux-framework-4" : "*"
},

Выполним установку зависимостей:

composer install

И обнаружим, что фреймворк установился не в папку vendor, как мы расчитывали, а в wp-content/plugins, которая создалась в корне вашего проекта:

Произошло так потому, что у самого Redux Framework в его composer.json укзан тип проекта "type": "wordpress-plugins".

Если вам хочется иметь фреймворк в папке vendor, то придётся немного пошаманить с путями в вашем файле настроек.

Так как плагина Redux Framework 4 пока нет в Packagist, укажем композеру, откуда выкачивать пакет:

"repositories": [
    {
        "type": "package",
        "package": {
            "name": "reduxframework/redux-framework-4",
            "type": "wordpress-plugin",
            "version": "4.0.1",
            "dist": {
                "type": "zip",
                 "url": "https://github.com/reduxframework/redux-framework-4/archive/master.zip"
            },
            "require" : {
                "composer/installers": "*"
            }
        }
    }
]

Укажем, куда устанавливать пакеты с типом wordpress-plugins:

"extra": {
    "installer-paths": {
        "vendor/{$name}/": ["type:wordpress-plugin"]
    }
}

Обычно классы пакетов, которые устанавливаются в папку vendor, не нуждаются в ручном подключении и меппинге, но в Redux Framework не всё как у людей. Поэтому добавим папку с его классами ручками в блок autoload:

"autoload": {
    "classmap": [
         "includes",
         "vendor/redux-framework-4/ReduxCore"
    ]
}

Снова выполним установку пакета, прдварительно удалив папку wp-content:

rm -fr wp-content
composer install

На этом процесс конфигурации композера можно считать завершённым. Пробуем:

Redux::get_option( 'option_name' );

Полную версию composer.json с подключенным Redux Framework вы можете подглядеть в моем плагине для Турбо страниц.

Удачи. Всё будет WordPress!

1

А этот фрейворк поддерживает создание комплексных полей. Я смотрел, как дело обстоит с этой опцией в современной версии понял, что никак. Одновременно с этим я изучал работу с Carbon fields даже в старой версии присутствет complex filds — это наше все. Без этой возможности, фрейворк будет не очень интересным.

Комплексные поля (рипитеры) у них есть отдельным аддоном. Но это же для админки фреймворк. Это не как ACF и Carbon.

]]>
https://www.kobzarev.com/soft/vvv/ Установка Varying Vagrant Vagrants Кобзарёв Михаил Fri, 15 Feb 2019 11:20:08 +0000

Установка Varying Vagrant Vagrants

Автора! Проекты Шпаргалки Файлы Карта

Varying Vagrant Vagrants (VVV) — это опенсорсная конфигурация для Vagrant, сфокусированная на разработку под WordPress.

(далее…)1

Те, кто ставит плохие оценки, поясните в комментах причины, что за не уважение. Спасибо!

]]>
https://www.kobzarev.com/programming/rename-git-local-and-remote-branches/ Как переименовать локальную и удалённую ветку в Git Кобзарёв Михаил Thu, 07 Feb 2019 08:11:51 +0000

Как переименовать локальную и удалённую ветку в Git

Автора! Проекты Шпаргалки Файлы Карта

1. Переименовываем локальную ветку.

Если вы находитесь внутри ветки, которую хотите переименовать:

git branch -m new-name

Если в другой ветке:

git branch -m old-name new-name

2. Удаляем старую ветку из внешнего репозитория и пушим новую локальную ветку.

git push origin :old-name new-name

3. Сбрасываем апстрим для новой локальной ветки.

Переключаемся на ветку и потом:

git push origin -u new-name

1
]]>
https://www.kobzarev.com/wordpress/query-posts/ Почему не следует использовать query_posts() в WordPress Кобзарёв Михаил Fri, 18 Jan 2019 12:12:12 +0000

Почему не следует использовать query_posts() в WordPress

Автора! Проекты Шпаргалки Файлы Карта

Если вы разрабатываете темы и плагины для WordPress, то вы наверняка встречались с функцией query_posts() в многочисленных примерах и уроках в сети. В этой статье мы расскажем почему вам не следует никогда использовать эту функцию.

Основные и вторичные запросы

Основной запрос (или основной цикл) в WordPress это тот, который выполняется на раннем этапе загрузки ядра, он строится из запрошенного URL, настроек постоянных ссылок и т.д. Во время основного запроса WordPress определяет такие параметры как количество записей на страницу, используемый шаблон в теме и прочие. Основной запрос делает сам WordPress.

Вторичный запрос это тот, который выполняется дополнительно к основному. Например:

  • Вывести в боковой колонке список самых популярных записей
  • Вывести выделенные записи в слайдере на главной странице
  • Вывести записи из той же категории в блоке «похожие записи»

Вторичные запросы выполняются с помощью класса WP_Query, или с помощью одной из вспомогательных функций get_posts(), query_posts() и т.д. Если вы не знакомы с WP_Query, советуем прочитать статью.

Основным отличием query_posts() от других вспомогательных функций является то, что query_posts() заменяет основной цикл на новый, вторичный цикл WordPress. Это значит, что в цикле с query_posts() мы можем работать так же, как и в обычном основном цикле.

Для сравнения рассмотрим цикл для вывода популярных записей с помощью WP_Query:

// Вторичный цикл
$popular = new WP_Query( ... );
while ( $popular->have_posts() ) {
    $popular->the_post();

    the_title(); // вывести название
    the_content(); // вывести содержимое
}

Этот же цикл с помощью query_posts():

// Вторичный цикл
query_posts( ... );
while ( have_posts() ) {
    the_post();

    the_title(); // вывести название
    the_content(); // вывести содержимое
}

Безусловно второй вариант выглядит немного чище и привычнее, поскольку такая конструкция чаще всего встречается при работе с основным циклом WordPress.

Именно поэтому разработчики часто думают, что query_posts() изменяет основной запрос WordPress, но это не так. Функция query_posts() заменяет основной цикл новым вторичным циклом, и происходит это после выполнения основного запроса.

$wp_query и $wp_the_query

После выполнения основного запроса WordPress помещает его результат в глобальную переменную $wp_the_query, а в глобальной переменной $wp_query хранится всего лишь ссылка на $wp_the_query. Функции have_posts(), the_post() и прочие работают именно с глобальным объектом $wp_query.

Чтобы в этом убедиться достаточно взглянуть на реализацию подобных функций:

function have_posts() {
    global $wp_query;
    return $wp_query->have_posts();
}

Функция query_posts() создает новый вторичный запрос с помощью WP_Query и помещает результат в эту же глобальную переменную $wp_query:

function query_posts( $query ) {
    $GLOBALS['wp_query'] = new WP_Query();
    return $GLOBALS['wp_query']->query( $query );
}

Таким образом функции, которые предназначены для работы с основным циклом WordPress начинают работать с нашим вторичным запросом, а основной запрос остался в глобальной переменной $wp_the_query, ссылку на которую можно восстановить с помощью функции wp_reset_query().

function wp_reset_query() {
    $GLOBALS['wp_query'] = $GLOBALS['wp_the_query'];
    wp_reset_postdata();
}

После этого, функции have_posts() и другие вновь работают с основным циклом WordPress, но разработчики часто об этом забывают, в результате чего перестает работать пагинация, некоторые виджеты и прочее.

Пагинация

Самым частым результатом использования query_posts() является сломанная пагинация, когда например первые две страницы работают, а третья и четвертая возвращают ошибку 404. Давайте рассмотрим как, и почему это происходит.

По умолчанию WordPress показывает десять записей на одной странице. Допустим у нас всего двадцать записей, это всего две страницы. Изменить количество записей на страницу можно легко с помощью query_posts() в начале нашего шаблона index.php или archive.php:

global $query_string;
query_posts( $query_string . '&posts_per_page=5' );

Таким образом на каждой странице у нас будет пять записей, а не десять, а наш плагин для пагинации будет отображать четыре страницы вместо двух. Все сходится, но при переходе на третью страницу мы получаем ошибку 404. Почему это происходит?

Напоминаем, что основной запрос WordPress происходит еще до того, как обрабатываются шаблоны index.php или archive.php, где происходит наша «подмена». В основном запросе количество записей на страницу — десять, и всего две страницы. Третей и четвертой страниц в основном запросе нет.

Именно основной запрос определяет какой шаблон темы будет использоваться, и при запросе третей или четвертой страницы WordPress будет использовать шаблон 404.php.

Изменение количества записей на страницу это самый простой и явный пример ошибок с query_posts(). Гораздо сложнее подобные ошибки отловить, если вы например исключаете метку или категорию из списка записей на главной, или добавляете произвольный тип записей в поток.

Событие pre_get_posts

Наиболее правильным способом изменить основной цикл WordPress является событие pre_get_posts, которое происходит перед каждым запросом WP_Query. Работать с этим событием можно в плагине или в файле functions.php вашей темы:

function my_pre_get_posts( $query ) {
    if ( ! is_admin() &&amp; $query->is_main_query() ) {
        $query->set( 'posts_per_page', 5 );
    }
}
add_action( 'pre_get_posts', 'my_pre_get_posts' );

Важно отметить, что pre_get_posts вызывается для каждого запроса WP_Query, включая основной запрос, навигационное меню, вторичные запросы в виджетах и прочее. С помощью метода is_main_query() мы изменяем параметры только основного запроса, а с помощью проверки is_admin() мы меняем запрос только на лицевой части сайта и не в административной панели.

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

Альтернативы query_posts()

Если вам необходимо выполнить вторичный запрос в WordPress, воспользуйтесь функцией get_posts() или конструкцией new WP_Query(). При работе с ними ваш код будет более явным и понятным для читающих.

Когда вам необходимо изменить основной запрос WordPress перед его выполнением, самым простым способом является событие pre_get_posts, или фильтр request, который выполняется еще раньше, чем pre_get_posts и только для основного запроса.

Если у вас возникли вопросы про query_posts() или WP_Query, оставьте комментарий и мы обязательно вам ответим.

Визуально

Ссылки

1
Спасибо за статью) про $wp_the_query я не знал)

Теперь знаете, спасибо

Спасибо, в закладки однозначно) раньше бы так кто-то пояснил) особенно про пагинацию.

Передам спасибо Константину Ковшенину

Отлично) ещё бы так же про settings api)

Подобный мануал готовится

]]> https://www.kobzarev.com/wordpress/wp-cli-rewrite/ Отладка правил перезаписи URL в WordPress Кобзарёв Михаил Thu, 10 Jan 2019 16:50:32 +0000

Отладка правил перезаписи URL в WordPress

Автора! Проекты Шпаргалки Файлы Карта

Несомненным лидером для отладки правил перезаписи URL в WordPress всегда являлся плагин Rewrite Rules Inspector , через который можно было увидеть список существующих правил, проверить, под какое правило попадает введённый URL и сбросить правила.

(далее…)1
]]>
https://www.kobzarev.com/programming/grumphp/ GrumPHP Кобзарёв Михаил Thu, 27 Dec 2018 10:07:11 +0000

GrumPHP

Автора! Проекты Шпаргалки Файлы Карта

GrumPHP — это плагин для composer, который регистрирует git хуки в вашем репозитории пакетов. Когда кто-то фиксирует изменения, GrumPHP запускает тесты для этих коммитов. Если тесты не будут пройдены — вы не сможете зафиксировать свои изменения.

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

GrumPHP уже имеет из коробки встроенный набор общих задач, поэтому вы сможете использовать его сразу с минимальной конфигурацией.

Установите GrumPHP самостоятельно и раскройте всю его мощь!

Демонстрация

GrumPHP

Установка

Так как GrumPHP — это плагин для composer, то установить его можно , добавив в качестве зависимости:

composer require --dev phpro/grumphp

После установки пакета GrumPHP прикрепит несколько git хуков к вашему проекту. А в логе composer вы увидите следующее оповешение:

Watch out! GrumPHP is sniffing your commits!

Настройка

Настраивается GrumPHP при помощи файла grumphp.yml или grumphp.yml.dist в корневой директории вшаего проекта.

# grumphp.yml
parameters:
    bin_dir: "./vendor/bin"
    git_dir: "."
    hooks_dir: ~
    hooks_preset: local
    stop_on_failure: false
    ignore_unstaged_changes: false
    hide_circumvention_tip: false
    process_async_limit: 10
    process_async_wait: 1000
    process_timeout: 60
    ascii:
        failed: grumphp-grumpy.txt
        succeeded: grumphp-happy.txt
    tasks:
        ant: ~
        atoum: ~
        behat: ~
        brunch: ~
        clover_coverage: ~
        codeception: ~
        composer: ~
        composer_require_checker: ~
        composer_script: ~
        deptrac: ~
        doctrine_orm: ~
        file_size: ~
        gherkin: ~
        git_blacklist: ~
        git_branch_name: ~
        git_commit_message: ~
        grunt: ~
        gulp: ~
        infection: ~
        jsonlint: ~
        kahlan: ~
        make: ~
        npm_script: ~
        phan: ~        
        phing: ~
        php7cc: ~
        phpcpd: ~
        phpcs: ~
        phpcsfixer: ~
        phpcsfixer2: ~
        phplint: ~
        phpmd: ~
        phpmnd: ~
        phpparser: ~
        phpspec: ~
        phpstan: ~
        phpunit: ~
        phpunitbridge: ~
        phpversion: ~
        progpilot: ~
        psalm: ~
        robo: ~
        securitychecker: ~
        shell: ~
        xmllint: ~
        yamllint: ~
    testsuites: []
    extensions: []

Совместимость

GrumPHP работает с PHP 5.6 и выше и протестирован со следующими git клиентами:

  • CLI Unix
  • CLI Mac
  • CLI Windows
  • PhpStorm Git
  • Atlassian SourceTree
  • Syntevo SmartGit

Ссылки

1
]]>
https://www.kobzarev.com/wordpress/woocommerce-kill-performance/ Не удаляйте product-category из URL в WooCommerce Кобзарёв Михаил Thu, 20 Dec 2018 11:34:31 +0000

Не удаляйте product-category из URL в WooCommerce

Автора! Проекты Шпаргалки Файлы Карта

Коротко о проблеме

WordPress использует /product-category/ (или любое другое из ключевых слов), чтобы определить, что это URL, ведущий к категории товара.

Существует несколько SEO плагинов, которые позволяют удалить эту базу, что, в свою очередь, приводит к ряду проблем с производительностью и дублированием URL-адресов.

Если ваш сеошник требует это всенепеременно сделать — гоните его в шею.

Итог

WordPress будет намного труднее определить, какую страницу вы пытаетесь открыть, когда вводите URL-адрес категории товара.

Также следует понимать, что стандартная «Страница» в WordPress не имеет базового префикса в URL. Например:

# URL стандартной страницы
http://yoursite.com/about-page/

# URL, ведущий на категорию товара
http://yoursite.com/product-category/category-x/ (this is the URL leading to a product category)

Что произойдёт, если мы удалим префикс product-cat из URL?

# URL стандартной страницы
http://yoursite.com/about-page/

# URL, ведущий на категорию товара
http://yoursite.com/category-x/

WordPress придётся проделать гораздо больше работы, тратя ресурсы, чтобы определить, какую страницу вы ищете при вводе одного из указанных выше URL-адресов.

Вот почему НЕ рекомендуется использовать любой SEO плагин и сниппеты из интернета для удаления базовых префиксов.

1

Михаил, хотелось бы услышать комментарий по поводу ПЕРЕИМЕНОВАНИЯ product-category ( эта возможность заложена из коробки в Постоянные ссылки-Постоянные ссылки товаров), скажем в category?

Мне это актуально, при переделке существующего проиндексированного сайта на другой CMS, чтобы сохранить структуру проиндексированных ссылок.

Изменять само собой можно, так как в этом случае правила перезаписи создаются в момент сохранения настроек постоянных ссылок и записываются в базу данных.
]]>
https://www.kobzarev.com/wordpress/acf-optimization/ Оптимизация плагина ACF Кобзарёв Михаил Thu, 13 Dec 2018 18:11:53 +0000

Оптимизация плагина ACF

Автора! Проекты Шпаргалки Файлы Карта

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

Экспорт полей в РНР

Для начала экспортируем имеющиеся поля в виде PHP кода. Для чего переходим по пути Группы полей → Инструменты, отмечаем чекбокс Выбрать все и нажимаем кнопку Генерировать РНР.

Копируем полученный код и вставляем его в файл functions.php вашей активной темы, используя рекомендуемый хук acf/init:

add_action( 'acf/init', function() {
    acf_add_local_field_group( array( ... ) );
} );

Отключение GUI в ACF

Так как все поля у нас теперь инициализируются через РНР, то управлять ими через админку нам более не требуется, поэтому отключим данный интерфейс при помощи хука acf/settings/show_admin внутри файла functions.php вашей активной темы:

add_filter( 'acf/settings/show_admin', '__return_false' );

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

Удаление лишних записей в базе данных

Внутренняя архитектура плагина ACF такова, что для хранения одного поля у одного поста используется две метазаписи в базе данных. Одна содержит информацию о самом поле, вторая — значение этого поля.

После переноса всех полей в само приложение информация о поле в базе данных нам больше не нужна, поэтому мы может ее удалить.

Перед началом работы с базой данных — сделайте её полный бекап.

Бекап делаем при помощи WP-CLI:

wp db export

После создания бекапа, открываем консоль MySQL, куда будем вводить SQL запросы:

wp db cli

Удаление полей у записей

Ищем поля, которые начинаяются на _field_ и удаляем их:

DELETE FROM wp_postmeta WHERE meta_key like '\_field\_%' LIMIT 100000;

Удаление полей у пользователей

Ищем поля, которые начинаяются на _field_ и удаляем их:

DELETE FROM wp_usermeta WHERE meta_key like '\_field\_%' LIMIT 100000;

Отключение плагина ACF во фронтенде

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

Копируем следующий код и вставляем его в файл _disable-acf-on-frontend.php (подчеркивание в начале нужно, чтобы файл подключился в самом начале загрузки плагинов WordPress) в папке wp-content/mu-plugins:

/**
* Удаляем плагин ACF во фронтенде
*
* @param array $plugins Массив всех плагинов
* @return array
*/
function mihdan_disable_acf_on_frontend( $plugins ) {
    if ( is_admin() || wp_is_json_request() || wp_is_jsonp_request() ) {
        return $plugins;
    }
 
    foreach( $plugins as $key => $plugin ) {
        if ( 'advanced-custom-fields-pro/acf.php' === $plugin ) {
            unset( $plugins[ $key ] );
        }
    }
 
    return $plugins;
}
add_filter( 'option_active_plugins', 'mihdan_disable_acf_on_frontend' );

Теперь, чтобы вывести поля нужно использовать стандартные функции ядра get_post_meta, get_term_meta, get_user_meta вместо функции get_filed из набора ACF.

Чтиво

Комментарии приветствуются.

1

Ещё пару вопросов:

1) А для чего удалять в базе — они же не будут использоваться. Просто что бы уменьшить размер базы?


2) «add_filter( ‘acf/settings/show_admin’, ‘__return_false’ );» вставляем после php кода от ACF или без разницы? Просто не происходит отключение интерфейса. Как слева стоит плагин, так всё и осталось.


3) Отключение плагина ACF во фронтенде — правильно ли я понимаю, что после отключения придётся дописывать код, что бы вывести поля? Т.е. Уже ранее работающие поля перестанут работать? Что даёт данный шаг и на сколько высока его необходимость?

1. Размер базы уменьшаяется ровно в два раза, это актуально на больших нагруженных сайтах. В простых блогах — это не актуально.

2. Этот код надо вставить в любое место functions.php или вашего плагина.

3. Не тратится память на инициализацию плагина и его переменных (8-30 мб), нет множества запросов в базу. Чтобы увидеть разницу — возьмите сайт с плагином и сделайте нагрузочный тест на 30к запросов, например. Потом «выключите» плагин на фронте и повторите действия — разница будет заметна не вооруженным глазом. Тут надо просто его глубоко попрофилировать через xdebug и сразу увидидите сколько памяти и на что тратит плагин на фронте. Метод the_field() перестанет работать, но вместо него можно использовать стандартные get_post_meta() и get_term_meta().

В первом пункте вы написали:

используя рекомендуемый хук acf/init:

add_action(
    'acf/init',
    function() {
        acf_add_local_field_group( array( ... ) );
    }
);

объясните пожалуйста что это значит??? Если вы имели ввиду то, что нужно поставить сгенеррированный из ACF PHP код заместо «…» то происходит крах сайта.

Почему нельзя просто скопировать то, что сгенеррируется из ACF сразу в functions.php?

ACF при экспорте полей в РНР не добавляет туда хук, а без него вы словите фатал, если ваш код запустится раньше инициализации самого плагина ACF (когда вы пишите свой плагин) или плагин ACF у вас будет деактивирован, например, если делаете отладку в WordPress

Спасибо за ответ!

Это действительно классно, когда разработчик отвечает, особенно если ответ в адекватный срок (не через год).


Приведите пожалуйста пример того, как нужно поставить PHP код из ACF используя хук acf/init — я не совсем понимаю то, как это нужно сделать.

Заранее спасибо. Добавил ваш сайт в закладки — отличная инфа!

Например, так:
add_action(
	'acf/init',
	function () {
		acf_add_local_field_group(
			array(
				'key'                   => 'group_5ddd61bb6026f',
				'title'                 => 'Главная страница',
				'fields'                => array(
					array(
						'key'               => 'field_5ddd626b2fca4',
						'label'             => 'Блок с описанием',
						'name'              => '',
						'type'              => 'tab',
						'instructions'      => '',
						'required'          => 0,
						'conditional_logic' => 0,
						'wrapper'           => array(
							'width' => '',
							'class' => '',
							'id'    => '',
						),
						'placement'         => 'top',
						'endpoint'          => 0,
					),
					array(
						'key'               => 'field_5ddd620c2fca2',
						'label'             => 'Текст',
						'name'              => 'tekst',
						'type'              => 'wysiwyg',
						'instructions'      => '',
						'required'          => 0,
						'conditional_logic' => 0,
						'wrapper'           => array(
							'width' => '',
							'class' => '',
							'id'    => '',
						),
						'default_value'     => '',
						'tabs'              => 'all',
						'toolbar'           => 'basic',
						'media_upload'      => 0,
						'delay'             => 0,
					),
				),
				'location'              => array(
					array(
						array(
							'param'    => 'page_type',
							'operator' => '==',
							'value'    => 'front_page',
						),
					),
				),
				'menu_order'            => 0,
				'position'              => 'normal',
				'style'                 => 'default',
				'label_placement'       => 'top',
				'instruction_placement' => 'label',
				'hide_on_screen'        => array(
					0 => 'permalink',
					1 => 'the_content',
					2 => 'revisions',
					3 => 'slug',
					4 => 'author',
					5 => 'page_attributes',
				),
				'active'                => true,
				'description'           => 'Опции главной страницы',
			)
		);
	}
);

Вариант с отключением плагина во фронте не срабатывает. Функция плагина остаются доступными и возвращают значения при обращении.

В примере сниппет для плагина ACF PRO

Да, я это заметил. Но моя ошибка была в другом. Я вставил фильтр в functions.php темы, но не как mu plugins. Значение active_plugins менялось после того, как плагины уже были прогружены. Спасибо!

Не за что, пользуйтесь!

В коде ошибки

wp_is_json_request наверное wp_is_json_request()?


$i навероное $key?


Или это защита от копипасты? ))


Спасибо, исправил

Отключение на фронте что конкретно дает в плане производительности?

Не тратится память на инициализацию плагина и его переменных (8-30 мб), нет множества запросов в базу.


Чтобы увидеть разницу — возьми сайт с плагином и сделай нагрузочный тест на 30к запросов, например.


Потом «выключи» плагин на фронте и повтори действия — разница будет заметна не вооруженным глазом.


Тут надо просто его глубоко попрофилировать через xdebug и сразу увидишь сколько памяти и на что тратит плагин на фронте.

Спасибо! Ваша статья по поводу «попрофилировать через xdebug и сразу увидишь сколько памяти и на что тратит плагин на фронте.» была бы очень всем полезна.

Спасибо, я учту ваши пожелания в будущих постах.
]]> https://www.kobzarev.com/wordpress/removing-post-not-in/ Повышение производительности запросов в WordPress путем удаления post__not_in Кобзарёв Михаил Fri, 07 Dec 2018 12:43:29 +0000

Повышение производительности запросов в WordPress путем удаления post__not_in

Автора! Проекты Шпаргалки Файлы Карта Вместо такого кода, например:
$array_of_post_ids_to_skip = array(
1,
7,
29,
);
$limit = 16;
$other_posts_in_tag = get_posts( array(
'tag_id'           => $tag_id,
'posts_per_page'   => $limit,
'post__not_in'     => $array_of_post_ids_to_skip,
'suppress_filters' => false,
));

foreach ( $other_posts_in_tag as $post ){
// здесь сама логика;
}
Можно сделать такой хак — взять постов больше на размер массива $array_of_post_ids_to_skip и потом уже в цикле на PHP отбросить исключаемые посты:
$array_of_post_ids_to_skip = array(
1,
7,
29,
);
$limit = 16;
$other_posts_in_tag = get_posts( array(
'tag_id'           =>  $tag_id,
'posts_per_page'   => $limit + count( $array_of_post_ids_to_skip ),
'suppress_filters' => false,
));

foreach ( $other_posts_in_tag as $post ){
if ( in_array( $post, $array_of_post_ids_to_skip ) ){
continue;
}
// здесь сама логика;
}

Ссылки

1

А как правильно сделать с таким кодом по Вашему примеру

global $wp_query;

   $svifi = get_the_title();

   $pag = (isset($_GET[‘pages’])) ? $_GET[‘pages’] : 1;

   $args = ( array(

   ‘s’ => $svifi,

   ‘sentence’ => true,

   ‘posts_per_page’ => 5, // сколько похожих постов нужно вывести,

   ‘post_type’ => ‘post’,

   ‘paged’ => $pag,

   ‘post__not_in’ => array($post->ID), //Не выводить текущую запись

   ‘orderby’=>date, // Условие сортировки рандом

) );

$my_query = new WP_Query( $args );


if( $my_query->have_posts() ) :


phpinfo()

Ну и еще потребуется дополнительная проверка: если нам в наборе попался наш текущий ID, то использовать шестой элемент, если нет, то шестой не использовать.

Игорь, спасибо за дополнение!

posts_per_page = 6 (на одну больше, чем требуется)

и в цикле if ( $post->ID === get_the_ID() ) { continue; }

Я делал так для пагинации, поэтому еще дополнительно вычислял offset. Да, метод хорош

Прирост очень сильно заметен на высоконагруженных страницах — прям сильно заметен!

]]>
https://www.kobzarev.com/plugins/wp-inspect/ WP Inspect Кобзарёв Михаил Tue, 04 Dec 2018 11:41:05 +0000

WP Inspect

Автора! Проекты Шпаргалки Файлы Карта

Динамичность

В режиме реального времени WP Inspect дополняет страницу, чтобы показать, какие события и фильтры выполняются в течение жизненного цикла данной страницы.

Фильтры

Вы хотите исследовать фильтр the_title? Нет проблем!

Детали детали…

Из коробки плагин WP Inspect предоставляет множество подробностей о каждом хуке.

Поиск

Встроенная поисковая система lucene обеспечивает безумно быструю фильтрацию.

Полностью настраиваемый

Изменяйте настройки в соответствии с технологическим процессом разработки.

Ущипните себя

Возможность исключать или смотреть хуки с помощью подстановочных знаков! Да, это так круто, как кажется!

Ссылки

1
]]>
https://www.kobzarev.com/wordpress/disable-plugins-for-rest/ Отключение плагинов при REST запросах в WordPress Кобзарёв Михаил Mon, 19 Nov 2018 09:48:52 +0000

Отключение плагинов при REST запросах в WordPress

Автора! Проекты Шпаргалки Файлы Карта

WordPress REST API — это логичное продолжение любой взрослой CMS, которую можно использовать как фреймворк или как бэкенд для мобильного или десктоп приложения.

(далее…)1
]]>
https://www.kobzarev.com/linux/remove-big-direcory-linux/ Как быстро удалить большую папку в linux Кобзарёв Михаил Tue, 13 Nov 2018 10:48:16 +0000

Как быстро удалить большую папку в linux

Автора! Проекты Шпаргалки Файлы Карта

Открою маленький секрет: ни один из предложенных вами вариантов не сработает быстро, кроме вот такого:

# Создаем пустую папку
mkdir empty_dir

# Синхронизируемся с пустой папкой
rsync -a --delete empty_dir/ dir_with_files/
1
rm -R dir чем не подходит ?
Вы условия задачи посмотрите и померяйте по скорости. rm -r у меня полчаса работал так и не выполнил задачу.
Я бы всё же использовал «find . -delete», так как он лишь немного медленнее, но позволяет к примеру не удалять файлы с определенным расширением или оставить папки.
Я перепробовал массу вариантов на реальных данных и способ, описанный в статье, оказался самым быстрым.
]]>
https://www.kobzarev.com/linux/mysql-slow-query-log/ Как включить лог медленных запросов в MySQL Кобзарёв Михаил Tue, 23 Oct 2018 17:37:31 +0000

Как включить лог медленных запросов в MySQL

Автора! Проекты Шпаргалки Файлы Карта

Чтобы включить лог медленных запросов, достаточно открыть конфигурационный файл MySQL my.cnf:

sudo nano /etc/mysql/my.cnf

и раскомменитровать/добавить там строки:

slow-query-log      = 1
slow-query-log-file = /var/log/mysql/mysql-slow.log
long_query_time     = 3
log-queries-not-using-indexes
  • в опции slow_query_log указывать путь к файлу, в котором будет храниться лог запросов
  • в опции long_query_time указывать минимальное время выполнения запроса, после которого он считается медленным в секундах

Далее необходимо перезапустить MySQL-сервер:

/etc/init.d/mysql restart

Теперь в файл /var/log/mysql/mysql-slow.log начнут записываться медленные запросы, которые можно наблюдать в режиме реального времени при помощи утилиты tail:

tail -f /var/log/mysql/mysql-slow.log

Ротация логов

Со временем лог медленных запросов увеличиться и забьет собой всё свободное пространство.

Чтобы этого не произошло, необходимо cделать ежесуточную ротацию при помощи утилиты logrotate, которая сгруппирует логи по времени и сожмёт их архиватором, что значительно уменьшит конечный размер файлов журнала.

Для настройки logrotate добавьте в файл конфигурации /etc/logrotate.d/mysql-server следующий код:

/var/log/mysql/mysql-slow.log {
	daily
	rotate 7
	missingok
	create 640 mysql adm
	compress
	sharedscripts
	postrotate
	test -x /usr/bin/mysqladmin || exit 0
	# If this fails, check debian.conf!
	MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf"
	if [ -z "`$MYADMIN ping 2>/dev/null`" ]; then
		# Really no mysqld or rather a missing debian-sys-maint user?
		# If this occurs and is not an error please report a bug.
		#if ps cax | grep -q mysqld; then
		if killall -q -s0 -umysql mysqld; then
			exit 1
		fi
	else
		$MYADMIN flush-logs
	fi
endscript
}

Анализ логов

Проанализировать полученные логи можно при помощи утилиты pt-query-digest из пакета percona-toolkit.

Устанавливаем пакет percona-toolkit:

sudo apt-get install percona-toolkit

После накопления достаточного для анализа количества запросов, можно использовать утилиту pt-query-digest:

pt-query-digest /var/log/mysql/mysql-slow.log

Можно также результат анализа сохранить в файл для последующего разбора полётов:

pt-query-digest /var/log/mysql/mysql-slow.log > slowlog.txt
1

Забыл упомянуть об pt-query-digest, который позволяет очень удобно работать с этими логами.

Спасибо, Артём, за годную утилиту, взял на вооружение и добавил краткое описание в пост.

Я же не админ, мне простительно. Спасибо, погляжу, что это за утилита и добавлю в пост.

]]> https://www.kobzarev.com/wordpress/template_redirect-is-not-for-loading-templates/ Не используйте template_redirect для загрузки своих шаблонов Кобзарёв Михаил Mon, 22 Oct 2018 22:09:25 +0000

Не используйте template_redirect для загрузки своих шаблонов

Автора! Проекты Шпаргалки Файлы Карта

Событие template_redirect не зря является популярным хуком в WordPress. Когда оно запускается, WordPress уже сделал свой основной запрос. Все объекты были созданы, но данные не были отправлены в браузер.

Это ваша последняя и лучшая точка для перенаправления пользователя на другой URL, но самое плохое место для загрузки альтернативного шаблона.

(далее…)1

указывайте источник перевода!

Спасибо, после редизайна плашка как у Хабра с обозначением перевода и ссылкой на источник ушла в небытие. Добавил в конце поста.
]]>
https://www.kobzarev.com/wordpress/get-woocommerce-customer-billing-phone/ Как получить покупателя в WooCommerce по номеру телефона Кобзарёв Михаил Wed, 17 Oct 2018 10:23:54 +0000

Как получить покупателя в WooCommerce по номеру телефона

Автора! Проекты Шпаргалки Файлы Карта
/**
 * Получение объекта покупателя
 * по телефону
 *
 * @param string $phone телефон
 *
 * @return WC_Customer|bool
 */
function mihdan_get_customer_by_billing_phone( $phone ) {
	global $wpdb;

	$phone = trim( $phone );

	$customer_id = $wpdb->get_var( $wpdb->prepare( "
		SELECT user_id 
		FROM $wpdb->usermeta 
		WHERE meta_key = 'billing_phone'
		AND meta_value = '%s'
	", $email ) );

	if ( ! $customer_id ) {
		return false;
	}

	$customer = new WC_Customer( $customer_id );

	if ( ! $customer ) {
		return false;
	}

	return $customer;
}

Использовать эту функцию достаточно просто:

$customer = mihdan_get_customer_by_billing_phone( '89101510855' );

Функция вернёт либо false, если покупатель не найден, либо объект WC_Customer object.

Получив однажды объект WC_Customer, можно использовать его внутренние методы:

$billing_email = $customer->get_billing_email();
$billing_first_name = $customer->get_billing_first_name();
$id = $customer->get_id();

Данные методы работают в WooCommerce 3.0.0 и выше. В более низких версиях функция продолжит возвращать объект покупателя, но без дополнительных методов.

Ссылки

1
]]>
https://www.kobzarev.com/projects/mihdan-elementor-yandex-maps/ Mihdan: Elementor Yandex Maps Кобзарёв Михаил Fri, 12 Oct 2018 09:49:18 +0000

Mihdan: Elementor Yandex Maps

Автора! Проекты Шпаргалки Файлы Карта

Elementor Yandex Maps — плагин под WordPress от вашего покорного слуги, расширяющий конструктор страниц Elementor путём добавления нового виджета с Яндекс.Картой.

(далее…)1

Михаил, огромная благодарность за плагин! Ничего подобного не встречал, очень понравилась возможность передавать координаты с помощью произвольных полей, именно этого не хватало на многих проектах.

Михаил, есть вопрос по поводу множества меток на карте, есть кейс агентства недвижимости и нужно отобразить метки на все объекты (квартиры, дома). Каким образом это можно реализовать? Динамически не получиться, подтянуть из всех записей?

Спасибо! Метки — это произвольный тип записей? Координаты хранятся у них в произвольных полях? Нет ли у вас примеров любого плагина, где работает как вам нужно, я просто не могу придумать как это интерфейсно реализовать?

По сути я переделываю вот этот сайт: https://gulfstream.ltd/sale/resale/ текущий вариант не я делал и он на MODX. Не могу сказать как разработчики реализовали это. Пока не придумал универсальный метод вашего плагина, но в моём случае, возможно перебор произвольных полей (где будут координаты) в определенной рубрике, резльтат перебра — массив из координат меток. После чего в цикле создается метка и вставляется на карту. Как-то так наверное. Это конечно частный случай, далеко не на каждом сайте востребовано. Интерфейсно можно 2 настройки сделать, например если это адреса офисов например на странице сайта «Контакты», то координаты меток или адреса можно брать из произвольного поля, в виде списка. А если как в моём случае, то с указанием таксономии и полей где координаты на странице записи. Сумбурно кажется описал, надеюсь вы уловили мысль)

Я понял, что вы хотите реализовать и меня уже два человека до вас просили об этой возможности. Но быстро я не смогу это сделать. Вам когда это нужно? Я пока вижу один вариант — создать textarea, куда можно воткнуть JSON с метками. А второй вариант сделать возможность выбрать источник меток: из поля, как сейчас и указать post_type с custom fields.

Вообще срок до понедельника. В любом случае даже с текущим функционалом это возможно реализовать, даже если и вручную (не так много объектов недвижимости). Если реализуете этот дополнительный функционал, то будет просто отлично! Как вариант, дополнительные функции можно добавить например в Pro версию плагина)

До понедельника точно не сделаю, за идея для ПРО-версии спасибо)

После последних обновлений слетели метки на карте из-за того что теперь нельзя из ставить динамически — http://prntscr.com/or5m7w . Будут ли правки или лучше откатиться за старую версию плагина?

Побудьте пока на старой версии, я постараюсь оперативно решить вопрос. Есть возможность пообщаться в Телеграм?

Доброе утро. После последнего обновления карта не отображается. На экране просто серый прямоугольник. Ключ API добавлен. Даже попробовал второй, новый создать. Сайт http://raftingsochi.ru. Подскажите, пожалуйста, в какую сторону копать, чтобы обратно заработало?

Что касается именно указанного сайта, дело не в обновлении плагина. У вас WP Super Cache поставил инициализацию моих скриптов выше jQuery. Попробуйте на время отключить кэширование, проверить и мне отписаться. Вы пока это сделайте, а я попробую выпустить обновление, чтобы обойти это ограничение.

Спасибо за оперативный ответ. Деактивировал плагин WP Fastest Cache. Откатился на 1.2.2. Пока без изменений.


В 1.3 ошибка исправлена

Поставьте предыдущую версию плагина и НИКОГДА не играйтесь с бета-версиями на продуктовых серверах, ТОЛЬКО на тестовых. Последнее обновление это какое? 1.2.4 или 1.3? И что вы видите в консоли браузера по клавише F12?

Обновлялся в WP прямо. Перестало работать после 1.2.4. Одновременно обновился плагин Ultimate Addons for Gutenberg.


В течении часа выйдет обновление пока на GitHub, надо будет качнуть архив и установить руками, к вечеру будет обновлении на wp.org.

Качнул обновление. Установил. Вижу версию 1.3. Видимость карты восстановлена. Ура!!! Но теперь нет возможности поставить метку на карте, в меню Содержимое — Метки просто пусто.

Всмысле пусто? У метки три поля: заголовок, тело и футер

PS: нашел причину: были ошибки в JS, в 1.3 исправлено!

Без возможности вставлять адрес динамически из произвольных полей, к сожалению ценности данного плагина не вижу.

В версии 1.2.4 такая возможность добавлена.

Спасибо, но для скачивания пока недоступно?

Можете пока поставить из архива, я ближе к вечеру постараюсь релиз на wp.org сделать.

Поставил, пока не работает карта — http://prntscr.com/od5vc4

Вы ключ api вбили?

Да, проблема была в api, спасибо. Всё работает отлично. Завтра скину на кофе.

Версия 1.2.4 успешно залита на wp.org

Отлично, скинул на кофе. Подскажите, есть в планах сделать возможность добавления на карту своих иконок для пина?

Кофе уже попил, спасибо. Прямо сейчас занимаюсь вопросом для вставки своих картинок под пины. В следующем релизе будет точно. Следить за задачами и ходом их выполнения можно в Проекте на Гитхабе.

Пины пожалуйста тоже сделайте динамические.

Они и так динамические жеж.

Их пока нет, поэтому я не в курсе)

Добавил кластеризацию и еще больше типов меток и их настроек.
Спасибо 🙂
Такой функционал уже реализовывается в новой версии, стоит только немного подождать. Даи плагин бесплатный, поддержите донатом — будем развивать!

Добрый день. Карта почему то не отображается на мобильных устройствах. Подскажите пожалуйста в чем может быть проблема?

Нет блока или он пустой? Сайт можете показать?

Доброго времени! Михаил, у меня аналогичная проблема. Блок есть, он пустой. Заполнен пиктограммой.

Подскажите пожалуйста, как наладить.

Страница:

http://www.seminrus.ru/kontakty/

У вас сайт на wp.com расположен? Вижу сейчас две ошибки: jQuery грузится с wp.com и ниже моего плагина, это очень странно. Или у вас типа Jetpack что-то? Плюс в консоли еще одна ошибка по поводу navmenu-addon-for-elementor. Есть возможность в ТГ пообщаться?

Извините, что такое ТГ?

Почту за честь пообщаться как угодно)

Вы все верно описали, проблема, как всегда, в голове. Не зная броду, не лезь в воду. Но приходиться лезть без знаний и навыков. Буду очень признателен, если поможете)

ТГ — телеграм, я там @mihdan

Возможно ли добавлять свои маркеры в код по образцу Яндекса https://tech.yandex.ru/maps/jsbox/2.1/icon_customImage

Добрый день, Елена

В текущей версии нет, но скорее всего в следующей это будет.

Голосовать можно тут — https://github.com/mihdan/mihdan-elementor-yandex-maps/issues/1

Здравствуйте! Плагин отлично работает, но хотелось бы добавлять свою иконку. Если можно, подскажите как сделать. Пробовала вставить подобный код, но не работает

{
    // Необходимо указать данный тип макета.
    iconLayout: 'default#imageWithContent',

    // Своё изображение иконки метки.
    iconImageHref: 'images/ball.png',

    // Размеры метки.
    iconImageSize: [48, 48],

    // Смещение левого верхнего угла иконки относительно
    // её "ножки" (точки привязки).
    iconImageOffset: [-24, -24],

    // Смещение слоя с содержимым относительно слоя с картинкой.
    iconContentOffset: [15, 15],
    
    // Макет содержимого.
    iconContentLayout: MyIconContentLayout

}

Пример из яндекса

плагин очень понравился, работает на ура, если бы он еще умел рассчитывать стоимость на основе расстояния, цены бы ему не было!

Не совсем понял по рассчету расстояния, можете подробнее?

например в песочнице яндекса есть пример расчета стоимости доставки. Было бы неплохо добавить в плагин этот функционал. Конкретно у меня стоит задача расчета стоимости пассажирских перевозок. я получаю расстояния и вывожу в балун стоимость поездки (отдельным параметром передаю стоимость 1 км для каждого вида транспорта). Для себя эту задачу я решил используя тег html в elementor, но думаю, я не один такой, для многих актуален вопрос расчета стоимости исходя из километража. Еще раз огромное спасибо за плагин!

Покажите пример, пожалуйста

попытался прикрепить код, но он очень большой, не отправляется ответ((

Код крепите на gist, codepen… А сюда ссылку, если он большой

извините за столь поздний ответ

Возможно, релизуем, если кому-то кроме вас оно тоже понадобится. У вас очень специфичный кейс.

пока что сайт на локальном сервере, файлы сюда прикрепить нельзя, а копировать код…..получится очень много текста, может быть можно отправить файлы на электронную почту?

Я про пример в Яндекс 😉

Очень крутой плагин! В Рунете, да и в СНГ однозначно нужен каждому, кто делает сайты на Elementor.
Максим, спасибо за лестный отзыв!
]]> https://www.kobzarev.com/wordpress/add-an-empty-cart-button-in-woocommerce/ Добавляем кнопку очистки корзины в WooCommerce Кобзарёв Михаил Fri, 05 Oct 2018 14:55:02 +0000

Добавляем кнопку очистки корзины в WooCommerce

Автора! Проекты Шпаргалки Файлы Карта

Откройте файл functions.php, находящийся в активной теме вашего сайта по пути wp-content/themes/ваша_тема/ и добавьте этот код в конец данного файла:

function mihdan_wc_empty_cart_button() {
	echo '<a href="' . esc_url( add_query_arg( 'empty_cart', 'yes' ) ) . '" class="button" title="' . esc_attr( 'Empty Cart', 'woocommerce' ) . '">' . esc_html( 'Empty Cart', 'woocommerce' ) . '</a>';
}
add_action( 'woocommerce_cart_coupon', 'mihdan_wc_empty_cart_button' );

Этот код добавит кнопку очистки корзины справа от кнопки применения купона.

Осталось добавить обработчик данной кнопки и плов готов:

function mihdan_wc_empty_cart_action() {
	if ( isset( $_GET['empty_cart'] ) && 'yes' === esc_html( $_GET['empty_cart'] ) ) {
		WC()->cart->empty_cart();

		$referer  = wp_get_referer() ? esc_url( remove_query_arg( 'empty_cart' ) ) : wc_get_cart_url();
		wp_safe_redirect( $referer );
	}
}
add_action( 'wp_loaded', 'mihdan_wc_empty_cart_action', 20 );

После клика на такую кнопку-ссылку корзина будет полностью очищена и вас перенаправит обратно на страницу с корзиной.

Ссылки

1
]]>
https://www.kobzarev.com/wordpress/debugging-wp-mail/ Отладка wp_mail в WordPress без плагина Кобзарёв Михаил Mon, 01 Oct 2018 08:08:17 +0000

Отладка wp_mail в WordPress без плагина

Автора! Проекты Шпаргалки Файлы Карта

Вся сложность отладки заключается в том, что wp_mail возвращает true или false в зависимости от результата функции, по которым невозможно понять, что же пошло не так.

Включение журналирования

Перед началом отладки необходимо включить запись всех ошибок в журнал WordPress. Для чего добавьте/измените значение специальных констант в файле конфигурации wp-config.php:

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

Теперь все ошибки, предупреждения и уведомления будут записываться в файл debug.log, расположенный в папке wp-content.

Более подробно о включении режима отладки и константах смотрите в статье «Дебаг в WordPress«.

Отладка wp-mail

В WordPress 4.4 появился замечательный хук wp_mail_failed, которым мы и воспользуемся. Для чего добавьте в файл functions.php вашей активной темы следующий сниппет:

function mihdan_debug_wp_mail( $wp_error ) {
    return error_log( print_r( $wp_error, true ) );
}
add_action( 'wp_mail_failed', 'mihdan_debug_wp_mail', 10, 1 );

Благодаря данному сниппету, вся информация об ошибках внутри wp_mail будет записана журнал ошибок WordPress, который мы включили ранее.

1
]]>
https://www.kobzarev.com/wordpress/gutenberg-hooks/ Полезные хуки редактора Gutenberg Кобзарёв Михаил Wed, 22 Aug 2018 10:09:02 +0000

Полезные хуки редактора Gutenberg

Автора! Проекты Шпаргалки Файлы Карта

Gutenberg — это новый брендовый интерфейс от Automattic, который призван изменить способ взаимодействия пользователя с WordPress.

(далее…)1

Недавно нашла прикольну тулзу для Gutenberg, называется Getwid Blocks. Окола 40 кастомных блоков бесплатно!

Очень часто их использую в работе, так как CSS применяю крайне редко. Возможно, кому-то будет это полезно.


Спасибо, записал.

Привет, как для конкретной страницы отключить не Гутенберг а его заголовок или сместить его например вниз, чтобы сначала шел Слайдер?

Зависит от темы, проще сам шаблон поправить.
]]>
https://www.kobzarev.com/programming/idea-gitignore/ Как удалить папку .idea из git-репозитория Кобзарёв Михаил Fri, 10 Aug 2018 11:41:50 +0000

Как удалить папку .idea из git-репозитория

Автора! Проекты Шпаргалки Файлы Карта
# Добавить папку в игнор-лист гита
echo '.idea' >> .gitignore

# Удалить папку из стейджинга
git rm -r --cached .idea

# Добавить файл в гит
git add .gitignore

# Зафиксировать изменения
git commit -m 'Удалил папку .idea из репозитория'

# Запушить в репу
git push

Сами ребята из JetBrains рекомендуют такой файл .gitignore:

# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf

# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml

# Gradle
.idea/**/gradle.xml
.idea/**/libraries

# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn.  Uncomment if using
# auto-import.
# .idea/modules.xml
# .idea/*.iml
# .idea/modules

# CMake
cmake-build-*/

# Mongo Explorer plugin
.idea/**/mongoSettings.xml

# File-based project format
*.iws

# IntelliJ
out/

# mpeltonen/sbt-idea plugin
.idea_modules/

# JIRA plugin
atlassian-ide-plugin.xml

# Cursive Clojure plugin
.idea/replstate.xml

# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties

# Editor-based Rest Client
.idea/httpRequests
1
]]>
https://www.kobzarev.com/wordpress/delete-expired-coupons-automatically/ Автоматически удаляем просроченные купоны в WooCommerce Кобзарёв Михаил Thu, 02 Aug 2018 11:05:10 +0000

Автоматически удаляем просроченные купоны в WooCommerce

Автора! Проекты Шпаргалки Файлы Карта

Откройте functions.php вашей активной темы и добавьте следующий код в конец этого файла:

/**
 * Запланируем ежедневную задачу
 */
function schedule_delete_expired_coupons() {
	if ( ! wp_next_scheduled( 'delete_expired_coupons' ) ) {
		wp_schedule_event( time(), 'daily', 'delete_expired_coupons' );
	}
}
add_action( 'init', 'schedule_delete_expired_coupons' );

/**
 * Удалим в корзину просроченные купоны
 */
function delete_expired_coupons() {
	$args = array(
		'posts_per_page' => -1,
		'post_type'      => 'shop_coupon',
		'post_status'    => 'publish',
		'meta_query'     => array(
			'relation'   => 'AND',
			array(
				'key'     => 'expiry_date',
				'value'   => current_time( 'Y-m-d' ),
				'compare' => '<='
			),
			array(
				'key'     => 'expiry_date',
				'value'   => '',
				'compare' => '!='
			)
		)
	);

	$coupons = get_posts( $args );

	if ( ! empty( $coupons ) ) {
		$current_time = current_time( 'timestamp' );

		foreach ( $coupons as $coupon ) {
			wp_trash_post( $coupon->ID );
		}
	}
}
add_action( 'delete_expired_coupons', 'delete_expired_coupons' );

Этот сниппет автоматически переместит в корзину все просроченные купоны в вашем магазине. Для окончательного их удаления нужно будет произвести всего один клик — щёлкнуть кнопку «Очистить корзину».

Если вам лень делать клик, то и этот процесс можно автоматизировать, добавив true вторым параметром в функцию wp_trash_post, этим мы скажем удалять купоны в обход корзины:

wp_delete_post( $coupon->ID, true );

Удалённые таким способом купоны невозможно будет восстановить в будущем.

Так как в сниппете используется стандартный крон WordPress, убедитесь для начала, что он у вас не отключен.

Ссылки

1
]]>
https://www.kobzarev.com/wordpress/wp-me-cpt/ WP.me для пользовательских типов записей Кобзарёв Михаил Tue, 31 Jul 2018 12:25:37 +0000

WP.me для пользовательских типов записей

Автора! Проекты Шпаргалки Файлы Карта

Этот модуль в последних версиях активирован по умолчанию. Если вы не видите описываемый функционал — посмотрите руководство по включению модуля.

Функциональность Shortlinks очень похожа на другие сервисы по сокращению ссылок, но есть и коренные отличия:

  • Каждый пост на WordPress.com и сайтах с Jetpack уже имеют короткий URL в доменной зоне WP.me
  • Ссылки эти публичные. Их можно увидеть в <head> вашего сайта внутри rel=shortlink
  • Возможность присутствует только для URL сайтов, которые хостятся на WordPress.com
  • Эти ссылки вечные и будут жить, пока жив сам WordPress.com
  • Домен WP.me защищен от спама, присутствует мониторинг и удаление спама в атоматическом режиме.

Включение коротких ссылок для CPT

Тут есть два варианта: добавить возможность коротких ссылок после регистрации пользовательского типа записей или во время регистрации. Рассмотрим оба случая.

Чтобы добавить короткие ссылки для уже существующего типа пользовательских записей, воспользуемся функцией add_post_type_support(), добавив сниппет в functions.php вашей активной темы:

function mihdan_add_shortlinks_by_post_type_support() {
    add_post_type_support( 'product', 'shortlinks' );
}
add_action( 'init', 'mihdan_add_shortlinks_by_post_type_support' );

Не забудьте заменить product на название вашего кастомного типа поста.

Вторым возможным решением данного вопроса может служить добавление коротких ссылок к CPT во время ее регистрации:

function mihdan_add_shortlinks_to_register_post_type() { 

	$labels = array(
        'name' => _x( 'Products', 'Post Type General Name', 'text_domain' ),
    );

    $args = array(
        'label' => __( 'product', 'text_domain' ),
        'supports' => array( 'title', 'editor', 'shortlinks' ),
    );
    register_post_type( 'product', $args ); 
}
add_action( 'init', 'mihdan_add_shortlinks_to_register_post_type', 0 );

Если в вашей версии WordPress отсутствует кнопка для получения короткой ссылки, то вернуть её можно через фильтр get_shortlink:

function mihdan_restore_shortlink_button( $shortlink ) { 
	return $shortlink;
}
add_filter( 'get_shortlink', 'mihdan_restore_shortlink_button', 0 );

Ссылки

1
]]>
https://www.kobzarev.com/wordpress/wp-cli-install-debug-bar-extensions/ Как установить все расширения для Debug Bar через WP-CLI Кобзарёв Михаил Mon, 30 Jul 2018 16:30:49 +0000

Как установить все расширения для Debug Bar через WP-CLI

Автора! Проекты Шпаргалки Файлы Карта
wp plugin search debug-bar --field=slug --format=csv --per-page=50 \
  | grep -F 'debug-bar-' \
  | xargs -n 1 wp plugin install

Данный сниппет можно применить и к установке расширений под Query Monitor, например.

1
]]>
https://www.kobzarev.com/wordpress/tinymce-comments-box/ Как добавить TinyMCE к полю комментирования WordPress Кобзарёв Михаил Fri, 27 Jul 2018 13:49:07 +0000

Как добавить TinyMCE к полю комментирования WordPress

Автора! Проекты Шпаргалки Файлы Карта
/**
 * Функция добавляет TinyMCE к полю комментирования
 *
 * @author Mikhail Kobzarev <mikhail@kobzarev.com>
 */
function mihdan_tinymce_comment_enable ( $args ) {
    ob_start();
    wp_editor( '', 'comment', array( 'tinymce' ) );
    $args['comment_field'] = ob_get_clean();
    return $args;
}
add_filter( 'comment_form_defaults', 'mihdan_tinymce_comment_enable' );

Ссылки

1
]]>
https://www.kobzarev.com/soft/teletun/ Teletun — проброс трафика через Телеграм Кобзарёв Михаил Wed, 25 Jul 2018 14:40:37 +0000

Teletun — проброс трафика через Телеграм

Автора! Проекты Шпаргалки Файлы Карта

Установка

Установить пакет telegram-cli (используя snap, например).

Запустите инстанс telegram-cli используя следующую строку:

telegram-cli --json -P 4458

Обратите внимание, что буква -P должна быть в верхнем регистре (я только что сэкономил вам полчаса дебага).

Установка зависимостей

pip install python-pytun pytg

Скачайте питон-скрипт, запустите скрипт и молите богов о пощаде.

Обратите внимание, одна сторона запускает скрипт без параметров, а вторая должна передать параметр --server. Клиент будет доступен по адресу 10.8.0.1 или 10.8.0.2 в зависимости от того, с какой стороны вы находитесь.

Вам, скорее всего, также потребуются root-права на многих платформах, как бы смешно это не звучало. Проверено только на Ubuntu.

Быстродействие

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

Пропускная способность, конечно, сильно ограничена, но зато пинг находится в пределах 100-150 мс. Именно поэтому Телеграм называется системой для обмена мгновенными сообщениями.

Ссылки

1
]]>
https://www.kobzarev.com/programming/wordpress-emails/ Письма в WordPress Кобзарёв Михаил Wed, 18 Jul 2018 17:04:26 +0000

Письма в WordPress

Автора! Проекты Шпаргалки Файлы Карта

Комментарии

Комментарий ожидает модерации

    To:        Site Admin, plus post author if they can edit comments
    From:      WordPress [wordpress @host]
    Subject:   [%s] Please moderate: "%s"
    Function:  wp_notify_moderator()
    Pluggable: Yes
    Filters:   comment_moderation_subject
               comment_moderation_text
               comment_moderation_recipients
               comment_moderation_headers
    Disable:   Return false from notify_moderator filter
               Remove wp_new_comment_notify_moderator action on comment_post hook
               "Email me whenever" on Settings -> Discussion
               Overwrite the pluggable function

Комментарий опубликован

		
    To:        Post author
    From:      WordPress [wordpress @host]
    Subject:   [%s] Comment: "%s"
               [%s] Pingback: "%s"
               [%s] Trackback: "%s"
    Function:  wp_notify_postauthor()
    Pluggable: Yes
    Filters:   comment_notification_subject
               comment_notification_text
               comment_notification_recipients
               comment_notification_headers
    Disable:   Return false from notify_post_author filter
               Remove wp_new_comment_notify_postauthor action on comment_post hook
               Overwrite the pluggable function
               See also the hardcoded action added to wp_set_comment_status in wp_set_comment_status()

Смена почты администратора

Попытка изменить почту администратора

До WordPress 4.9 было только в режиме мультисайта.

		
    To:        Proposed new email address
    From:      WordPress [wordpress @host]
    Subject:   [%s] New Admin Email Address
    Function:  update_option_new_admin_email()
    Pluggable: No
    Filters:   new_admin_email_content
    Disable:   Remove action on add_option_new_admin_email and update_option_new_admin_email hooks

Почта администратора изменена

    To:        Old site admin email address
    From:      WordPress [wordpress @host]
    Subject:   [%s] Notice of Admin Email Change
    Function:  wp_site_admin_email_change_notification()
    Pluggable: No
    Filters:   site_admin_email_change_email
    Disable:   Return false from send_site_admin_email_change_email filter

Попытка изменить почту администратора сети

Только в режиме мультисайта.

    To:        Proposed new email address
    From:      WordPress [wordpress @host]
    Subject:   [%s] New Network Admin Email Address
    Function:  update_network_option_new_admin_email()
    Pluggable: No
    Filters:   new_network_admin_email_content
    Disable:   Remove action on add_site_option_new_admin_email and update_site_option_new_admin_email hooks

Почта администратора сети изменена

Только в режиме мультисайта.

    To:        Old network admin email address
    From:      WordPress [wordpress @host]
    Subject:   [%s] Notice of Network Admin Email Change
    Function:  wp_network_admin_email_change_notification()
    Pluggable: No
    Filters:   network_admin_email_change_email
    Disable:   Return false from send_network_admin_email_change_email filter

Смена почты или пароля пользователя

Пользователь запросил сброс пароля

Письмо отправляется, если запрос был сделан через функцию «Забыли ваш пароль?».

    To:        User
    From:      WordPress [wordpress @host]
    Subject:   [%s] Password Reset
    Function:  retrieve_password()
    Pluggable: No
    Filters:   retrieve_password_title
               retrieve_password_message
    Disable:   Not possible

Пользователь сбрасывает пароль

    To:        Site admin
    From:      WordPress [wordpress @host]
    Subject:   [%s] Password Changed
    Function:  wp_password_change_notification()
    Pluggable: Yes
    Filters:   wp_password_change_notification_email (WordPress 4.9+)
    Disable:   Remove action on after_password_reset hook
               Overwrite the pluggable function

Попытка изменить свою почту

До WordPress 4.9 было только в режиме мультисайта.

    To:        Proposed new email address
    From:      WordPress [wordpress @host]
    Subject:   [%s] New Email Address
    Function:  send_confirmation_on_profile_email()
    Pluggable: No
    Filters:   new_user_email_content
    Disable:   Remove action on personal_options_update hook

Пользователь изменяет свою почту

    To:        User
    From:      WordPress [wordpress @host]
    Subject:   [%s] Notice of Password Change
    Function:  wp_update_user()
    Pluggable: No
    Filters:   password_change_email
    Disable:   Return false from send_password_change_email filter

Пользователь изменил свою почту

    To:        User
    From:      WordPress [wordpress @host]
    Subject:   [%s] Notice of Email Change
    Function:  wp_update_user()
    Pluggable: No
    Filters:   email_change_email
    Disable:   Return false from send_email_change_email filter

Автоматическое обновление

Удачное/неудачное фоновое обновление ядра

    To:        Site admin / Network admin
    From:      WordPress [wordpress @host]
    Subject:   [%s] Your site has updated to WordPress %s
               [%s] WordPress %s is available. Please update!
               [%s] URGENT: Your site may be down due to a failed update
    Function:  WP_Automatic_Updater::send_email()
    Pluggable: No
    Filters:   auto_core_update_email
    Disable:   Return false from auto_core_update_send_email filter
               Return false from send_core_update_notification_email filter

Полный лог фонового обновления

Письмо отправляется, если вы используете девелоперскую версию WordPress.

    To:        Site admin / Network admin
    From:      WordPress [wordpress @host]
    Subject:   [%s] There were failures during background updates
               [%s] Background updates have finished
    Function:  WP_Automatic_Updater::send_debug_email()
    Pluggable: No
    Filters:   automatic_updates_debug_email
    Disable:   Return false from automatic_updates_send_debug_email filter

Регистрация нового пользователя

Существующий пользователь приглашен на сайт

Работает только в режиме мультисайта. Письмо отправляется, когда пользователя приглашают из Users → Add New → Add Existing User

    To:        User being invited
    From:      WordPress [wordpress @host]
    Subject:   [%s] Joining confirmation
    Function:  wp-admin/user-new.php
    Pluggable: No
    Filters:   None
    Disable:   Click the "Skip Confirmation Email" checkbox when adding the user

Новый пользователь приглашён на сайт

Работает только в режиме мультисайта. Письмо отправляется, когда пользователя приглашают из Users → Add New → Add New User

    To:        User being invited
    From:      [Network Name] [network admin]
    Subject:   [%s] Activate %s
    Function:  wpmu_signup_user_notification()
    Pluggable: No
    Filters:   wpmu_signup_user_notification_subject
               wpmu_signup_user_notification_email
    Disable:   Click the "Skip Confirmation Email" checkbox when adding the user
               Return false from wpmu_signup_user_notification filter

Создан новый пользовательский аккаунт

Работает только в режиме мультисайта.

    To:        Network Admin
    From:      WordPress [wordpress @host]
    Subject:   New User Registration: %s
    Function:  newuser_notify_siteadmin()
    Pluggable: No
    Filters:   newuser_notify_siteadmin
    Disable:   Filter registrationnotification option value
               Remove action on wpmu_new_user hook
               Toggle "Registration notification" in Network Admin -> Settings

Пользователь успешно добавлен/аккаунт успешно активирован

Работает только в режиме мультисайта.

    To:        User being added
    From:      [Network Name] [network admin]
    Subject:   New %s User: %s
    Function:  wpmu_welcome_user_notification()
    Pluggable: No
    Filters:   update_welcome_user_subject
               update_welcome_user_email
               See also "Welcome User Email" setting in Network Admin -> Settings
    Disable:   Click the "Skip Confirmation Email" checkbox when adding the user
               Return false from wpmu_welcome_user_notification filter
               Remove action on wpmu_activate_user hook

Новый пользователь создан

Когда создаётся новый пользователь, отправляется два письма, одно администратору:

    To:        Site Admin
    From:      WordPress [wordpress @host]
    Subject:   [%s] New User Registration

и одно самому пользователю:

    To:        User being added
    From:      WordPress [wordpress @host]
    Subject:   [%s] Your username and password info

Детально:

    Function:  wp_new_user_notification()
    Pluggable: Yes
    Filters:   wp_new_user_notification_email_admin (WordPress 4.9+)
               wp_new_user_notification_email (WordPress 4.9+)
    Disable:   Remove wp_send_new_user_notifications action on register_new_user hook
               Remove wp_send_new_user_notifications action on edit_user_created_user hook
               Remove wp_send_new_user_notifications action on network_site_new_created_user hook
               Remove wp_send_new_user_notifications action on network_site_users_created_user hook
               Remove wp_send_new_user_notifications action on network_user_new_created_user hook
               Overwrite the pluggable function

Добавление нового сайта

WordPress установлен и сайт добавлен в сеть

    To:        Site Admin
    From:      WordPress [wordpress @host]
    Subject:   New WordPress Site
    Function:  wp_new_blog_notification()
    Pluggable: Yes
    Filters:   None
    Disable:   Overwrite the pluggable function

Создан новый сайт

Работает только в режиме мультисайта. Письмо отправляется, когда сайт создан из Network Admin → Sites → Add New

    To:        Network Admin
    From:      Site Admin [network admin]
    Subject:   [%s] New Site Created
    Function:  wp-admin/network/site-new.php
    Pluggable: No
    Filters:   None
    Disable:   Not possible

Регистрация пользователя на новом сайте

Работает только в режиме мультисайта.

    To:        Site Admin
    From:      [Network Name] [network admin]
    Subject:   [%s] Activate %s
    Function:  wpmu_signup_blog_notification()
    Pluggable: No
    Filters:   wpmu_signup_blog_notification_subject
               wpmu_signup_blog_notification_email
    Disable:   Return false from wpmu_signup_blog_notification filter
               Remove action on after_signup_site hook

Пользователь активировал свой новый сайт/сайт добавлен из админки

Работает только в режиме мультисайта. Письмо отправляется, когда сайт добавлен из Network Admin → Sites → Add New

    To:        Network Admin
    From:      WordPress [wordpress @host]
    Subject:   New Site Registration: %s
    Function:  newblog_notify_siteadmin()
    Pluggable: No
    Filters:   newblog_notify_siteadmin
    Disable:   Filter registrationnotification option value
               Remove action on wpmu_new_blog hook
               Toggle "Registration notification" in Network Admin -> Settings

Пользователь активировал свой новый сайт/сайт добавлен из админки

Работает только в режиме мультисайта. Письмо отправляется, когда сайт добавлен из Network Admin → Sites → Add New

    To:        Site Admin
    From:      [Network Name] [network admin]
    Subject:   New %s Site: %s
    Function:  wpmu_welcome_notification()
    Pluggable: No
    Filters:   update_welcome_subject
               update_welcome_email
               See also "Welcome Email" setting in Network Admin -> Settings
    Disable:   Return false from wpmu_welcome_notification filter
               Remove action on wpmu_activate_blog hook

Другие уведомления

Администратор сайта удаляет сайт

Работает только в режиме мультисайта. Письмо отправляется, когда сайт удаляется из Tools → Delete Site

    To:        Site Admin
    From:      WordPress [wordpress @host]
    Subject:   [ %s ] Delete My Site
    Function:  wp-admin/ms-delete-site.php
    Pluggable: No
    Filters:   delete_site_email_content
    Disable:   Not possible

Ссылки

1
]]>
https://www.kobzarev.com/programming/add-external-sitemap-to-yoast-sitemap-index/ Добавляем внешнюю карту в индекс Yoast SEO Кобзарёв Михаил Tue, 17 Jul 2018 14:43:36 +0000

Добавляем внешнюю карту в индекс Yoast SEO

Автора! Проекты Шпаргалки Файлы Карта
/**
 * Добавляем ссылку на свою карту
 * в индекс Yoast SEO
 */
add_filter( 'wpseo_sitemap_index', function( $links = '' ) {

	// xml разметка для добавления
	$index  = '<sitemap>';
	$index .= '<loc>http://www.example.com/external-sitemap.xml</loc>';
	$index .= '<lastmod>2018-07-17T23:12:27+00:00</lastmod>';
	$index .= '</sitemap>';

	return $index;
} );

Чтобы проверить работоспособность данного метода — советую временно отключить транзитное кеширование карты сайта:

add_filter( 'wpseo_enable_xml_sitemap_transient_caching', '__return_false' );
1
]]>
https://www.kobzarev.com/other/modern-jovi-2-0/ Модерн Джови 2.0 от Александра Пушного Кобзарёв Михаил Tue, 26 Jun 2018 13:56:22 +0000

Модерн Джови 2.0 от Александра Пушного

Автора! Проекты Шпаргалки Файлы Карта

Тут чёткий эффект получается благодаря использованию приспособления под названием «жующий шланг», а по-научному Talk Box.

Отдельно mp3 можно скачать по ссылке.

1
]]>
https://www.kobzarev.com/wordpress/wordpress-plugin-github-mirroring/ Зеркалируем WordPress плагин на GitHub Кобзарёв Михаил Thu, 14 Jun 2018 14:18:24 +0000

Зеркалируем WordPress плагин на GitHub

Автора! Проекты Шпаргалки Файлы Карта

Подготовка к работе

1. Во-первых, для начала нам потребуется получить номер ревизии первого коммита в WordPress репозитории для нашего плагина, чтобы не заставлять Git перебирать все 100500 коммитов для поиска нужного:

svn log http://plugins.svn.wordpress.org/easy-digital-downloads/

После выполнения данной команды мы увидим нужный нам номер ревизии:

------------------------------------------------------------------------
r529177 | plugin-master | 2012-04-09 19:36:16 +0200 (Mon, 09 Apr 2012) | 1 line

adding easy-digital-downloads by mordauk
------------------------------------------------------------------------

В данном кейсе — это r529177. Вы также можете найти номер первой ревизии в официальном трек-браузере WordPress.

2. Теперь создаём локальный Git репозиторий и импортируем в него первый коммит из SVN репозитория:

git svn clone --no-minimize-url -s -r529177 http://plugins.svn.wordpress.org/easy-digital-downloads/

Вы должны увидеть примерно следующее:

Initialized empty Git repository in /Users/kaspars/svn2git/easy-digital-downloads/.git/
r529177 = e18c66d09d77e4d8a923f2f300f73606791071e1 (refs/remotes/trunk)
Checked out HEAD:
http://plugins.svn.wordpress.org/easy-digital-downloads/trunk r529177

Флаг --no-minimize-url нужен, чтобы запретить git svn clone выйти в родительскую директорию SVN в репозитории, где лежат абсолютно все плагины, а флаг -s — чтобы использовать короткие относительные пути.

Курите маны по git-svn.

3. Наконец, перемещаемся в только что созданный Git репозиторий:

cd easy-digital-downloads

и подтягиваем остальные коммиты из SVN репозитория:

git svn fetch

Эта процедура может длится несколько часов! Чтобы быть в курсе того, что происходит на фоне используйте переменную окружения GIT_TRACE перед командой:

GIT_TRACE=1 git svn fetch

Чтобы ускорить git svn fetch при работе с большими репозиториями SVN, вы можете попробовать установить параметр --log-window-size для запроса большего количества коммитов на один SVN запрос (пруф).

Увеличив его до 10000 должно значительно уменьшить время выборки:

git svn fetch --log-window-size 10000

После завершения этого процесса у вас будет полное дерево коммитов Git проекта.

Последний шаг — переместить SVN HEAD (файлы из SVN /trunk) в git master:

git svn rebase

Теперь вы должны увидеть все последние файлы плагина в вашем локальном репозитории.

Проверка нового репозитория

Давайте рассмотрим все ветки, которые были созданы:

$ git branch -a

Эта команда вернёт нам список всех доступных веток:

* master
  remotes/tags/1.0.1.1
  remotes/tags/1.0.1.2
  remotes/tags/1.0.1.3
  remotes/tags/1.0.1.4
  ...
  remotes/tags/1.1.8
  remotes/tags/1.2
  remotes/tags/1.2.1
  remotes/tags/1.2.1.1
  remotes/trunk	

А внутри конфига .git/config новой репы:

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        ignorecase = true
        precomposeunicode = false
[svn-remote "svn"]
        url = http://plugins.svn.wordpress.org/easy-digital-downloads
        fetch = trunk:refs/remotes/trunk
        branches = branches/*:refs/remotes/*
        tags = tags/*:refs/remotes/tags/*

Мы видим, что git автоматически выбрал trunk в качестве места назначения для git svn dcommit, который пушит все ваши изменения в Git обратно в репозиторий SVN.

Добавление удалённого Git репозитория

Давайте создадим новый репозиторий GitHub, который будем использовать в качестве основного репозитория для разработки наших плагинов:

После того, как вы создали репозиторий, просто добавьте его в качестве удаленного источника нашего локального репозитория Git:

git remote add origin git@github.com:kasparsd/wordpress-svn2git-sample.git

И запушьте наш локальный репозиторий на GitHub:

git push origin --all

Теперь ваш репозиторий на GitHub содержит все файлы плагина, а также всю историю ревизий, перенесенную из репозитория Subversion.

Работа с плагином

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

После внесения изменений мы можем проверить состояние нашего локального репозитория Git:

git status

# On branch master
# Changes not staged for commit:
#   (use "git add «file»..." to update what will be committed)
#   (use "git checkout -- «file»..." to discard changes in working directory)
#
#	modified:   easy-digital-downloads.php
#	modified:   readme.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

Зафиксируем изменения в локальном репозитории:

git commit -am "Adding message about moving to GitHub, version bump"

Пушим наши правки на GitHub

Для публикации наших локальных коммитом на GitHub мы используем:

git push

[master addb6cf] Adding message about moving to GitHub, version bump
2 files changed, 12 insertions(+), 1112 deletions(-)
rewrite readme.txt (99%)

Пушим наши правки в SVN репозиторий

После перехода на использование Git в качестве системы управления версиями всегда следует использовать git svn dcommit для публикации изменений в репозитории SVN. В противном случае необходимо выполнить:

git svn rebase

Каждый раз перед пушем изменений в SVN нужно слить изменения из репозитория SVN в локальный репозиторий Git.

Если вы НЕ используете trunk в качестве релизной ветки вашего плагина, то можете безопасно перенести все изменения из Git в репозиторий WordPress, не беспокоясь о том, что пользователи получат уведомления об обновлении:

git svn dcommit

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

Committing to http://plugins.svn.wordpress.org/widget-context/trunk ...
	M	widget-context.php
Committed r601084
	M	widget-context.php
r601084 = a1c2a2f8f4f98ec5537aef48545e350ff6270f2b (refs/remotes/trunk)
No changes between b6098f5bb1751cc05309093cad1d5d982a964158 and refs/remotes/trunk
Resetting to the latest refs/remotes/trunk	

Тегирование релизов

Тегирование релиза в Git выглядит совсем просто:

git tag v1.0.2

Для создания тега в SVN:

git svn tag 1.0.2

Это создаст /tags/1.0.2 в удаленном репозитории SVN и скопирует все файлы из удаленного /trunk в этот тег, поэтому перед созданием тега SVN обязательно запушьте весь последний код в /trunk.

Обновление и отслеживание ресурсов плагина

Папка assets в репозитории WordPress используется для хранения баннеров и скриншотов плагина. Убедитесь, что папка /assets действительно существует в SVN, прежде чем пытаться получить ее. Для этого откройте в вашем браузере:

http://plugins.svn.wordpress.org/easy-digital-downloads/

где easy-digital-downloads — это ярлык вашего плагина, и вы должны увидеть корневую папку вашего плагина в репозитории SVN :

Revision 851441: /easy-digital-downloads

..
1.0.4/
assets/
branches/
tags/
trunk/

Обратите внимание, что папка /assets присутствует в листинге.

Давайте будем отслеживать эту папку как отдельную ветку Git под названием assets. Каждый раз, когда вам нужно обновить изображение обложки или скриншоты, просто извлеките эту ветку, внесите изменения и опубликуйте ее в SVN, используя тот же git svn dcommit.

Добавляем новый удаленный SVN с именем assets:

git config --add svn-remote.assets.url http://plugins.svn.wordpress.org/easy-digital-downloads/assets

И говорим Git юзать ветку assets в нашем удаленном репозитории SVN:

git config --add svn-remote.assets.fetch :refs/remotes/assets

После выполнения данной команды в наш конфиг .git/config добавятся следующие строки:

[svn-remote "assets"]
	url = http://plugins.svn.wordpress.org/easy-digital-downloads/assets
	fetch = :refs/remotes/assets

Это означает, что теперь мы можем получить assets из SVN:

git svn fetch -r HEAD assets

и переключиться туда:

git checkout remotes/assets

Note: checking out 'remotes/assets'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at 7e5b727... Updated banner image

Давайте создадим локальную ветку с именем assets для отслеживания:

git checkout -b assets

Теперь вы можете добавить или изменить ресурсы плагина, зафиксировать изменения и опубликовать их в SVN, используя:

git svn dcommit

Ссылки

1
]]>
https://www.kobzarev.com/wordpress/privacy-policy-guide/ Кастомизация политики конфиденциальности в WordPress Кобзарёв Михаил Wed, 13 Jun 2018 13:44:37 +0000

Кастомизация политики конфиденциальности в WordPress

Автора! Проекты Шпаргалки Файлы Карта

Стоит заметить, что WordPress 4.9.6 не даёт никакого функционала по изменению содержимого страницы существующей политики конфиденциальности на лету. И я категорически не рекомендую делать это автоматически. Но, если у вас прям бомбит, можете попробовать сделать это через хук the_content(). И, возможно, у вас что-то получится ?.

И так, о какой же новой функциональности идёт речь? Во-первых, в левом сайдбаре у меню Settings появилось новые подменю Privacy. Там вы можете создать или выбрать имеющуюся страницу с вашей политикой конфиденциальности, после чего идентификатор страницы будет доступен програмно через get_option( 'wp_page_for_privacy_policy' ).

Видите на странице настроек ссылку «Check out our guide»? Это руководство как раз об этом.

На странице по ссылке находится рекомендуемый контент для вашей политики конфиденциальности, вы можете скопировать его полностью или некоторые его части и вставить ручками на вашу страницу с политикой.

Авторы плагинов могут добавлять свои секции в политику при помощи функции wp_add_privacy_policy_content().

Изменение дефолтного контента в руководстве

WordPress имеет достаточно много контента по умолчанию в этом разделе админки. Но иногда вам может понадобиться кастомизировать его под конкретну. пользовательскую темы.

Вот как это сделать:

function misha_custom_privacy_content( $privacy_content ) {
	return wpautop('<h2>Who I am</h2>I'm Misha.<h2>How I collect you data</h2>I don't.');
}
add_filter( 'wp_get_default_privacy_policy_content', 'misha_custom_privacy_content' );

Вот что мы получим после вставки вышеуказанного кода в functions.php вашей темы.

И да, пока нет способа изменить текст Introduction.

Добавление своей секции в руководство

Как я уже упоминал ранее, в этом нам поможет функция wp_add_privacy_policy_content(), которая wp_add_privacy_policy_content() должна вызываться на хуке admin_init и не стоит забывать про WordPress 4.9.5 и ниже, где данного функционала не было.

add_action( 'admin_init', 'misha_custom_plugin_privacy_content' );
function misha_custom_plugin_privacy_content() {
 
	// Для поддержки старых версий WordPress,
	// чтобы не словить 500-ю ошибку
	if ( ! function_exists( 'wp_add_privacy_policy_content' ) ) {
		return;
	}
 
	wp_add_privacy_policy_content(
		'Plugin by Misha', // section name
		'When you contact us via a contact form, your email will be stored in database for a one week. So we never miss your email!' // content
	);
}

Как только мы добавим новую секцию в руководство, возле пункта меню Setting появится лейбл с цифрой.

Этот бабл пропадёт после любых изменений, сделанных вами в руководстве политики конфиденциальности.

Чтобы увидеть результат наших с вами стараний, перейдите в SettingsPrivacy и кликните по ссылке «Check out our guide».

Я обернул текст в WordPress функцию wpautop(), чтобы она автоматом расставила параграфы <p> в тексте:

Визуально

Ниже короткое видео об этом функционале:

Ссылки

1
]]>
https://www.kobzarev.com/wordpress/yoast-seo-sitemaps-fixed/ Чиним карту сайта Yoast SEO на огромном WordPress сайте Кобзарёв Михаил Thu, 24 May 2018 15:57:55 +0000

Чиним карту сайта Yoast SEO на огромном WordPress сайте

Автора! Проекты Шпаргалки Файлы Карта

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

Учитывая, что сайт имеет десятилетний опыт, можно легко предположить, почему карта сайт ломается: из-за огромного количества записей сервер шлёт скрипт далеко и надолго, потому что тот не успевает выполнить свои задачи за отведённые ему 30 секунд.

Увеличиваем таймаут до 120 секунд — всё плохо.

Увеличиваем таймаут до 300 секунд. Пять грёбаных минут, Карл!

Стало немного получше.

Если и дальше увеличивать таймаут, то это чревато тем, что сервер рано или поздно ляжет совсем.

Решение

Yoast SEO не имеет (пока) WP-CLI (WordPress command line interface) команд, но мы же можем использовать wp eval для запуска произвольного PHP кода в инфраструктуре WordPress.

После глубокого анализа исходного кода плагина Yoast SEO был найден PHP класс и его методы для вывода индексной карты сайта (та, что содержит ссылки на другие карты).

Пробуем запусить процесс через wp eval:

wp eval '
$sm = new WPSEO_Sitemaps;
$sm->build_root_map();
$sm->output();
'

Выполнение задачи заняло небольшое количество времени и индексный файл был успешно получен. Значит, мы пошли правильным путём.

Теперь вешаем всё это добро на крон с выводом результата в статический файл:

0 3 * * * cd /srv/www/example.com && /usr/local/bin/wp eval '$sm = new WPSEO_Sitemaps;$sm->build_root_map();$sm->output();' > /srv/www/example.com/wp-content/uploads/sitemap_index.xml

Финальным шагом меняем конфигурацию веб-сервера Nginx таким образом, чтобы ботам, которые пытаются получить файл sitemap_index.xml в корне сайта, отдавалась его статическая версия из папки uploads, куда его кладёт наш крон:

location ~ ([^/]*)sitemap(.*).x(m|s)l$ {
    rewrite ^/sitemap.xml$ /sitemap_index.xml permanent;
    rewrite ^/([a-z]+)?-?sitemap.xsl$ /index.php?xsl=$1 last;
    rewrite ^/sitemap_index.xml$ /wp-content/uploads/sitemap_index.xml last;
    rewrite ^/([^/]+?)-sitemap([0-9]+)?.xml$ /index.php?sitemap=$1&sitemap_n=$2 last;
}

Теперь роботы поисковых систем рады, так как им больше не нужно ждать по 5 минут завершения процесса генерации карты сайта, а сам сайт не прикладывается поспать в это время, так как крон запускает скрипт в отдельном PHP процессе пактически без ограничений.

А клиент счастлив, что ему нет необходимости менять SEO плагин и его бизнес спасён.

Отдельная благодарность WP-CLI за чуточку магии.

Ссылки

1

WordPress 4.9.8 + Yoast SEO 9.2.1 + WP CLI 2.0.1 (PHP 7+)


Проверил на 5 разных сайтах, которые установлены на разные сервера, с хостинг панелью и без. Сайты с 10-20 постами и сайты с 300к+ постов. Ошибка одна и та же на всех ресурсах:


Warning: Invalid argument supplied for foreach() in /srv/www/wordpress/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps.php on line 359

Класс немного изменился, попробуйте вот так сделать:


wp eval '
global $wpseo_sitemaps;
$sm = $wpseo_sitemaps;
$sm->build_root_map();
$sm->output();'

Благодарю, так похоже что работает, буду тестировать на сайте с 300к+ постов.

О результатах сообщите, пожалуйста

На сайте с > 320 000 постов, генерирует карту за 20 секунд, правда сервер очень мощный. Отдает карту моментально, но оно и понятно, а вот если открыть внутри ссылку на другую карту (/post-sitemap283.xml), то её генерирует отдельно 5-10 сек. В любом случае лучше делать конечно же так, запускаю в крон 1 раз в час. Если будут интересные новости или наблюдения через какое-то время, то отпишусь.


В любом случае спасибо за метод.

Не за что. Я генерю карты раз в сутки

Я проверю у себя, спасибо за сигнал

Данный метод больше не работает? Версия плагина 9+. Удивительно что до сих пор никто не сделал адекватного решения для генерации статической карты сайта запускаемый через крон. Ведь это значительно снизило бы нагрузку на сайт и по хорошему такое решение должно быть в ядре движка, как к примеру у DLE.

Если бы у WP всё было в ядре, получилась бы Жумла или Дле — слава Богу, что это не так. А метод у меня работает, у вас какие-то ошибки выдает?
]]> https://www.kobzarev.com/wordpress/wp-rocket-cli/ CLI интерфейс для плагина WP Rocket Кобзарёв Михаил Thu, 17 May 2018 09:14:48 +0000

CLI интерфейс для плагина WP Rocket

Автора! Проекты Шпаргалки Файлы Карта

Поддерживаемые команды

Установка константы WP_CACHE в значение true:

wp rocket activate

Установка константы WP_CACHE в значение false:

wp rocket deactivate

Очистка всего кеша или указанного URL или ID поста:

wp rocket clean --post_id=$post_id --permalink=$permalink --lang=$lang --blog_id=$blog_id

Предзагрузка кеша:

wp rocket preload

Перегенерация файлов .htaccess, advanced-cache.php и конфига ракеты:

wp rocket regenerate --file=$file

Установка

Если вы используете WP-CLI версии 0.23.0 или выше, то просто установите нужный пакет через сам WP-CLI:

wp package install geekpress/wp-rocket-cli

Если версия ниже — обновите сначала WP-CLI и потом поставьте уже пакет:

wp cli update
1
]]>
https://www.kobzarev.com/wordpress/install-multiple-wordpress-plugins-wp-cli/ Множественная установка плагинов через WP-CLI Кобзарёв Михаил Tue, 15 May 2018 08:50:20 +0000

Множественная установка плагинов через WP-CLI

Автора! Проекты Шпаргалки Файлы Карта

Если коротко, то это можно сделать при помощи WP-CLI в одну строку. Рассмотрим далее несколько вариантов решения данного вопроса.

По-умолчанию

WP-CLI «из коробки» уже имеет данный функционал. Команда выглядит так:

wp plugin install plugin-slug-1 plugin-slug-2 ... plugin-slug-N --activate

Через xargs

Можно передать список плагинов в WP-CLI через xargs:

echo plugin-slug-1 plugin-slug-2 ... plugin-slug-N | xargs wp plugin install --activate

Если после выполнения данной команды вы получите ошибку о том, что пытаетесь запустить ее от рута, укажите аргумент --allow-root:

echo plugin-slug-1 plugin-slug-2 ... plugin-slug-N | xargs wp plugin install --activate --allow-root

Через массив

Можно вынести список плагинов в массив для удобства чтения и пройтись по нему циклом:

plugins=("plugin-slug-1" "plugin-slug-2" ... "plugin-slug-N" ); for p in "${plugins[@]}" ; do wp plugin install "$p" --activate; done

Через текстовый файл

Или вынести список плагинов в отдельный файл plugins.txt вида:

plugin-slug-1
plugin-slug-2
...
plugin-slug-N

И передать его аргументом в WP-CLI:

wp plugin install --activate $(<plugins.txt)

Конкретные версии

Если вам надо установить плагин какой-то определенной версии, то воспользуйтесь параметром --version:

wp plugin install plugin-slug-1 --version=1.1.7 --activate && wp plugin install plugin-slug-2 --version=5.0.8 --activate
1
]]>
https://www.kobzarev.com/news/wordcamp-spb-2018/ WordCamp в Санкт-Петербурге Кобзарёв Михаил Mon, 30 Apr 2018 17:18:54 +0000

WordCamp в Санкт-Петербурге

Автора! Проекты Шпаргалки Файлы Карта

Расписание докладов

Время Событие
09:00
 
Открытие
10:00
 
Вступление
10:20
 
Gutenberg — гром и молнии в сообществе. Анна Ладошкина
11:05
 
Как превратить человека сёрфящего в вашего лояльного клиента с помощью контент-маркетинга. Варвара Лялягина
11:50
 
Разработка информационной структуры сайта и создание контента. Евгений Романовский
12:35
 
Экосистема открытого исходного кода WordPress. Сергей Бирюков
12:45
 
WordPress как инструмент для “СтартАпа”. Евгений Карский
12:55
 
Настройка и использование Redux Framework Options. Игорь Тронь
13:05
 
Архивация заказов в WooCommece. Урожаев Александр
13:15
 
Обед
14:15
 
Жизнь русскоязычного WordPress-сообщества за пределами WordPress.org. Денис Янчевский
15:00
 
Почему бизнес выбирает WordPress. Леонид Лукин
15:45
 
WordPress как LMS. Олег Буйлов
16:30
 
Закон «о персональных данных». Как WordPress может помочь вам избежать штрафов? Павел Карпов
17:15
 
Заключение
17:30
 
Afterparty

Мероприятие обещает быть интересным, полезным и веселым. Вас ждут новые знакомства, отличные доклады, футболка с символикой WordPress, пицца и after-party.

Узнать подробнее и зарегистрироваться можно на официальном сайте.

1
]]>
https://www.kobzarev.com/wordpress/infinite-scroll/ Бесконечная подгрузка записей в WordPress Кобзарёв Михаил Mon, 23 Apr 2018 13:52:47 +0000

Бесконечная подгрузка записей в WordPress

Автора! Проекты Шпаргалки Файлы Карта

Как установить

1) Скачайте плагин jquery-ias.min.js.

2) Скопируйте файл jquery-ias.min.js в директорию с дочерней темой wp-content/themes/twentytwelve-child/js.

Как интегрировать

1) Откройте файл wp-content/themes/twentytwelve-child/functions.php в вашем любимом редакторе.

2) Добавьте в самом низу файла следующие строки для подключения плагина в вашу тему:

add_action( 'wp_enqueue_scripts', function() {
	wp_enqueue_script( 'mihdan-infinite-scroll', get_theme_file_uri( 'js/jquery-ias.min.js' ), array( 'jquery' ), null, true );
} );

2) Теперь осталось туда же добавить конфигурацию плагина:

add_action( 'wp_footer', function() {
	?>
	<script type="text/javascript">
		var ias = $.ias( {
			container: "#content",
			item: ".post",
			pagination: ".navigation",
			next: ".nav-previous a",
		} );

		ias.extension( new IASTriggerExtension( { offset: 2 } ) );
		ias.extension( new IASSpinnerExtension() );
		ias.extension( new IASNoneLeftExtension() );
	</script>
	<?php
} );

На этом всё. Счастливой прокрутки!

Ссылки

1

WordPress, тема twentyfifteen. Метод не работает. Но очень в ней нуждаюсь. Не знаете ли других способов реализации бесконечной прокрутки постов?))) Заранее спасибо!

Вы конфиг поправили под тему? В смысле селекторы указали?

нашел два плагина, подходящих для выполнения задуманного функционала: Catch Infinite Scrool и YITH Infinite Scrolling. Остановился на втором — более плавный, без «дергания» подзагрузки.

Плагины от yith оставляют желать лучшего. Там рулят маркетологи, на код и его качество там по барабану.

да, но скорее, те селекторы, что я пробовал применить, были неверными. Решил проблему немного другим способом, с помощью сторонних плагинов. Хотелось, конечно в ручную) спасибо!)

А каким плагином, если не секрет?

Давно хотел попробовать бесконечную подгрузку записей 🙂 Надо будет внедрить и посмотреть на результат. Спасибо!
Попробуйте, о результатах сообщите, баги вместе поправим 🙂
]]> https://www.kobzarev.com/linux/vs-code-ubuntu/ Как попробовать VS Code в Ubuntu Кобзарёв Михаил Fri, 23 Mar 2018 20:27:03 +0000

Как попробовать VS Code в Ubuntu

Автора! Проекты Шпаргалки Файлы Карта

Для установки есть два пути решения: скачать deb-пакет с сайта Microsoft или добавить их репозиторий к себе и установить VS Code из него.

Установка из репозитория

curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg
sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'

Установка из deb-пакета

Скачайте пакет с официального сайта и установите его из менеджера программ Software или терминала:

sudo dpkg -i __file__.deb
sudo apt-get install -f

Ждем, когда Microsoft также выпустит snap-пакет. Пока его нет ¯\_(ツ)_/¯.

1
]]>
https://www.kobzarev.com/other/wordpress-cost/ WordPress — это дорого? Кобзарёв Михаил Tue, 06 Mar 2018 11:49:03 +0000

WordPress — это дорого?

Автора! Проекты Шпаргалки Файлы Карта

Ежедневно сталкиваюсь с одним и тем же вопросом от клиентов, пользователей в чатах, товарищей и друзей: «WordPress — это дорого?».

Решил ответить сразу всем: «WordPress — это бесплатно, так как опенсорс». Так если он бесплатный, за что же я тогда беру деньги с людей, спросите вы, не мошенник ли я?

(далее…)1

Вау! Надо сохранить и клиентам показывать при первом вопросе, сколько стоит сделать сайт.

Этот пост для того и был написан. Пользуйтесь!
По поводу цены могу сказать так, любой товар и сайт в том числе, стоит ровно столько, сколько за него готовы заплатить. Миллионы людей считают что картины типа квадрата малевича не стоят тех миллионов, но почему они столько стоят ? Потому что есть те, кто готов за них столько дать. Рассуждения типа стоит этих денег или не стоит, тупые. На стоимость интеллектуального труда вообще никакие факторы влиять не должны, во сколько сам автор решил оценить свой труд, столько он и должен стоить, а найдется ли покупатель на эту сумму — это уже другой вопрос.

Люто плюсую

С этими ценниками в Газпром, они может столько заплатят, и то не думаю. Расписано так, как будто космическую ракету сооружают и по трудозатратам и по объемам )))) Я согласен с такими ценами если создают такой проект как Авито, Авто Драйв и тд, только не пудрите мозги простым юзерам.
Это цена не за раз же, неужели вы не поняли? Это весь этап разработки, поддержки, продвижения. Это не космические цены, а оплата труда всем участникам: дизайнеры, менеджеры, верстальщикы, программисты, сеошникы, авторы, редакторы, фотографы… Процесс разработки более-менее сложного проекта от трех месяцев до года. Вы хотите весь офис за 10к обслуживать? Это нереально, вы должны понимать. Посмотрите на проекты the-challenger.ru, roomble.com, teamrussia.pro — такие проекты стоят от 10 млн. рублей именно по той простой причине, что это делает не за день-два и даже не месяц-два и работают над такими проектами до 50 человек. Так что никто никому не парит мозг. Я просто описал вам весь процесс разработки сайта на WordPress, а не блога как у меня 🙂
Вы описали сайты, красная цена которым тысяч 70 с макетом и дизайном. Серьезные сайты, на вордпрессе не делают, особенно за 10 миллионов
Приведу списочек нищебродских сайтов, которые по вашему стоят 70к рублей: 1. TechCrunch 2. The New Yorker 3. BBC America 4. Bloomberg Professional 5. Variety 6. Sony Music 7. MTV News 8. PlayStation.Blog 9. Sweden’s Official Website 10. Microsoft News Center 11. The Walt Disney Company 12. Time Inc. 13. Facebook Newsroom 14. The Wall Street Journal Law 15. jQuery 16. nGinx 17. Mercedes-Benz 18. Uber 19. James Bond 007 20. The White House
Многие не понимают простой идеи и думают, что 10 млн руб — это оценка проекта. Но это не так. 10 млн руб — это годовой бюджет на сайт. Серьёзные сайты всегда оцениваются в годовом бюджете. Оптимальный стартовый бюджет для небольших сайтов — 10 млн руб. Это около 800 тр в месяц. Это офис + зарплата 3-4 программистов. Ничего сверхъествественного в этом бюджете нет 🙂
Например, сайт Белого дома США построен на WordPress, его стоимость 6 млн долларов в год. Если вы не делали серьёзные сайты, то какой смысл спорить со мной об этом? Я делал и не один, поверьте.
50 специалистов могут работать над такими сайтами как у Газпрома, каких нибудь банков, но не как для бизнеса среднего уровня. Т.е. всероссийского размаха, не регионального. Вот как раз поделите сумму бизнеса Авито и стоисость проекта и получите реальную сумму 50, максимум 100 тр.
В чём-то вы, конечно, правы, но таковы реалии жизни. Нас надо кормить и каждый день. Не устраивает идите в веб-студию, мы поднимаем стартапы с нуля, а не лепим сайтики на коленке. И оказываем поддержку на каждом этапе его жизни.
wp это глупо
У каждого свое мнение, бесспорно.
Спасибо за пост !
Пожалуйста!
Совершенно хамский выпад. Не ожидал. Разочарован.
Не вижу ничего хамского… Отлично разворачивает проблему оценки проекта, показывает на сколько большой мир веб разработки. Этот пост спокойно можно отнести к любым CMS, Frameworks etc. И мне нравится подход автора в статьях, и в этой тоже… Дизайнеров обидели? Кого то еще? Как по мне все на своих местах и отлично отражает нынешнюю ситуацию в индустрии… п.с. Михаилу спс. + зарепостил….
Спасибо за поддержку!
Егор, в плане чего? Я где-то соврал?
Я не сказал, что соврал. Весьма грубо звучит. Не нужно всех фриленсеров в одну кучу сваливать. Программисты бывают двух сортов: плохие и хорошие. Я фрилансер, так выходит, что я нищеброд и мой удел — доширакеры?
Переформулировал раздел с выводами, чтобы он выглядел менее грубо. Спасибо за замечания.
]]> https://www.kobzarev.com/wordpress/woocommerce-default-price-for-products/ Цена по умолчанию для товаров в WooCommerce Кобзарёв Михаил Sat, 03 Mar 2018 21:36:09 +0000

Цена по умолчанию для товаров в WooCommerce

Автора! Проекты Шпаргалки Файлы Карта

Есть много кейсов, где ручное задание цены нежелательно, а оставление поля пустым недопустимо. В данном случае поможет автоматическое проставление дефолтной цены.

Как это сделать в WooCommerce

Конечно же, при помощи небольшого сниппета. Откройте файл functions.php в вашем любимом ванильном редакторе для написания кода внутри активной темы и добавьте в конце:

/**
 * Задание дефолтной цены для товара в 10 руб.,
 * если она не указана вручную
 *
 * @param int    $post_id идентификатор товара
 * @param object $post    объект поста
 */
function mihdan_product_default_price( $post_id, $post ) {
	$product     = wc_get_product( $post_id );
	$already_set = get_post_meta( $post_id, '_set_default_price', true );
	$price       = $product->get_price();

	if ( 'yes' !== $already_set && empty( $price ) ) {
		$product->set_regular_price( '10' );
		$product->save();

		update_post_meta( $post_id, '_set_default_price', 'yes' );
	}
}
add_action( 'woocommerce_process_product_meta', 'mihdan_product_default_price', 999, 2 );

Этот скрипт установить цену на продукт в 10 руб. единожды, если товар не имеет мета-поля _set_default_price=yes и если цена не задана ручками.

Ссылки

1
]]>
https://www.kobzarev.com/wordpress/disable-image-attachment-pages-in-wordpress/ Отключение страницы вложения в WordPress Кобзарёв Михаил Thu, 22 Feb 2018 14:47:53 +0000

Отключение страницы вложения в WordPress

Автора! Проекты Шпаргалки Файлы Карта

Как отключить

Создайте в активной теме вашего сайта шаблон, например, для вывода вложения-изображения image.php и внутри поместите редирект на пост, к которому это вложение прикрепелено:

wp_redirect( get_permalink( $post->post_parent ), 301 );
exit;

Можно пойти дальше и повесить этот же редирект на хук template_redirect, чтобы не создавать лишних шаблонов внутри темы. Для чего в functions.php напишите:

/**
 * Редирект со страницы вложения на
 * родительский пост
 */
function mihdan_attachment_redirect() {
    global $post;
    
	if ( is_attachment() && 0 !== $post->post_parent ) {
        wp_redirect( get_permalink( $post->post_parent ), 301 );
        exit();
    }
}
add_action( 'template_redirect', 'mihdan_attachment_redirect' );
1
]]>
https://www.kobzarev.com/other/michael-jackson-smooth-criminal/ Michael Jackson: Smooth Criminal Кобзарёв Михаил Tue, 20 Feb 2018 20:56:50 +0000

Michael Jackson: Smooth Criminal

Автора! Проекты Шпаргалки Файлы Карта

Гитара — Merikan Koyun, вокал — Rob Lundgren

1
]]>
https://www.kobzarev.com/wordpress/smtp-wordpress/ Настройка отправки почты в WordPress через SMTP без плагинов Кобзарёв Михаил Tue, 20 Feb 2018 15:57:53 +0000

Настройка отправки почты в WordPress через SMTP без плагинов

Автора! Проекты Шпаргалки Файлы Карта

Выход в данной ситуации — отправка писем через SMTP с авторизацией. И нет смысла ставить плагины, всё решается в несколько строк кода в конфиге вашего сайта.

В wp-config.php разместите данные константы перед определением ABSPATH и замените тестовые данные реквизитами своего SMTP сервера (yandex, google или любой другой):

<?php
// Имя пользователя для SMTP авторизации
define( 'SMTP_USER', 'user@example.com' );  

// Пароль пользователя для SMTP авторизации
define( 'SMTP_PASS', 'smtp password' );

// Хост почтового сервера
define( 'SMTP_HOST', 'smtp.example.com' );

// Обратный Email
define( 'SMTP_FROM', 'website@example.com' );

// Имя для обратного мыла
define( 'SMTP_NAME', 'Вася Пупкин' );

// Номер порта (25, 465, 587)
define( 'SMTP_PORT', '25' );

// Тип шифиования (ssl или tls)
define( 'SMTP_SECURE', 'tls' );

// Включение/отключение шифрования
define( 'SMTP_AUTH', true );

// Режим отладки (0, 1, 2)
define( 'SMTP_DEBUG', 0 );

В functions.php фильтруем стандартные параметры PHPMailer, передавая в него данные из констант, определённых в конфиге:

<?php
/**
 * Настройка SMTP
 *
 * @param PHPMailer $phpmailer объект мэилера
 */
function mihdan_send_smtp_email( PHPMailer $phpmailer ) {
	$phpmailer->isSMTP();
	$phpmailer->Host       = SMTP_HOST;
	$phpmailer->SMTPAuth   = SMTP_AUTH;
	$phpmailer->Port       = SMTP_PORT;
	$phpmailer->Username   = SMTP_USER;
	$phpmailer->Password   = SMTP_PASS;
	$phpmailer->SMTPSecure = SMTP_SECURE;
	$phpmailer->From       = SMTP_FROM;
	$phpmailer->FromName   = SMTP_NAME;
}
add_action( 'phpmailer_init', 'mihdan_send_smtp_email' );

Проверка отправки

В корне сайта создайте файл mail.php со следующим содержимым и откройте его через браузер:

<?php
// Кому отправляем
$to = 'you@yourdomain.com';
 
// Тема письма
$subject = 'Проверка wp_mail';

// Само сообщение
$message = 'Это тестовое сообщение';
 
// Загружаем только ядро WordPress
define( 'WP_USE_THEMES', false );
require( 'wp-load.php' );
 
// Отправляем письмо
$sent_message = wp_mail( $to, $subject, $message );

if ( $sent_message ) {
    // Если сообщение успешно отправилось
    echo 'Всё чётко настроил, бро!';
} else {
    // Ошибки при отправке
    echo 'Где-то ты лоханулся знатно!';
}
1

Здравствуйте! Работает прекрасно, но только на главной странице, на других страницах, по типу /price /about и тд не работает. Не подскажете, пожалуйста, как исправить?

А не работает что, вызов функции wp_mail()? У вас там WordPress, ajax?

Да, аджакс. Но я разобрался, вставив и юрл полную ссылку. Спасибо большое!

Хорошо, что разобрались.

Статья по-прежнему актуальна. Просто и эффективно. Спасибо.

Спасибо. Я сам использую данный способ ежедневно.

а где находится этот файл functions.php?

В корне папки вашей активной темы wp-content/themes/ваша_тема/functions.php

Здравствуйте, инструкция полезная. Но, держать пароль от smtp в открытом виде не безопасно? При взломе злоумышленник получит еще и данные от почты для спама? Можно ли как то пароль шифровать, хотя бы в md5? И второй вопрос, думаю многим будет интересно, как можно сделать, чтобы вся почта, которая отправяляется через wordpress дублировалась в телеграм ботом? Где прописываются настройки бота? Если напишите инструкцию, буду благодарен, многим пригодится.
Насчёт шифрования при данном подходе могу посоветовать только написать функцию самопальную со своим алгоритмом и поместить в functions. Даже если плагином делать, то пароль будет лежать не файле, а в базе данных. Тут надо выбирать удобство или безопасность. В качестве бота рекомендую плагин моего товарища Игоря. Можете подглядеть как сделано так.
Спасибо, Михаил за ответ и за плагин. (раньше как то долго искал под Contact Form такое решение, автор сделал нужную вещь и думаю востребованную). Сейчас немного другая задача, не везде нужно ставить Contact Form (тяжелая форма), иногда проще отдельный шаблон под страницу контактов с простенькой формой. И на выходе вся почта идет через отправку самого wordpress и вот как повесить отправку в телеграм не нашел. (нашел плагин, который все шлет, но думал, возможно, что и без плагина можно прикрутить оповещения). Перечитал ваши статьи и многие решения у вас как раз без плагинов, кодом, решил поинтересоваться, может уже делали ранее.

Всегда пожалуйста!

Супер, все работает! спасибо большое!
Всегда пожалуйста!
Шикарно то как! Можно оказывается и вовсе обойтись без плагина. Спасибо!
Не на чем)))
а как установить headers text/html, чтобы html в письме корректно отображался?
Вам нужен фильтр wp_mail_content_type.
Отличный пост, спасибо. Очень часто люди встречаются с проблемой доставки почти с WordPress or Woocommerce. А здесь все описано почему письма не приходят и как с этим бороться.
Пожалуйста.
]]> https://www.kobzarev.com/linux/empty-files/ Как найти пустые файлы и папки в linux Кобзарёв Михаил Thu, 15 Feb 2018 15:19:38 +0000

Как найти пустые файлы и папки в linux

Автора! Проекты Шпаргалки Файлы Карта

Ищем файлы и папки:

# Показать пустые файлы и папки
find /path/to/directory -empty

# Показать только пустые файлы
find /path/to/directory -type f -empty

# Показать только пустые папки
find /path/to/directory -type d -empty

А теперь можно удалить найденные файлы и папки:

find /path/to/directory -type d -empty -delete

# Или так
find /path/to/directory -type d -empty -exec rmdir '{}' ;
1
]]>
https://www.kobzarev.com/other/proper-posture/ Как правильно сидеть за компьютером Кобзарёв Михаил Thu, 15 Feb 2018 14:28:09 +0000

Как правильно сидеть за компьютером

Автора! Проекты Шпаргалки Файлы Карта

Берегите ваш позвоночник — сидите правильно!

1
]]>
https://www.kobzarev.com/soft/avocode-linux/ Установка Avocode под Linux Кобзарёв Михаил Tue, 13 Feb 2018 09:16:37 +0000

Установка Avocode под Linux

Автора! Проекты Шпаргалки Файлы Карта

Установка в Ubuntu

1. Добавьте GPG ключ Avocode:

curl https://linux.avocode.com/avocode_pub.gpg | sudo apt-key add -

2. Добавьте репозиторий Avocode:

echo deb http://linux.avocode.com/apt all main >> /etc/apt/sources.list

Если во время выполнения этой команды вы получили ошибку Permission denied, попробуйте добавить репозиторий в отдельный файл /etc/apt/sources.list.d/avocode.list, для чего введите:

echo "deb http://linux.avocode.com/apt all main" | sudo tee /etc/apt/sources.list.d/avocode.list

3. Обновите список доступных пакетов:

sudo apt-get update

4. Установите Avocode

sudo apt-get install avocode

5. «Поехали!» ?. Теперь можно запустить Avocode.

Обновление в Ubuntu

1. Проверьте последние обновления пакетов:

sudo apt-get update

2. Установите новую версию Avocode:

sudo apt-get install avocode

Установка в Arch

1. Слейте себе файлы для сборки из AUR:

git clone https://aur.archlinux.org/avocode.git && cd avocode

2. Соберите пакет:

makepkg -si

Обновление в Arch:

1. Стяните последнюю версию с AUR:

git pull origin master

2. Пересоберите пакет:

makepkg -si

В будущем планируется собрать пакеты для RPM/YUM, а пока можно использовать zip версии.

Ссылки

1

Подскажите, я установила всё, но при открытии psd- файла открывается темный экран. что я сделала не так?

Тут стоит обратиться к разработчикам Avocode. Они ребята отзывчивые, обязательно помогут.

Установили все по инструкции, все получилось! Спасибо огромное!

Пользуйтесь!
Спасибо за инфу. Установка на Ubuntu получилась. Только файл avocode.list руками пришлось править
Не подскажите как исправить?
echo deb http://linux.avocode.com/apt all main >> /etc/apt/sources.list.d/avocode.list
-bash: /etc/apt/sources.list.d/avocode.list: Отказано в доступе
У вас нет доступа для создания файла, скорее всего вы выполняете команду от обычного пользователя, а не рута. Попробуйте в начале sudo -i и вбить пароль рута, а потом уже вашу команду — должно помочь. Я добавил в пост предупреждение на тот случай, если проблема с правами, тогда просто надо от рута добавить репу в отдельный файл:
echo "deb http://linux.avocode.com/apt all main" | sudo tee /etc/apt/sources.list.d/avocode.list

Здравствуйте! Делаю как вы написали, но ни чего не происходит, просто переходит на новую строку как будто ничего не вводил.

Вы можете записать скринкаст с проблемой?

Отправил на почту.

Хорошо, я посмотрю, спасибо

Я уже установил, просто прописал ручками адрес в файл avocode.list, как написал предыдущий пользователь. А как вы думаете, стоит ли перейти на версию 18.04, ведь тут некоторый функционал не работает. Например тот же Альберт. Некоторые индикаторы. Вот psensor не показывает температуру только иконку. Я думаю вернуться на 16.04 LTS. А вы, что скажете?
Я сижу на бете 18.10 и радуюсь, юнити, конечно, жалко, но я уже привык в третьему гному и не вижу разницы. Дистриб рекомендую всегда обновлять — там же решается много проблем с безопасностью и баги фиксят.
Скорее всего дело в правах.
]]> https://www.kobzarev.com/other/pdd-yandex-admin/ Добавить заместителя администратора Яндекс.Почты для домена Кобзарёв Михаил Fri, 09 Feb 2018 11:41:57 +0000

Добавить заместителя администратора Яндекс.Почты для домена

Автора! Проекты Шпаргалки Файлы Карта

Как добавить через API

Заходим под главным админом (регистратором), той учёткой, через которую заводили почту для домена.

Получаем токен авторизации, для чего заполняем необходимые поля

Запускаем или скачиваем и устанавливаем любую программу для работы с REST API: Postman, Insomnia. Я предпочитаю Insomnia.

Идем на страницу документации API Почты для домена и находим нужный нам запрос для добавления нового администратора. В общем виде он выглядит так:

POST /api2/admin/deputy/add
Host: pddimp.yandex.ru
PddToken: $token

# Перемнные запроса (Query String)
domain=$domain
login=$login

Где $token — строка, полученная ранее, $domain — имя домена, на который предоставляем доступ, $login — логин пользователя на Яндексе.

Заместителем могут быть только зарегистрированные пользователи Яндекса (имеющие адрес вида login@yandex.ru). Не следует указывать в качестве логина имя одного из почтовых ящиков вашего домена.

Заполняем необходиме поля в Insomnia, нажимаем кнопку Send и дожидаемся, когда во вкладке Preview появится строка success": "ok":

Вкладка «Query»
Вкладка «Header»
Вкладка «Preview»
1
]]>
https://www.kobzarev.com/other/the-cranberries-zombie/ The Cranberries: Zombie Кобзарёв Михаил Fri, 02 Feb 2018 14:44:07 +0000

The Cranberries: Zombie

Автора! Проекты Шпаргалки Файлы Карта

Видео и аудио запилил Brian Dixon 19 июня, 2015 в Jordan Hall, New England Conservatory, записал Nick Davison.

Хороших выходных!

1
]]>
https://www.kobzarev.com/wordpress/defer-async-wordpress-scripts/ Добавление атрибутов defer и async к WordPress скриптам Кобзарёв Михаил Fri, 02 Feb 2018 12:18:44 +0000

Добавление атрибутов defer и async к WordPress скриптам

Автора! Проекты Шпаргалки Файлы Карта

Как использовать

Добавьте предложеный код в functions.php:

function mihdan_add_async_attribute( $tag, $handle ) {
    if ( 'my-js-handle' !== $handle ) {
        return $tag;
    }

    return str_replace( ' src', ' async="async" src', $tag );
}
add_filter( 'script_loader_tag', 'mihdan_add_async_attribute', 10, 2 );

Если вы хотите использовать атрибут defer, то просто замените в сниппете async="async на defer="defer".

Где взять идентификатор обработчика my-js-handle? Его вы можете подсмотреть в коде подключения скриптов внутри темы или плагина при помощи функции wp_register_script() и wp_enqueue_script() (первый аргумент):

wp_register_script( 'my-js-handle', $src, $deps, $ver, $in_footer );

Добавления к нескольким скриптам сразу

Что делать, если надо добавить атрибут defer сразу к нескольким скриптам? Собрать все идентификаторы обработчиков в массив и пройтись по ним циклом в том же хуке:

function mihdan_add_defer_attribute( $tag, $handle ) {
   
	$handles = array(
		'my-js-handle',
		'another-handle',
	);
   
   foreach( $handles as $defer_script) {
      if ( $defer_script === $handle ) {
         return str_replace( ' src', ' defer="defer" src', $tag );
      }
   }

   return $tag;
}
add_filter( 'script_loader_tag', 'mihdan_add_defer_attribute', 10, 2 );

Для атрибута async код будет выглядеть аналогично, за исключением девятой строки, где надо просто заменить defer="defer" на async="async.

Ссылки

1
]]>
https://www.kobzarev.com/soft/rainbow-brackets/ PhpStorm: плагин Rainbow brackets Кобзарёв Михаил Wed, 24 Jan 2018 10:56:46 +0000

PhpStorm: плагин Rainbow brackets

Автора! Проекты Шпаргалки Файлы Карта

С чем совместим

IntelliJ IDEA, PhpStorm, WebStorm, PyCharm, RubyMine, AppCode, CLion, GoLand, DataGrip, Rider, MPS, Android Studio.

Поддерживаемые языки

Java, Scala, Clojure, Kotlin, Python, Haskell, Agda, Rust, JavaScript, TypeScript, Erlang, Go, Groovy, Ruby, Elixir, ObjectiveC, PHP, C#, HTML, XML, SQL, Apex language …

Этот плагин также отлично работает с material-theme-jetbrains-eap.

Что подкрашивает

IElementType Скобка
tLSQBRACKET [
tRSQBRACKET ]
tLBRACE {
tRBRACE }
tLPARENTHESIS (
tRPARENTHESIS )
tLESS <
tGREATER >

Ссылки

1
]]>
https://www.kobzarev.com/dev-tips/9-go-to-column/ Chrome DevTools: перейти к линии в определённой колонке Кобзарёв Михаил Sat, 20 Jan 2018 13:53:37 +0000

Chrome DevTools: перейти к линии в определённой колонке

Автора! Проекты Шпаргалки Файлы Карта
  • Жмакните Cmd + O на панели «Sources» в открытом файле
  • Введите :5:9
  • Вас перекинет на 5 строку, колнку 9
1
]]>
https://www.kobzarev.com/dev-tips/8-copy-as-data-uri/ Chrome DevTools: копирование изображения как data URI Кобзарёв Михаил Mon, 15 Jan 2018 08:35:34 +0000

Chrome DevTools: копирование изображения как data URI

Автора! Проекты Шпаргалки Файлы Карта

Кликните правой клавишей мыши на миниатюре нужного вам изображения на панели «Resources» в DevTools и в появившемся контекстном меню выберете «Copy image as a data URI».

1
]]>
https://www.kobzarev.com/wordpress/woocommerce-prevent-admin-access/ Открыть доступ в админку для новой роли при установленном WooCommerce Кобзарёв Михаил Thu, 21 Dec 2017 13:04:56 +0000

Открыть доступ в админку для новой роли при установленном WooCommerce

Автора! Проекты Шпаргалки Файлы Карта

Чтобы отключить данное поведение, есть два выхода.

1. Расширить привелегии пользователя, добавив ему прав в виде edit_posts.

2. Или воспользоваться хуком woocommerce_prevent_admin_access:

add_filter( 'woocommerce_prevent_admin_access', '__return_false' );

Естественно, не тупо отключая полностью редирект, а проверяя роль текущего пользователя или по любому другому условию.

1
]]>
https://www.kobzarev.com/soft/install-phpstorm-with-snaps/ Установка PhpStorm при помощи Snap пакетов Кобзарёв Михаил Tue, 19 Dec 2017 09:01:44 +0000

Установка PhpStorm при помощи Snap пакетов

Автора! Проекты Шпаргалки Файлы Карта

Преимущество Snaps в том, что он сам будет автоматом обновлять приложение и вы всегда будете иметь свежую версию PhpStorm. Snaps, реально, очень прост для установки и использования. На Ubuntu 16.04 LTS и выше snaps уже предустановлен. На других Linux дистрибутивах вам придётся его сначала установить.

На данный момент подерживаются два канала с PhpStorm: Edge и Stable, в которых, соответственно, можно найти билды EAP и стабильную версию.

Для установки EAP версии PhpStorm через Snaps, выполните в терминале следующую команду:

sudo snap install phpstorm --classic --edge

Для установка стабильной версии:

sudo snap install phpstorm --classic

Для запуска PhpStorm, выполните snap-команду: phpstorm.

Ссылки

1
]]>
https://www.kobzarev.com/other/wordpress-meetup-spb-13/ WordPress Meetup SPb — 13 встреча в Санкт-Петербурге Кобзарёв Михаил Tue, 05 Dec 2017 08:40:32 +0000

WordPress Meetup SPb — 13 встреча в Санкт-Петербурге

Автора! Проекты Шпаргалки Файлы Карта

Приглашаются все, кому интересна тема запуска и развития сайтов на базе WordPress: владельцев сайтов, маркетологов, пользователей, разработчиков.

Регистрация тут.

Темы встречи

  • Типичные ошибки WordPress-новичков и начинающих фрилансеров (Игорь Тронь)
  • Конструктор контента на базе Carbon Fields (Катя Леурдо)
  • SVG и перформанс: как создавать красивые визуализации и не убить браузер ваших пользователей (Анна Ладошкина)
  • Интернет магазин с WordPress: WooCommerce + МойСклад (Анатолий Юмашев)
  • Запускаем рекламу в Facebook. Успей пока не запретили (Кирилл Хаткевич)

Подробности можно узнать на странице мероприятия.

Участие бесплатное! Регистрация обязательна!

1
]]>
https://www.kobzarev.com/projects/yandex-turbo-feed/ Плагин Турбо-страниц Яндекс для WordPress Кобзарёв Михаил Mon, 04 Dec 2017 09:53:58 +0000

Плагин Турбо-страниц Яндекс для WordPress

Автора! Проекты Шпаргалки Файлы Карта

Технология «Турбо-страницы» для мобильных устройств позволяет хранить содержимое страниц на сервере Яндекса и загружать их, не обращаясь к серверу, на котором размещается сайт. При этом можно по-прежнему отслеживать трафик сайта и учитывать доходы от рекламы.

(далее…)1

Спасибо за статью!

Также нашел видео на ютубе, можете добавить в статью для наглядности.

В вашем видео речь идет совсем про другой плагин.

Подскажите пожалуйста, как создать несколько фидов?


И как лучше загрузить, если на сайте 50 тыс. страниц, можно ли их все добавить?

Текущая бесплатная версия плагина поддерживает лишь один фид на сайт и чтобы загрузить 50к страниц нужно использовать API или подождать до конца месяца, мы как раз реализуем эту функционалность для плагина.

Подскажите, чем вызвана ошибка «Нет ни одного элемента item».

Вы для какого типа записи пытаетесь использовать плагин? И какие даты публикаций у записей? Посмотрите по настройкам плагина в админке, всё ли настроено так, как вы ожидаете?

Привет.

Спасибо за плагин!

Все было ок, пока не обновил WP. После обновления появилась такая ошибка: http://prntscr.com/muf6qj.

Я переустановил плагин, но не помогло.

Как я могу исправить это?


Скиньте мне на мыло mikhail@kobzarev.com полный текст ошибки или напишите в телеграм @mihdan — попробуем исправить. Какая верcия плагина и самого WP?
Михаил добрый день! Помогите пожалуйста разобраться. страница если зайти на нее на прямую работает и создает ленту — https://ikona-radoneg.ru/feed/mihdan-yandex-turbo-feed/ но в веб мастере пишет — «URL источника не отвечает. Проверьте доступность файла» Если нужны логи сервера могу предоставить.
Попробуйте просто в админке зайти на страницу пермалинков: Настройки -> Постоянные ссылки, чтобы скинуть правила перенаправлений

Добрый день, не найду как настроить плагин, нигде настроек нет в админке

Настройки через админку в плагине в бесплатной версии не предусмотрены, о чем написано выше. Все данные передаются при помощи хуков.
Спасибо помогли решить проблему. А то никак не знал, что использовать
Всегда пожалуйста!
Тоже выскакивает ошибка валидации.»URL источника не отвечает. Проверьте доступность файла». ПРи этом робот яндекса файл фида видит!
Вы когда по ссылке обращаетесь, видите xml? Если да, то дело не в моем плагине, оно сожет быть прикрыто у вас в robots.txt или конфиге Apache, nginx. Дайте ссылку на сайт, пожалуйста
Здравствуйте, помогите нубасу) Правильно ли я понял порядок действий для установки? 1. Скачать и установить плагин. — сделано, установлен в автоматическом режиме. 2. Настроек через оснастку нет, из необходимого создается канал rss, есть ссылка, которую необходимо загрузить в Яндекс турбо? — сделано. ссылка вот такого вида: https://liketwain.com/feed/mihdan-yandex-turbo-feed/ У меня она открывается и я вижу, что ссылка создана и доступна… Пытаюсь загрузить в яндекс турбо и возникает такая ошибка: Ошибка валидации URL источника не отвечает. Проверьте доступность файла Но источник отвечает) Может не выполнил какие-то предварительные действия? Спасибо!

Header set X-Robots-Tag «all»

Прописал в htaccess и заработало сразу

Спасибо, добавил ваш рецепт в статью.

С самим фидом проблем нет 100% — он проходит валидацию, а вот сервер ваш блокирует запросы от ботов, скорее всего. Пробую проверить заголовки и получаю:
Спасибо! А как думаете, это расширение All In One WP Security вызвало такие проблемы? Я попробовал его деактивировать и тоже самое. Или это мой хостинг http://fastcomet.com создает проблемы? Спасибо.
Деактивация плагина может ничего и не дать, посмотрите, что у вас в файле .htaccess в корне сайта. Правила могут удаляться только при полной деинтсалляции плагина, а не его отключении (
Поставил другой плагин, Яндекс все подхватил, .htaccess с вашим плагином сбрасывал по умолчанию — безрезультатно(
Возможно, не хватает в robots.txt строки Allow: /feed/mihdan-yandex-turbo-feed/
Было бы неплохо увидеть ошибки на сервере вашем, чтобы доработать плагин
Добрый Для простых сайтов настройки не требуются, если что-то нужно сделать сложное — есть хуки, но вам оно не требуется. Все шаги вы сделали правильно. Постараюсь после обеба помочь реоить ваш вопрос
то что нужно, не хватает только отзывов! спасибо
Под отзывами вы имеет ввиду комментарии? Если да, то на днях будет новая версия с поддержкой комментариев.
Статьи в xml обновляются? или надо проводить какие нибудь манипуляции что бы xml обновил статьи после того как яндекс скушал то что там было?
Так как фид добавлен стандартными методами API самого WordPress, то делать ничего не нужно — всё работает на автомате.
Спасибо за ответ и плагин, если турбо принесёт бабло спасибо будет звонче) перепробовал все плагины, работает только этот.
Премного благодарен за отзыв — пользуйтесь!
]]> https://www.kobzarev.com/wordpress/woocommerce-help-tab-in-the-admin/ Как скрыть закладку помощи в WooCommerce Кобзарёв Михаил Thu, 30 Nov 2017 08:21:13 +0000

Как скрыть закладку помощи в WooCommerce

Автора! Проекты Шпаргалки Файлы Карта

Она содержит полезную информацию о странице, на которой вы в данный момент находитесь. Для её открытия нужно нажать на маленькую кнопку в правом верхнем углу экрана с надписью «Помощь». После раскрытия закладки вам станут доступны видео-уроки по WooCommerce.

Если вы опытный пользователь WooCommerce или специалист по оптимизации панели администрирования, то, вероятно, эта закладка вам и не потребуется, поэтому давайте отключить её.

Откройте ваш functions.php внутри активной темы и добавьте туда этот небольшой сниппет:

add_filter( 'woocommerce_enable_admin_help_tab', '__return_false' );

Вся его магия заключается в использовании __return_false. — стандартного метода ядра WordPress.

Ссылки

1
]]>
https://www.kobzarev.com/programming/mass-deleting-files-from-slack/ Массовое удаление файлов из Slack Кобзарёв Михаил Tue, 14 Nov 2017 18:26:55 +0000

Массовое удаление файлов из Slack

Автора! Проекты Шпаргалки Файлы Карта

Решением является удаление старых и ненужных файлов, но в панели управления Slack (веб-морда) нет простого и удобного инструмента для массового удаления файлов, только работа с одиночными файлами, что, согласитесь, весьма печально.

Решение

Так как удалить несколько сотен файлов за раз? Для этого вам понадобятся:

  • Node.js версии 5 и выше
  • Токен из Slack, который можно взять из Slack API документации
  • Терминал и минимальные навыки работы в нём

Фишки

  • Может удалить все файлы
  • Может удалить только файлы старше 30 дней
  • Умеет не трогать запинненые файлы

Ограничения

  • Не умеет удалять файлы, отправленные приватно
  • Удаляет за раз не более 1000 файлов

Как установить

Откройте консоль и установите пакет slack-delete-files глобально через менеджер пакетов самого Node:

npm install -g slack-delete-files

Как использовать

slack-delete-files

Скрипт попросит у вас ввести токен и указать, хотите ли вы удалить все файлы или только те, что старше 30 дней

Усё!

Ваше дисковое пространство вернулось к вам. После удаления файлов из Slack покает можно смело деинтсаллировать:

npm uninstall -g slack-delete-files

Если вам интересен продукт — милости просим поконтрибьютить на GitHub.

1
]]>
https://www.kobzarev.com/dev-tips/7-dom-search-by-selector/ Chrome DevTools: поиск в DOM-дереве по CSS-селекторам Кобзарёв Михаил Mon, 13 Nov 2017 10:48:59 +0000

Chrome DevTools: поиск в DOM-дереве по CSS-селекторам

Автора! Проекты Шпаргалки Файлы Карта

Для этого просто вызовите поисковую строку при помощи сочетания клавиш CMD+F или CTRL+F в Windows и введите ваш селектор.

1
]]>
https://www.kobzarev.com/soft/redshift/ Берегите глаза с помощью Redshift Кобзарёв Михаил Sun, 05 Nov 2017 19:06:47 +0000

Берегите глаза с помощью Redshift

Автора! Проекты Шпаргалки Файлы Карта

Установка

Тут все предельно просто:

sudo apt install redshift redshift-gtk geoclue-2.0

Цветовая температура

Перед использованием утилиты в «боевом режиме» необходимо подобрать комфортную для ваших глаз цветовую температуру монитора, для чего можно поиграться параметрами в консоли (температура задаётся в Кельвинах), при этом стоит помнить, что нейтральная температура составляет 6500K:

redshift -O 3500
Redshift addjusted colour.

Для сброса в настройки по умолчанию используйте параметр -x

redshift -x

Чтобы задать температуру сразу для дня и ночи, используйте параметр -t в формате DAY:NIGHT:

redshift -t 6500:5000

По дефолту эти параметры выставлены в значение 5500K/3500K.

A more natural colour adjustment.

Регулировка яркости экрана

Вы также можете затемнить/осветлить ваш экран, используя ключ -b с гамма-значениями в диапазоне от 0.1 до 1.0 в формате DAY:NIGHT:

redshift -b 1.0:0.6
Redshift addjusted brightness.

Определение географического местоположения

После того, как вы нашли правильные настройки цвета и яркости, вам понадобятся задать географические координаты вашего местоположения, чтобы Redshift смог автоматически изменять цветовую температуру вашего монитора в зависимости от времени дня. Для чего используется параметр -l в формате LATITUDE:LONGITUDE:

# Если вы в Москве:
redshift -l 55.751244:37.618423

Redshift также может использовать встроенный в систему поставщик геолокации, в данном случае, ничего задавать ручками вам не придётся:

redshift -l geoclue

Другие параметры

Rredshift имеет несколько дополнительных параметров конфигурации. Чтобы узнать все его возможности, используйте параметр -h для вывода справки:

redshift -h
Redshift help.

Полная команда

Теперь вы знаете комфортную цветовую температуру экрана, яркость и ваше местоположение. Если вы все ещё находитесь в Москве и хотите, чтобы температура ночного экрана стала 5000K, а дневного осталась с настройками без изменений, при этом иметь полную яркость в течение дня и 80% яркости в ночное время, то введите:

reshift -l 55.751244:37.618423 -t 6500:5000 -b 1.0:0.8

Или тоже самое, но при автоматической геолокации:

redshift -l geoclue -t 6500:5000 -b 1.0:0.8
A more natural colour adjustment.

Индикатор в трее

Если вам хочется иметь красивый индикатор работы Redshift в трее, который умеет включать/выключать, то воспользуйтесь для этого gtk-утилитой gtk-redshift:

gtk-redshift -l geoclue -t 6500:5000 -b 1.0:0.6
Redshift tray icon.

Автозапуск Redshift

Чтобы автоматически запускать Redshift при входе в систему, необходимо добавить эту утилиту в автозапускаемые приложения. Для чего в поисковой строке Dash (если у вас Unity) вбейте «startup applications»:

Adding startup application.

Выберете «Добавить»:

Ubuntu startup applications dialogue.

И вставьте вашу команду Redshift:

Paste the command to start Redshift.

Заключение

Redshift — это отличный инструмент для предотвращения усталости глаз и бессонницы. Конечно, сначала вам нужно привыкнуть к слегка красноватому оттенку вашего экрана ночью. Но не переживайте, так как это придёт уже после нескольких дней активного использования.

Удачного кодинга по ночам!

Ссылки

1
]]>
https://www.kobzarev.com/linux/unity-remove/ Unity, ты кто такой? Давай, до свидания! Кобзарёв Михаил Thu, 26 Oct 2017 09:29:08 +0000

Unity, ты кто такой? Давай, до свидания!

Автора! Проекты Шпаргалки Файлы Карта

Удаляем саму Unity и все её конфиги:

sudo apt purge unity-session unity

Удаляем ненужные более зависимости:

sudo apt autoremove

Ставим рабочий стол Ubuntu и менеджер рабочих столов gdm3 (на тот случай, если у вас их по какой-то причине нет):

sudo apt install ubuntu-session gdm3

Данный пост актуален только тем, кто обновился с Ubuntu 17.04 до Ubuntu 17.10, так как при чистой инсталляции нового дистрибутива — Unity там уже нет, его выпилили накорню.

Краткий обзор Ubuntu 17.10

1
]]>
https://www.kobzarev.com/wordpress/backbone-wp-rest-api/ Backbone JavaScript-клиент для WordPress REST API Кобзарёв Михаил Wed, 25 Oct 2017 08:35:09 +0000

Backbone JavaScript-клиент для WordPress REST API

Автора! Проекты Шпаргалки Файлы Карта

Как использовать

Тут варианта всего два: либо напрямую подключить wp-api:

wp_enqueue_script( 'wp-api' );

Либо поставить данный скрипт в зависимости к любому из своих внутри темы или плагина:

wp_enqueue_script( 'my_script', 'path/to/my/script', array( 'wp-api' ), null, true );

Библиотека парсит корневые эндпоинты и создаёт соотношения Backbone-моделей и коллекций. После чего вам становятся доступными два корневых объекта: wp.api.models и wp.api.collections.

Модели включают в себя:

  • Category
  • Comment
  • Media
  • Page
  • PageMeta
  • PageRevision
  • Post
  • PostMeta
  • PostRevision
  • Schema
  • Status
  • Tag
  • Taxonomy
  • Type
  • User

Коллекции включают в себя:

  • Categories
  • Comments
  • Media
  • PageMeta
  • PageRevisions
  • Pages
  • Posts
  • Statuses
  • Tags
  • Taxonomies
  • Types
  • Users

Используя эти эндпоинты, как есть, вы можете читать, обновлять, создавать и удалять записи, причём работает это всё на стандартных методах Backbone (fetch, sync, save и destroy для моделей, sync для коллекций). Эти объекты очень просто расширяются, благодаря чему вы с легкостью можете построить свои представления поверх них.

Значения по умолчанию

Каждая модель или представление включают в себя ссылку на значения по умолчанию. Например, для wp.api.models.Post.prototype.args это:

  • author: null
  • comment_status: null
  • content: null
  • date: null
  • date_gmt: null
  • excerpt: null
  • featured_image: null
  • format: null
  • modified: null
  • modified_gmt: null
  • password: null
  • ping_status: null
  • slug: null
  • status: null
  • sticky: null
  • title: null

Доступные методы

Каждая модель или коллекция содержит список поддерживаемых методов. Например, модели, созданные для wp.api.models.Post, имеют такой массив методов:

["GET", "POST", "PUT", "PATCH", "DELETE"]

Разрешенные параметры

Каждая модель или коллекция содержит список опций, которые принимает соответствующая конечная точка, например, у wp.api.collections.Posts.prototype.options это:

  • author
  • context
  • filter
  • order
  • orderby
  • page
  • per_page
  • search
  • status

Обратите внимание, что параметры передаются вторым аргументом при создании моделей или коллекций.

Локализация схемы API

Клиент получает и использует cхему как часть объекта wpApiSettings.

В настоящее время схема не передается по умолчанию, вместо этого клиент делает ajax-запрос к API для загрузки cтруктуры, а затем кэширует его в сессионом хранилище браузера (если доступно).

Смотрите пример client-js или эту ветку в репозитории, которая пытается локализовать схему только один раз на каждого клиента.

При включенном SCRIPT_DEBUG плагин client-js начинает использовать локализованную схему.

Ждём загрузку клиента

Клиент стартует асинхронно. Если схема API локализована — клиент стартует немедленно, если нет — клиент делает ajax-запрос для загрузки схемы. Вся магия заключена в промисах (promise):

wp.api.loadPromise.done( function() {
	// тут ваш код
} );

Примеры моделей

Перед созданием поста или редактированием категорий убедитесь, что вы залогинены, а затем:

// Создать новый пост
var post = new wp.api.models.Post( { 
	title: 'Это тестовая публикация' 
} );
post.save();
 
// Загрузить существующий пост
var post = new wp.api.models.Post( { 
	id: 1 
} );
post.fetch();
 
// Получить коллекцию категорий поста (вернется промис)
// Используется _embedded данные, если доступны
post.getCategories().done( function( postCategories ) {
	// ... делаем что-либо с категориями.
	// Новый пост имеет всего одну категорию
	// под названием "Без категории"
	console.log( postCategories[0].name );
	// response -> "Без категории"
} );
 
// Получить автора поста
post.getAuthorUser().done( function( user ){
	// ... делаем что-нибудь с юзером
	console.log( user.get( 'name' ) );
} );
 
// Получить "тумбочку" поста
	post.getFeaturedImage().done( function( image ){
	// ... делаем что-либо с фото
	console.log( image );
} );
 
// Установить категории поста
post.setCategories( [ 'ананы', 'бананасы' ] );
 
// Получить все категории сайта
var allCategories = new wp.api.collections.Categories()
allCategories.fetch();

// Найти категорию по слюгу
var appleCategory = allCategories.findWhere( { slug: 'anany' } );
 
// Добавить категорию к коллекции postCategories, что получены выше
appleCategory.set( 'parent_post', post.get( 'id' ) );
 
// Заюзать метод POST
postCategories.create( appleCategory.toJSON(), { type: 'POST' } );
 
// Удалить категорию "Без категории"
postCategories.at( 0 ).destroy();
 
// Проверить результат и 
// при необходимости повторить
postCategories = post.getCategories();
 
postCategories.at( 0 ).get( 'name' );
// response -> "ананы"

Примеры коллекций

// Получить последние 10 постов
var postsCollection = new wp.api.collections.Posts();
postsCollection.fetch();

// Получить последние 25 постов
postsCollection.fetch( { 
	data: { 
		per_page: 25 
	} 
} );

// Изменить сортировку при помощи фильтра

postsCollection.fetch( { 
	data: { 
		'filter': { 
			'orderby': 'title', 
			'order': 'ASC' 
		} 
	} 
} );

// Пагинация для всех коллекций добавляется автоматом,
// поэтому можно получить следующую страницу при помощи more()
postsCollection.more();

// Получить пятую страницу коллекции
posts.fetch( { data: { page: 5 } } );

// Проверить, что коллекия имеет
// следующую страницу
posts.hasMore();

Работа с ревизиями

Ддя доступа к ревизиям поста или страницы есть специальные коллекции PostRevisions или PageRevisions.

// Получить все ревизии пост с ID=1
var revisions = new wp.api.collections.PostRevisions({}, { 
	parent: 1 
} );

// Коллекции ревизии также можно получить 
// из родительских коллекций самого поста.
// Но это займет два HTTP-запроса, зато у вас будет
// доступ к оригинальному посту и его коллекциям
var post = new wp.api.models.Post( { id: 1 } );
post.fetch();
post.getRevisions().done( function( revisions ) {
	console.log( revisions );
});

Если вы добавляет кастомные эндпоинты в API, то они также становятся доступным в качестве моделей и коллекций. Например, вы получите рабочие модели и коллекции, если при регистрации поста через register_post_type() или при регистрации таксономии через register_taxonomy(), если вы добавите ключ массива 'show_in_rest' => true.

Поскольку схема сохраняется в сессионном кеше пользователя, вы можете повторить запрос даже в новой вкладке браузера без создания дополнительных запросов на сервер.

Ссылки

1
]]>
https://www.kobzarev.com/wordpress/wp-all-import-cli/ Запуск WP All Import из командной строки Кобзарёв Михаил Wed, 11 Oct 2017 16:17:08 +0000

Запуск WP All Import из командной строки

Автора! Проекты Шпаргалки Файлы Карта

WP All Import — это самый лучший в своей нише WordPress-плагин для импорта XML, XLS, который можно, например, использовать для синхронизации товарного каталога WooCommerce с данными 1С.

(далее…)1

Выскакивает ошибка /home/renshop/**мой сайт**/clcr/run-wp-cron.sh: line 20: php: command not found

Посмотрите что там у вас на 20 строке
]]>
https://www.kobzarev.com/wordpress/favicon-wordpress-admin/ Как добавить favicon в админку WordPress Кобзарёв Михаил Wed, 11 Oct 2017 08:40:29 +0000

Как добавить favicon в админку WordPress

Автора! Проекты Шпаргалки Файлы Карта

Чтобы добавить пиктограмму вашего сайта на страницу авторизации и все страницы админки, достаточно такого небольшого сниппета в functions.php активной темы:

/**
 * Добавить фавикон на страницу логина и
 * в админку WordPress
 */
function mihdan_add_favicon() {
	printf( '<link rel="icon" type="image/png" sizes="16x16" href="%s">', get_theme_file_uri( 'images/favicons/favicon-16x16.png' ) );
}
add_action( 'login_head', 'mihdan_add_favicon' );
add_action( 'admin_head', 'mihdan_add_favicon' );

Если же хочется выводить пиктограмму, загруженную через кастомайзер (Внешний вид > Настроить > Свойства сайта), то код следует дописать:

/**
 * Добавить фавикон на страницу логина и
 * в админку WordPress
 */
function mihdan_add_favicon() {
	if ( has_site_icon() ) {
		printf( '<link rel="icon" type="image/png" sizes="16x16" href="%s">', get_site_icon_url( 16 ) );
	} else {
		printf( '<link rel="icon" type="image/png" sizes="16x16" href="%s">', get_theme_file_uri( 'images/favicons/favicon-16x16.png' ) );
	}
}
add_action( 'login_head', 'mihdan_add_favicon' );
add_action( 'admin_head', 'mihdan_add_favicon' );
1
]]>
https://www.kobzarev.com/wordpress/woo-visual-hook/ Визуализация хуков WooCommerce Кобзарёв Михаил Tue, 10 Oct 2017 12:34:36 +0000

Визуализация хуков WooCommerce

Автора! Проекты Шпаргалки Файлы Карта

Набрёл на неплохой гайд (подборку) наглядного отображения хуков в теме Storefront, заточенной под плагин WooCommerce (спасибо ребятам из чата «Ремесло в WordPress» за наводку).

(далее…)1

Здравствуйте. Подскажите, пожалуйста, как добавить к изображению карточки товара на странице каталога свой class? Не нужно ничего менять в самой функции, просто дополнить своим классом для общего дизайна

Понятно что action — woocommerce_before_shop_loop_item_title, хук woocommerce_template_loop_product_thumbnail

Перепробовал много вариаций, но так и не достиг желаемого

Спасибо

Можете подчерпнуть информацию тут.

Спасибо.

Подскажите пожалуйста код, который отключит отображение категорий товара, в карточке товара.

Вы не нашли интересующий вас хук?
]]> https://www.kobzarev.com/other/coffee/ Это нужно знать всем о Кофе! Кобзарёв Михаил Mon, 09 Oct 2017 08:36:10 +0000

Это нужно знать всем о Кофе!

Автора! Проекты Шпаргалки Файлы Карта

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

1
]]>
https://www.kobzarev.com/wordpress/kak-zapretit-klientam-otklyuchat-vazhnie-plagini-v-wordpress/ Как запретить клиентам отключать важные плагины в WordPress Кобзарёв Михаил Sun, 08 Oct 2017 18:36:32 +0000

Как запретить клиентам отключать важные плагины в WordPress

Автора! Проекты Шпаргалки Файлы Карта

Суть скрипта заключается в том, что он удаляет у важных плагинов ссылку на их деактивацию на странице со списком всех плагинов. Это позволит избежать белого экрана на продакшн-сайте, если клиент случайно вырубил критически важный аддон, функции которого вы, например, используете в своей теме.

Разместите данный сниппет в файле functions.php в вашей WordPress-теме:

function mihdan_disable_plugin_deactivation( $actions, $plugin_file, $plugin_data, $context ) {

	// Удалить ссылку редактирования исходного кода
	// для всех плагинов
	if ( array_key_exists( 'edit', $actions ) ) {
		unset( $actions[ 'edit' ] );
	}

	// Массив важных плагинов
	$important_plugins = array(
		'wpmu-dev-plusone/plusone.php',
		'plugin-folder-name/plugin.php',
	);

	// Удалить ссылку деактивирования у
	// критически важных плагинов
	if ( array_key_exists( 'deactivate', $actions ) && in_array( $plugin_file, $important_plugins ) ) {
		unset( $actions[ 'deactivate' ] );
	}

	return $actions;
}
add_filter( 'plugin_action_links', 'mihdan_disable_plugin_deactivation', 10, 4 );

Для правильной работы данного сниппета добавьте в массив $important_plugins список ваших плагинов в формате: папка_плагина/имя_плагина.php.

Ссылки

1
Благодарю за полезный код. Наконец то нашёл именно то, что и требовалось 🙂
Рад, что помог
]]>
https://www.kobzarev.com/other/wordpress-meetup-spb-12-vstrecha-v-sankt-peterburge/ WordPress Meetup SPb — 12 встреча в Санкт-Петербурге Кобзарёв Михаил Sat, 07 Oct 2017 19:00:15 +0000

WordPress Meetup SPb — 12 встреча в Санкт-Петербурге

Автора! Проекты Шпаргалки Файлы Карта

Приглашаются все, кому интересна тема запуска и развития сайтов на базе WordPress: владельцев сайтов, маркетологов, пользователей, разработчиков.

Регистрация тут.

Темы встречи:

  • Как раскрыть маркетинговый потенциал WordPress? (Константин Хомченко)
  • Введение в HTTP API WordPress (Миша Рудрастых)
  • 8 правил эффективного взаимодействия с подрядчиком при создании и продвижении сайтов (Никита Селиванов)
  • Проект Guthenberg: революция в консоли (Анна Ладошкина)
  • Сайт для бизнеса на WordPress в 2017 году (Анатолий Юмашев)

Подробности можно узнать на странице мероприятия.

Видео-отчёт

Пока только пятичасовое видео одним кусоком, но скоро обещают в нормальном виде.

https://www.youtube.com/watch?v=bqQUTgL_h9g1
]]>
https://www.kobzarev.com/wordpress/how-to-setup-tab-completions-for-wp-cli-commands/ Автодополнение команд в WP-CLI Кобзарёв Михаил Sat, 07 Oct 2017 13:17:58 +0000

Автодополнение команд в WP-CLI

Автора! Проекты Шпаргалки Файлы Карта

Настройка автодополнения

Для настройки нам потребуется специальный bash-файл, который можно качнуть в репозитории WP-CLI на Github.

Положите свежескачанный файл wp-completion.bash, например, в вашу домашнюю директорию (у меня это /home/mihdan/wp-completion.bash).

Откройте файл .bashrc в вашем любимом текстовом редакторе:

vi ~/.bashrc

Укажите в нём ссылку на wp-completion.bash:

source /home/mihdan/wp-completion.bash

Сохраните и закройте файл.

Для активации вновь внесённых правил в файл .bashrc выполните команду:

source ~/.bashrc

А затем перегрузите терминал. Готово.

Как это работает

Взаимодействие с WordPress через WP-CLI

Чтобы понять, зачем вам может понадобиться WP-CLI, рекомендую посмотреть великолепный и позитивный доклад Геннадия Ковшенина «Взаимодействие с WordPress через командную строку«, который он представил на WordCamp Moscow 2017:

Ссылки

1
]]>
https://www.kobzarev.com/other/pragmatic-perl-restored/ Новые выпуски Pragmatic Perl Кобзарёв Михаил Fri, 06 Oct 2017 07:51:19 +0000

Новые выпуски Pragmatic Perl

Автора! Проекты Шпаргалки Файлы Карта

Но для этого им нужны авторы статей, поэтому они приглашаем всех желающих присылать свои статьи на editor@pragmaticperl.com. Про что писать, как оформлять и т.п. можно почитать у них на сайте.

Кроме того, у журнала появился спонсор Kritika — сервис по статическому анализу Perl-кода (и не только). PerlCritic, табы/пробелы, дублирования, покрытие тестами и прочие полезные метрики для поддержания и улучшения качества кода.

1
]]>
https://www.kobzarev.com/wordpress/sensible-script-enqueuing-shortcodes/ «Сенсейский» способ подключения скриптов внутри шорткода Кобзарёв Михаил Mon, 02 Oct 2017 09:04:14 +0000

«Сенсейский» способ подключения скриптов внутри шорткода

Автора! Проекты Шпаргалки Файлы Карта

Обычный способ

function mihdan_wp_enqueue_scripts() {
	wp_enqueue_script( 'script-name', plugins_url( '/js/script.js' , __FILE__ ), array(), '1.0.0', false );
}
add_action( 'wp_enqueue_scripts', 'mihdan_wp_enqueue_scripts' );

С первого взгляда всё работает идеально и соответствует кодексу, но данный пример можно использовать только на этапе разработки, так как ваш JavaScript-файл загружается абсолютно на всех страницах, даже там, где он не нужен и где нет шорткода от плагина.

Это очень неэффективно с точки зрения оптимизации загрузки сайта.

Этот код можно немного оптимизировать, если обернуть его в условные теги и подключать, например, только на страницах архивов:

function mihdan_wp_enqueue_scripts() {
	if ( is_archive() ) {
		wp_enqueue_script( 'script-name', plugins_url( '/js/script.js' , __FILE__ ), array(), '1.0.0', false );
	}
}
add_action( 'wp_enqueue_scripts', 'mihdan_wp_enqueue_scripts' );

Уже лучше, но, всё-равно, скрипт подключается на страницах, где нет вашего шорткода.

Сенсейский метод

Суть его заключается в том, чтобы зарегистрировать ваш JavaScript-файл при возникновении события wp_enqueue_scripts, а подключить только внутри вашего шорткода.

Для начала зарегистрируйте ваш JavaScript-файл без подключения через wp_register_script():

function mihdan_wp_enqueue_scripts() {
	wp_register_script( 'script-name', plugins_url( '/js/script.js' , __FILE__ ), array(), '1.0.0', true );
}
add_action( 'wp_enqueue_scripts', 'mihdan_wp_enqueue_scripts' );

Этим вы дадите знать ядру WordPress о существовании вашего файла, но он не будет загружен на страницу.

Последний параметр true в функции wp_register_script() даёт указание движку вставлять ваш файл в подвал сайта, а не его шапку, как это сделано по-умолчанию.

Следующим шагом будет подключение вашего скрипта по требованию, то есть прямо внутри шорткода:

function mihdan_shortcode( $atts ) {
	// Код вашего шорткода
	...

	// Подключение вашего скрипта по требованию
	wp_enqueue_script( 'script-name' );
}
add_shortcode( 'mihdan_shortcode', 'mihdan_shortcode' );

Получается, что скрипт подключается в футер только на тех страницах, где он реально необходим и только, если на этих страницах есть ваш шорткод, профит.

Если вам надо, чтобы скрипты в обязательном порядке загрузились в <header>, то этот способ не для вас, так как при данном подходе скрипты убегут в футер.

Ссылки

1

А с комментариями так можно сделать? Чтобы загружать скрипт только в том случае, если есть шорткод в комментариях?

На пальцах пример покажите, я не совсем понял сути вопроса 🙂

Есть скрипт, который нужно загрузить при наличии на странице шорткода стандартной галереи. Все написанное в статье работает только в том случае, если шорткод расположен в контенте записи или страницы. Если шорткод написать в комментарии, то скрипт не загружается.

Скорее всего, надо на фильтр comment_text повесить парсинг шорткодов, так как по дефолту шорткоды в комментах не парсятся.

Как я делал для подсветки кода в комментарияхю.

Спасибо, буду пробовать

О результатах сообщите, тоже интересно
Благодарю за гайд, нашёл наконец таки 🙂
Рад, что помог
Все верно. У меня другой вопрос: как будет себя вести такое подключение, если на странице например 5 раз используется такой шорткод? Каждый раз подключаться? Или только один раз, а остальные запросы проигнорируются?
Подключится только один раз, о чем написано в документации:
Функция добавляет скрипт, только если он еще не был добавлен и другие скрипты от которых он зависит зарегистрированы.
Внутри ядра слаг скрипта кладется в ключ массива, поэтому двух одинаковых быть не может
Понятно, спасибо
Пожалуйста
А если обязательно в шапке надо подключить этот скрипт ?
Тогда просто не трогайте последний параметр в функции wp_register_script(). Если его не указывать — файл по-дефолту подключится в шапке.
Миш, как может скрипт, указанный на вывод в шоткоде, попасть в шапку? Ну никак же)) Когда шоткод преобразуется в контенте, то шапка уже сформирована. Так что скрипт улетит на хук wp_footer.
Честно, не заморачивался настолько глубоко шапочным вопросом, так как, обычно, у меня все скрипты опущены в футер.
]]> https://www.kobzarev.com/wordpress/amp-excerpt/ Добавление анонса поста в AMP-версию страницы Кобзарёв Михаил Fri, 29 Sep 2017 09:39:00 +0000

Добавление анонса поста в AMP-версию страницы

Автора! Проекты Шпаргалки Файлы Карта

Если вы, также как и я, хотите добавить анонс над контентом в AMP-версии страницы в плагине AMP от компании Automattic, то реализуется это в два счёта.

/**
 * Перед рендером поста, вставляем фильтр `the_content`
 */
function mihdan_load_my_amp_content_filters() {
    add_filter( 'the_content', 'mihdan_prefix_excerpt_to_content' );
}
add_action( 'pre_amp_render_post', 'mihdan_load_my_amp_content_filters' );

/**
 * Получаем цитату (анонс) поста,
 * добавляем перед контентом и возвращаем всё вместе
 *
 * @param string $content контент поста
 * @return string
 */
function mihdan_prefix_excerpt_to_content( $content ) {
    $excerpt = get_post()->post_excerpt;
    if ( $excerpt ) {
        $content = $excerpt . $content;
    }
    return $content;
}

Ссылки

1
]]>
https://www.kobzarev.com/wordpress/syntaxhighlighter-in-de-comments/ SyntaxHighlighter Evolved в De:comments Кобзарёв Михаил Wed, 27 Sep 2017 09:18:32 +0000

SyntaxHighlighter Evolved в De:comments

Автора! Проекты Шпаргалки Файлы Карта

Копнув код плагина SyntaxHighlighter Evolved, я нашел, что он цепляется за фильтр comment_text для поиска своих шорткодов внутри текста комментария:

add_filter( 'comment_text', array( $this, 'parse_shortcodes_comment' ), 7 );

Данный фильтр не используется в плагине De:comments, но, судя по его исходнику, есть аналогичный фильтр с названием decomments_comment_text, вот за него и цепляемся:

/**
 * Прикрутить SyntaxHighlighter к комментариям
 * на базе плагина De:comments
 *
 * @param string $comment_text текст комментария
 *
 * @return string
 */
function mihdan_add_syntax_highlighter_to_comments( $comment_text ) {
	/** @var SyntaxHighlighter $SyntaxHighlighter */
	global $SyntaxHighlighter;
	return $SyntaxHighlighter->parse_shortcodes_comment( $comment_text );
}
add_filter( 'decomments_comment_text', 'mihdan_add_syntax_highlighter_to_comments' );

Результат можно наблюдать в комментариях этого сайта.

1
Для вставки кода используйте HTML-теги
ваш код
Тестим?
]]>
https://www.kobzarev.com/projects/yandex-zen-feed/ WordPress плагин Yandex Zen Feed Кобзарёв Михаил Tue, 26 Sep 2017 13:23:57 +0000

WordPress плагин Yandex Zen Feed

Автора! Проекты Шпаргалки Файлы Карта

Установка

  • Скачайте последнюю стабильную версию в zip-архиве.
  • Распакуйте архив, переименуйте папку в mihdan-yandex-zen-feed и зазуипуйте её обратно.
  • Перейдите в Плагины -> Добавить новый -> Загрузить новый.
  • Загрузите скачанный архив.
  • Перейдите в Плагины и активируйте установленный плагин.

После установки фид станет доступным по адресу http://example.com/feed/mihdan-yandex-zen-feed/

Настройка

На текущий момент плагин проходит стадию активной разработки, поэтому в нем отсутствует страница с настройками, но эти самые настройки можно задавать через фильтры внутри вашей темы в файле functions.php.

Количество постов в ленте

Согласно спеке Яндекса, материалов в RSS-ленте для Дзена может быть до 50. Добавил фильтр на тот случай, если вы хотите выводить их меньше:

add_filter( 'mihdan_yandex_zen_feed_posts_per_rss', function( $posts_per_rss ) {
	return 50;
} );

Слаг ленты

По умолчанию слаг для ленты выглядит как mihdan-yandex-zen-feed, если вам не нравится такое название, можете его переименовать через фильтр:

add_filter( 'mihdan_yandex_zen_feed_feedname', function( $slug ) {
	return 'yandex-zen';
} );

Стоит отметить, что в качестве разделителя всегда используется тире, подчеркивание запрещено, это связано с некоторыми конфигурациями старых серверов, мало ли 🙂

Список разрешенных тегов

По спеке внутри тега <content:encoded> не должно быть никаких лишних тегов, типа <iframe>, поэтому плагин вырезает лишнее, оставляя только необходимый для разметки минимум. Для переопределения есть фильтр:

add_filter( 'mihdan_yandex_zen_feed_allowable_tags', function( $allowable_tags ) {
	// Добавить тег <kbd>
	$allowable_tags[] = 'kbd';

	return $allowable_tags;
} );

Копирайт у фоток

По дефолту плагин ставит в копирайт домен того сайта, на котором запущен, но можете вписать туда что угодно через соответствующий фильтр:

add_filter( 'mihdan_yandex_zen_feed_copyright', function( $slug ) {
	return 'Я Креведко!';
} );

Таксономия для вывода категорий

По умолчанию для вывода категорий используется таксономия category, которая переопределяется через фильтр:

add_filter( 'mihdan_yandex_zen_feed_taxonomy', function( $taxonomy ) {
	return 'tag';
} );

Тип поста для вывода записей

По умолчанию используется post_type=post, это можно переопределить через фильтр:

add_filter( 'mihdan_yandex_zen_feed_post_type', function( $post_type ) {
	return array( 'news', 'music' );
} );

Соотношение категорий

У Яндекс.Дзена есть список предзаданных категорий, чтобы связать ваши категории с их категориями есть соответствующий фильтр.

add_filter( 'mihdan_yandex_zen_feed_categories', function( $categories ) {
	
	$categories = array(
		'Общество'   => array( 380, 378, 379, 381, 3724, 5663 ),
		'Технологии' => array( 382 ),
		'Дом'        => array( 1 ),
	);

	return $categories;
} );

Используемые в Дзене тематики:

  • Происшествия
  • Политика
  • Война
  • Общество
  • Экономика
  • Спорт
  • Технологии
  • Наука
  • Игры
  • Музыка
  • Литература
  • Кино
  • Культура
  • Мода
  • Знаменитости
  • Психология
  • Здоровье
  • Авто
  • Дом
  • Хобби
  • Еда
  • Дизайн
  • Фотографии
  • Юмор
  • Природа
  • Путешествия

Комментарии, пулл реквесты, ишью приветствуются.

1
И что она будет просто выводить посты с Дзена на странице? Они будут индексироваться?
Всё наоборот: плагин создает фид (ленту), который вы пересылаете модераторам сервиса Яндекс.Дзен. И посты из этого фида начинают показываться в сервисе Яндекс.Дзен и в Яндекс.Браузере у пользователей.
Добрый день, при установке плагин выдал фатальную ошибку:
Parse error: syntax error, unexpected '[' in /var/www/u0135765/public_html/thecashback.ru/wp-content/plugins/mihdan-yandex-zen-feed/mihdan-yandex-zen-feed.php on line 210"
Можно исправить?
У вас версия РНР какая? Обновите плагин — там много исправлений внесено. Эту ошибку я сейчас исправлю. Это связано с вашей старой версией РНР. PS: ошибку исправил. Мой вам совет — обновите РНР, небезопасно сидеть на такой древней версии!
Спасибо! Версию обновил до 7.1. Скажите, а фид же надо настраивать перед отправкой в Яндекс? Если да, то… это плохо, работа с functions.php пугает ))
Фид надо настраивать только при условии, что дефолтное поведение вас не устраивает (поменять слюг, назначить категории, указать другую категорийную таксономию). В 99% случаев ничего трогать не нужно. GUI-интерфейс планируется в PRO-версии плагина, где будет страница настроек, возможность исключить конкретный пост из фида, возможность переназначить категорию конкретному посту, поддержка audio и video тегов. Большинству народу это не нужно, поэтому в бесплатной версии, если припрет , можете воспользоваться фильтрами, описанными выше.
]]> https://www.kobzarev.com/dev-tips/6-record-timeline-undocked/ Chrome DevTools: Простая запись происходящего на экране Кобзарёв Михаил Mon, 18 Sep 2017 15:27:11 +0000

Chrome DevTools: Простая запись происходящего на экране

Автора! Проекты Шпаргалки Файлы Карта

Открепите окно DevTools от основного окна браузера и сдвиньте его так, чтобы кнопка начала записи располагалась как можно ближе к необходимому вам участку страницы. Или используете хоткей Ctrl+E, чтобы включить/выключить запись.

1
]]>
https://www.kobzarev.com/soft/sublime-text-3-0/ Долгожданный релиз Sublime Text 3.0 Кобзарёв Михаил Wed, 13 Sep 2017 18:09:19 +0000

Долгожданный релиз Sublime Text 3.0

Автора! Проекты Шпаргалки Файлы Карта

Что изменилось

Если вкратце, то ничего нового этот релиз не привнес, а только: обновлённая UI тема, новые цветовые схемы и новая иконка, которая теперь теряется на тулбаре, так как все привыклю к старой.

Их других плюх стоит отметить, что разработчики постарались наславу и полностью переработали систему подсветки синтаксиса (она реально теперь быстро работает), добавили поддержку тача на Windows, поддержку Touch Bar на macOS и репозитории для apt/yum/pacman в Linux.

Установка под Ubuntu

Ставим ключ GPG:

wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key add -

Определяемся с каналом. Для стабильного выбираем:

echo "deb https://download.sublimetext.com/ apt/stable/" | sudo tee /etc/apt/sources.list.d/sublime-text.list

Для девелоперского выбираем:

echo "deb https://download.sublimetext.com/ apt/dev/" | sudo tee /etc/apt/sources.list.d/sublime-text.list

Обновляем список пакетов apt и ставим Sublime Text:

sudo apt-get update
sudo apt-get install sublime-text

Установка под другие пакетные менеджеры описана на офсайте.

1
]]>
https://www.kobzarev.com/wordpress/soglasie-na-obrabotku-personalnih-dannih-v-de-comments/ Согласие на обработку персональных данных в De:comments Кобзарёв Михаил Wed, 13 Sep 2017 09:15:06 +0000

Согласие на обработку персональных данных в De:comments

Автора! Проекты Шпаргалки Файлы Карта Для начала создайте страницу «Согласие на обработку персональных данных физицеских лиц» в структуре вашего сайта со слагом, например, privacy-policy, на которую мы будем ссылаться. Текст можете взять у меня, он проверен юристами, только поменяйте адрес сайта на свой. Ну а дальше воспользуемся хуком самого плагина decomments_form_input, который позволяет вставлять кастомные инпуты в конце формы, возле кнопки «Отправить». Именно в это место мы и добавим нашу ссылку на созданный пост:
/**
 * Добавить ссылку возле кнопки "Отправить" на
 * "Согласие на обработку персональных данных"
 */
function decomments_form_input() {
	echo '<p>Нажимая на кнопку "' . esc_html__( 'Submit', 'decomments' ) . '", я даю <a href="/privacy-policy/" target="_blank">согласие на обработку персональных данных</a>.</p>';
}
add_action( 'decomments_form_input', 'decomments_form_input' );

Ну и с Днём Программиста вас!

1
]]>
https://www.kobzarev.com/plugins/wpcasa/ WPCasa — лучший плагин для сайтов недвижимости Кобзарёв Михаил Tue, 12 Sep 2017 08:23:50 +0000

WPCasa — лучший плагин для сайтов недвижимости

Автора! Проекты Шпаргалки Файлы Карта

Плагин WPCasa является одним из самых лучших решений (в плане скорости, чистоты кода и пропитки хуками для дальнейшей кастомизации) для быстрого развертывания сайта, посвященного недвижимости.

Основные преимущества перед конкурентами

  • Плагин бесплатный (платные темы и аддоны)
  • Из коробки — это готовый каталог недвижимости
  • Девять разнообразных профессиональных тем оформления
  • Огромный набор шорткодов для интеграции практически в любую тему
  • Код полностью покрыт хуками, что позволяет расширять функционал, не трогая исходники самого плагина
  • Исходный код чистый, понятный, структурированый — одним словом, поэзия!
1
]]>
https://www.kobzarev.com/dev-tips/5-local-mods/ Chrome DevTools: Отслеживание изменений файлов Кобзарёв Михаил Fri, 08 Sep 2017 09:29:11 +0000

Chrome DevTools: Отслеживание изменений файлов

Автора! Проекты Шпаргалки Файлы Карта После внесения изменений и сохранения файла через DevTools выберите «Local modifications» в контекстном меню файла в левом сайдбаре панели «Sources» и вы увидите список ваших правок, на которые можно откатиться.
1
]]>
https://www.kobzarev.com/dev-tips/4-snippets/ Chrome DevTools: Запуск предзаданных сниппетов кода на любой странице Кобзарёв Михаил Wed, 06 Sep 2017 09:08:20 +0000

Chrome DevTools: Запуск предзаданных сниппетов кода на любой странице

Автора! Проекты Шпаргалки Файлы Карта

Чтобы попробовать:

  • Перейдите SourcesSnippets (это в левом сайдбаре)
  • В контекстном меню окна сниппетов выберите New или нажмите в этом же окне кнопку New Snippet
  • Введите имя для вашего будущего сниппета
  • Кликните правой клавишей мыши по имени созданного сниппета и далее Run (или Ctrl/Cmd + Enter)

Вам доступно полноценное многострочное редактирование и подтверждения случайного закрытия сниппета без его сохранения.

Исходник сниппета взят отсюда.1
]]>
https://www.kobzarev.com/dev-tips/3-copy-as-curl/ Chrome DevTools: Повторить сетевой запрос в cURL Кобзарёв Михаил Tue, 05 Sep 2017 14:41:31 +0000

Chrome DevTools: Повторить сетевой запрос в cURL

Автора! Проекты Шпаргалки Файлы Карта 1
]]>
https://www.kobzarev.com/dev-tips/2-pseudo-trigger/ Chrome DevTools: Активация псевдокласса DOM-элемента Кобзарёв Михаил Sun, 03 Sep 2017 21:17:23 +0000

Chrome DevTools: Активация псевдокласса DOM-элемента

Автора! Проекты Шпаргалки Файлы Карта 1
]]>
https://www.kobzarev.com/dev-tips/1-port-forward/ Chrome DevTools: Перенаправление порта для открытия локальных ссылок на мобилке Кобзарёв Михаил Sat, 02 Sep 2017 21:35:14 +0000

Chrome DevTools: Перенаправление порта для открытия локальных ссылок на мобилке

Автора! Проекты Шпаргалки Файлы Карта 1
]]>
https://www.kobzarev.com/browser/undress-your-trello-links/ Как «раздеть» ссылки в Trello Кобзарёв Михаил Sun, 30 Jul 2017 19:46:17 +0000

Как «раздеть» ссылки в Trello

Автора! Проекты Шпаргалки Файлы Карта

До

https://trello.com/c/MMIAzcT1/461-candidates-new-%D1%82%D0%B5%D1%81%D1%82%D0%BE%D0%B2%D0%BE%D0%B5-%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D0%B4%D0%BB%D1%8F-%D0%BC%D0%B8%D0%B4%D0%BB-%D1%81%D0%B8%D0%BD%D1%8C%D0%BE%D1%80

После

https://trello.com/c/MMIAzcT1

Как это работает

  1. Установите расширение для вашего браузера (вы можете использовать любое другое расширение расширение подобного плана)
  2. Вставьте следующий код для урла https://trello.com/.
  3. Теперь вы можете накатить все, что захотите )))
(shouldNotRun => {
	if (shouldNotRun) return

	window.__UNDRESS_TRELLO_LINKS__ = true
	
	const links = document.getElementsByClassName('list-card')

	const updateLinks = () =>
		Array.from(links).forEach(link => {
			const attr = link.getAttribute('href')

			if (!attr) return
			
			const matched = attr.match(/\/c\/\w*/)
			
			if (!matched) return

			link.setAttribute('href', matched[0])
		})

	window.addEventListener('DOMContentLoaded', () => {
		updateLinks()

		setInterval(updateLinks, 2000)
	})
})(window.__UNDRESS_TRELLO_LINKS__)

Ссылки

1
]]>
https://www.kobzarev.com/soft/sega-ubuntu/ Как я в сеговские игры в бубунте гамаю Кобзарёв Михаил Tue, 18 Jul 2017 14:21:32 +0000

Как я в сеговские игры в бубунте гамаю

Автора! Проекты Шпаргалки Файлы Карта

Какой джойстик выбрать

Самым верным решением является использование оригинального джойстика Sega, но такие тяжело достать в наше время и не каждый сможет сделать переходник для подключения его к компьютеру.

Оригинальный джойстик Sega Mega Drive.

Поэтому достаточно приобрести дешевый китайский аналог с USB-выходом на Алиэкспрессе, например от компании Data Frog.

Клон от компании Data Frog.

Ставим эмулятор приставки Kega Fusion

Если у вас 64-битная архитектура, то для начала добавьте в систему пакеты под 32-битную архитектуру:

sudo dpkg --add-architecture i386
sudo apt-get update

Теперь можно поставить и сам эмулятор:

# Идем во временную папку
cd /tmp

# Скачиваем пакет
wget -c http://www.carpeludum.com/download/kega-fusion_3.63-2_i386.deb

# Ставим
sudo dpkg -i kega-fusion_3.63-2_i386.deb

Ставим утилиту управления джойстиком

# Консольная утилита
sudo apt-get install joystick

# GTK-морда к ней
sudo apt-get install jstest-gtk

Проверка джойстика

Втыкаем китайскую поделку в USB компьютера и запускаем jstest-gtk:

jstest-gtk

В этой программе вы можете проверить работоспособность гейпада и каждой его кнопки, а также переназначить некоторые клавиши.

Наслаждаемся

С настройкой Kega Fusion проблем возникнуть не должно, если появятся вопросы — милости прошу в комменты.

Игра Sonic в Kega Fusion

Ссылки

1

Михаил, здравствуйте!

Установил Кегу согласно способу, описанному Вами. Почему-то не работает звук. Не могли бы вы помочь с данной проблемой? Установлена Ubuntu 19.04. Железо — одноплатный компьютер Odroid H2 (производитель платы заявляет поддержку данной оси «из коробки». Заранее спасибо!

А вообще там есть звук, в самой ОС?

Да, в ОС звук есть, включая сторонние эмуляторы.

Затрудняюсь ответить, ни разу не сталкивался, вот прямо сейчас в Убунте попробовал поставить — нормально.

Видимо, какой-то конфликт со звуковым чипом ALC662, HDA или их драйверами на самом одноплатнике. Попробовал установить Кегу на другой стационарник — там звук работает. Будем разбираться)

Напишите, если вопрос решиться.

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


1) Перепроверил файл fusion.ini в папке /.Kega Fusion (скрытая папка) и вручную выставил следующие значения:

ALSADeviceName=default

UsingALSA=1

SoundDisabled=0


2) перед запуском Кеги в Терминале ввел следующую команду:

killall pulseaudio

Спасибо, возможно, кому-то пригодится.

Помогло.

Пожалуйста!

]]> https://www.kobzarev.com/programming/oh-shit-git/ Вот дерьмо, Git! — советы по решению проблем с Git Кобзарёв Михаил Wed, 05 Jul 2017 14:41:16 +0000

Вот дерьмо, Git! — советы по решению проблем с Git

Автора! Проекты Шпаргалки Файлы Карта

Git — жёсткий как первый анальный секс: прикрутить его очень легко, но вот выяснить, как исправить свои же ошибки, практически невозможно.

(далее…)1

Ну и где aнальчик?

Я не по этой части)
]]>
https://www.kobzarev.com/virus/petya-a/ Petya.A Кобзарёв Михаил Wed, 28 Jun 2017 09:56:37 +0000

Petya.A

Автора! Проекты Шпаргалки Файлы Карта

Как происходит заражение

Вариант 1

Вирус распространяется через почту, при открытии вложения из письма, используя уязвимость CVE-2017- 0199

Зловред докачивает недостающие файлы, модифицирует MBR, перегружает ОС и начинает шифрование жесткого диска. По корпоративной сети он распространяется при помощи служебной программы PsExec.

Вариант 2

Атака возникла из-за уязвимости в программе для отчетности и документооборота M.E.doc, которая имеет встроенную функцию обновления и периодически обращается к серверу upd.me-doc.com.ua (92.60.184.55) с помощью User Agent medoc1001189. Обновление имеет хеш dba9b41462c835a4c52f705e88ea0671f4c72761893ffad79b8348f57e84ba54. Большинство легитимных пингов равняется примерно 300 байт. Утром 27 июня в 10:30 программа обновилась, обновление составило примерно 333 КБ

После обновления произошло следующее:

  • был создан файл rundll32.exe;
  • прошло обращение к локальным IP на TCP-порты 139 и 445;
  • был создан файл perfc.bat;
  • была запущена консоль cmd.exe с командой /c schtasks /RU «SYSTEM» /Create /SC once /TN «» /TR «C:\Windows\system32\shutdown.exe /r /f» /ST 14:35”;
  • был создан и запущен файл ac3.tmp (02ef73bd2458627ed7b397ec26ee2de2e92c71a0e7588f78734761d8edbdcd9f);
  • был создан файл dllhost.dat.

В дальнейшем вирус распространялся через уязвимость в протоколе Samba.

Как защититься от вируса

  • Установить последние обновления Windows
  • Отключить протокол SMBv1 (недавно писал в посте о WannaCry).
  • Заблокировать на сетевом оборудовании или в настройках файерволла порты 137, 138, 139 и 445.
  • Установить программу для защиты MBR от несанкционированных изменений. К примеру, Mbrfilter.
  • Не использовать программу M.E.doc или не устанавливать последнее её обновление.

Разлочка жесткого диска

Подробную информацию смотрите в посте «Криптовымогатель Petya денег не получит: генерируем ключ разлочки жесткого диска сами«.

Ссылки

1
]]>
https://www.kobzarev.com/wordpress/opensans-font-in-wordpress-dashboard/ Возвращаем шрифт Open Sans в админку WordPress Кобзарёв Михаил Wed, 07 Jun 2017 13:54:02 +0000

Возвращаем шрифт Open Sans в админку WordPress

Автора! Проекты Шпаргалки Файлы Карта

Теперь дашборд WordPress 4.6 использует уже имеющиеся в вашей операционной системем шрифты, что ускоряет загрузку панели инструментов и позволяет вам чувствовать себя как дома на любом устройстве, которое вы используете.

Это, конечно, клёво, но мне реально не нравится дашборд WordPress, открытый в Windows, где на данный момент дефолтным sans-serif шрифтом является Segoe UI.

Поэтому, как обычно, нашёлся добрый человек по-имени George Jipa и запилил небольшой плагин, возвращающий назад шрифт Open Sans.

<?php
/**
 * OpenSans FTW
 *
 * Plugin Name: OpenSans FTW
 * Plugin URI: http://wpcrumbs.com/
 * Description: Just a simple plugin that brings back the old Open Sans font to WordPress 4.6+ dashboard.
 * Version: 1.0.1
 * Author: GeorgeJipa
 * Author URI: http://wpcrumbs.com/
 * Text Domain: opensans-ftw
 * Domain Path: /languages
 * License: GPLv2 or later
 * License URI: http://www.gnu.org/licenses/gpl-2.0.txt
 */
// Exit if accessed directly
if (!defined('ABSPATH'))
	exit;

class OpenSans_FTW {

	protected static $instance = null;
	public $plugin_slug = 'opensans-ftw';
	public $action_name;

	public static function get_instance() {
		if (null == self::$instance) {
			self::$instance = new self;
		}

		return self::$instance;
	}

	/**
	 * Initialize
	 * 
	 * @return
	 */
	public function __construct() {
		// set localisation
		$this->load_plugin_textdomain();
		
		// check wordpress version
		$wp_version = get_bloginfo('version');
		
		if (version_compare($wp_version, '4.6', '<')) {
			add_action('admin_notices', array($this, 'add_notice'));
			return;
		}

		// set vars
		$this->action_name = $this->get_action_name();

		// hooks
		add_action($this->action_name, array($this, 'add_assets'), 999);
	}

	/**
	 * Load localisation files
	 *
	 * Locales found in:
	 *      - WP_LANG_DIR/opensans-ftw/opensans-ftw-LOCALE.mo
	 *      - WP_CONTENT_DIR/plugins/opensans-ftw-LOCALE.mo
	 */
	public function load_plugin_textdomain() {
		$locale = apply_filters('plugin_locale', get_locale(), $this->plugin_slug);

		load_textdomain($this->plugin_slug, WP_LANG_DIR . '/' . $this->plugin_slug . '/' . $this->plugin_slug . '-' . $locale . '.mo');
		load_plugin_textdomain($this->plugin_slug, false, plugin_basename(dirname(__FILE__)) . '/languages');
	}

	/**
	 * Get action_name based on page
	 * 
	 * @global string $pagenow
	 * @return string
	 */
	public function get_action_name() {
		global $pagenow;

		if (is_admin()) {
			$action_name = 'admin_enqueue_scripts';
		} elseif ($pagenow == 'wp-login.php') {
			$action_name = 'login_enqueue_scripts';
		} else {
			$action_name = 'wp_enqueue_scripts';
		}

		return $action_name;
	}

	/**
	 * Add notice
	 */
	public function add_notice() {
		echo '<div id="message" class="error"><p>' . esc_html__('OpenSans FTW requires WordPress 4.6 or higher.', $this->plugin_slug) . '</p></div>';
	}

	/**
	 * Add assets to backend (admin) or frontend
	 * 
	 * @return
	 */
	public function add_assets() {
		// we don't need to add the assets when the adminbar is disabled (on dashboard is always enabled, 
		// but on frontend can be disabled using `show_admin_bar` hook... so we need to check)
		// ! exception will be wp-login.php page !
		if (!is_admin_bar_showing() && $this->action_name != 'login_enqueue_scripts') {
			return;
		}

		// enqueue font
		$handle = 'open-sans';

		if (wp_style_is($handle, 'registered')) {
			wp_enqueue_style($handle);
		} else {
			wp_enqueue_style($handle, '//fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,300,400,600&subset=latin,latin-ext');
		}

		// add custom css based on page
		switch ($this->action_name) {
			case 'wp_enqueue_scripts':
				$custom_css = '#wpadminbar *:not([class="ab-icon"]) { font-family: "Open Sans", sans-serif !important; }';
				break;
			case 'login_enqueue_scripts':
				$custom_css = 'body { font-family: "Open Sans", sans-serif !important; }';
				break;
			default:
				$custom_css = 'body, #wpadminbar *:not([class="ab-icon"]), .wp-core-ui, .media-frame input, .media-frame textarea, .media-frame select { font-family: "Open Sans", sans-serif !important; }';
				break;
		}

		wp_add_inline_style($handle, $custom_css);
	}

}

add_action('plugins_loaded', array('OpenSans_FTW', 'get_instance'));
?>

Плагин заапрувили в репозитории WordPress.org под названием OpenSans FTW.

1
]]>
https://www.kobzarev.com/projects/vk-community-messages/ WordPress плагин VK Community Messages Кобзарёв Михаил Fri, 02 Jun 2017 08:19:21 +0000

WordPress плагин VK Community Messages

Автора! Проекты Шпаргалки Файлы Карта

Установка

  1. Скачайте последнюю стабильную версию в zip-архиве.
  2. Распакуйте архив, переименуйте папку в mihdan-vk-community-messages и зазуипуйте её обратно.
  3. Перейдите в Плагины -> Добавить новый -> Загрузить новый.
  4. Загрузите скачанный архив.
  5. Перейдите в Плагины и активируйте установленный плагин.

Настройка

На текущий момент плагин проходит стадию активной разработки, поэтому в нем отсутствует страница с настройками, но эти самые настройки можно задать через фильтр mihdan_vk_community_messages_options внутри вашей темы в файле functions.php:

add_filter( 'mihdan_vk_community_messages_options', function( $options ) {

	// Тут переопределяем дефолтные настройки, например:
	$options['welcomeScreen'] = true;

	// Возвращаем новые настройки
	return $options;
} );

// Массив дефолтных настроек выглядит так:
$options = array(
	'onCanNotWrite' => 'function() {}',
	'welcomeScreen' => false,
	'expandTimeout' => 0,
	'expanded' => 0,
	'widgetPosition' => 'right',
	'buttonType' => 'blue_circle',
	'disableButtonTooltip' => false,
	'tooltipButtonText' => 'Ответим на любые ваши вопросы',
	'disableNewMessagesSound' => false,
	'disableExpandChatSound' => false,
	'disableTitleChange' => false,
);

Где $options — опции блока с виджетом. Массив, который может содержать поля:

  • onCanNotWrite (function) — функция, которая будет вызвана, если пользователь по каким-то причинам не может писать сообщения;
  • welcomeScreen (integer, [0,1]) — информация о том, нужно ли показывать экран приветствия (1 — да, 0 — нет);
  • expandTimeout (integer) — интервал до раскрытия виджета в миллисекундах. Обратите внимание, при обновлении страницы сохраняется состояние виджета — если он уже раскрыт пользователем, этот параметр не применяется.
  • expanded (integer, [1]) — 1, если нужно раскрыть виджет сразу;
  • widgetPosition (string) — выравнивание кнопки (left или right);
  • buttonType (string) — внешний вид кнопки (no_button или blue_circle);
  • disableButtonTooltip (integer, [1]) — 1, если нужно отключить всплывающую подсказку;
  • tooltipButtonText (string) — текст всплывающей подсказки;
  • disableNewMessagesSound (integer, [1]) — 1, если нужно отключить звук о новом сообщении;
  • disableExpandChatSound (integer, [1]) — 1, если нужно отключить звук при раскрытии виджета;
  • disableTitleChange (integer, [1]) — 1, если нужно отключить изменение заголовка страницы, когда приходит новое сообщение.

Комментарии, пулл реквесты, ишью приветствуются.

1
У себя на сайте так и не смогу настроить положение слева, прописывал ({ welcomeScreen: «1»,widgetPosition: «left» }); и на право и все равно только справа.
А где «прописываете»? И где посмотреть?
]]>
https://www.kobzarev.com/wordpress/github-updater/ GitHub Updater Кобзарёв Михаил Wed, 31 May 2017 09:28:30 +0000

GitHub Updater

Автора! Проекты Шпаргалки Файлы Карта

Как использовать

Этот плагин разрабатывался с целью упрощения обновления плагинов или тем WordPress, хостящихся на GitHub. Чтобы GitHub Updater начал следить за вашей темой и обновлять ее вовремя, она должная содержать определенный заголовок в style.css, в котором указывается URL репозитория на GitHub:

# Указываем слюг
GitHub Theme URI: afragen/test-child

# Или полный URL репозитория с темой
GitHub Theme URI: https://github.com/afragen/test-child

Тоже самое касается и плагинов, но заголовок там немного отличается, например:

# Указываем слюг репозитория
GitHub Plugin URI: afragen/github-updater

# Или полный URL репозитория с плагином
GitHub Plugin URI: https://github.com/afragen/github-updater

URL может должен быть в формате https://github.com/<owner>/<repo> или в более коротком варианте <owner>/<repo>.

Не нужно добавлять оба варианта и указывать расширение .git тоже не имеет смысла.

Установка

Через Composer

Запустите composer-команду:

composer require afragen/github-updater

Через админку

  1. Скачайте последнюю стабильную версию в zip-архиве.
  2. Распакуйте архив, переименуйте папку в github-updater и зазуипуйте её обратно.
  3. Перейдите в Плагины -> Добавить новый -> Загрузить новый.
  4. Загрузите скачанный архив.
  5. Перейдите в Плагины и активируйте установленный плагин.

Ручками

  1. Скачайте последнюю стабильную версию в zip-архиве.
  2. Распакуйте архив, переименуйте папку в github-updater.
  3. Скопируйте папку в вашу директорию плагинов /wp-content/plugins/.
  4. Перейдите в Плагины и активируйте скопированный плагин.

Смотрите Кодекс для получения большей информации по поводу ручной установки плагинов.

Через Git

Используя git, перейдите в директорию /wp-content/plugins/ и склонируйте туда весь репозиторий:

git clone https://github.com/afragen/github-updater.git

Теперь перейдите в Плагины и активируйте склонированный плагин.

Установка GitHub Updater в качестве Must Use Plugin (опционально)

  1. Выберите любой из вышеописанных методов для установки плагина.
  2. НЕ активируйте GitHub Updater!
  3. Создайте символьную ссылку (симлинк) с wp-content/plugins/github-updater/mu/ghu-loader.php на wp-content/mu-plugins.

Симлинк в Linux

cd <WordPress root>
ln -sv wp-content/plugins/github-updater/mu/ghu-loader.php wp-content/mu-plugins

Симлинк в Windows (Vista, 7, 8, 10)

cd /D <WordPress root>
mklink wp-content\mu-plugins\ghu-loader.php wp-content\plugins\github-updater\mu\ghu-loader.php

Таким способом вы получите автоматические обновления плагинов и тем и невозможность отключить GitHub Updater во избежании разного рода недоразумений.

Slack

Также у проекта GitHub Updater есть своя Slack команда. Кликните здесь для получения инвайта. Вы будете автоматом добавлены в каналы #general и #random. Не забывайте и про другие каналы внутри комманды.

Ссылки

1
Спасибо, очень полезно для начинающих
Всегда пожалуйста!
]]>
https://www.kobzarev.com/linux/sublime-text-nautilus/ Sublime Text не показывается в меню «Открыть с помощью» Кобзарёв Михаил Wed, 31 May 2017 07:55:45 +0000

Sublime Text не показывается в меню «Открыть с помощью»

Автора! Проекты Шпаргалки Файлы Карта

Чинится копированием ярлыка приложения в домашнюю директорию текущего пользователя:

# Копируем ярлык
cp /usr/share/applications/sublime_text.desktop ~/.local/share/applications/sublime_text.desktop

# Обновляем базу данных ярлыков
sudo update-desktop-database
1
Спасибо огромное, уже отчаялся а ваш метод быстро и четко сработал.
Сам столкнулся с подобной проблемой, поэтому и копнул глубже,чтобы работало))))
]]>
https://www.kobzarev.com/other/json-feed/ Анонс JSON Feed Кобзарёв Михаил Tue, 23 May 2017 16:31:54 +0000

Анонс JSON Feed

Автора! Проекты Шпаргалки Файлы Карта

Для большинства девелоперов формат JSON проще для чтения и написания чем XML. Они обычно плачут при выборе парсера для разбора XML, а вот декодирование JSON занимает всего одну строку кода.

Мы надеемся, что из-за легкости JSON и простоты формата JSON Feed разработчики будут больше привлекаться к работе над открытым вебом.

Знаете, как моя любимая часть этого проекта? Спецификация, которую так приятно читать. Пожелаем удачи парням в их нелегком начинании. Кстати, они уже написали плагин для WordPress.

Ссылки

1
]]>
https://www.kobzarev.com/programming/gyazo/ Свой скриншотер с блек-джеком и шлюхами Кобзарёв Михаил Fri, 19 May 2017 11:49:06 +0000

Свой скриншотер с блек-джеком и шлюхами

Автора! Проекты Шпаргалки Файлы Карта

За основу был взят проект Gyazo и его Linux-версия Gyazo for Linux. Написан он на руби и использует стандартные утилиты самой ОС.

Установка

Зависимости

Так как скрипт зависит от некоторых внешних проектов — доставим их в систему:

sudo apt-get install ruby imagemagick xdotool xclip

Установка через apt-get

# Качаем скрипт
curl -s https://packagecloud.io/install/repositories/gyazo/gyazo-for-linux/script.deb.sh | sudo bash

# Ставим
sudo apt-get install gyazo

Установка через yum Install

# Качаем скрипт
curl -s https://packagecloud.io/install/repositories/gyazo/gyazo-for-linux/script.rpm.sh | sudo bash

# Ставим
sudo yum install gyazo

Установка ручками

# Скачиваем скрипт
wget -c https://github.com/gyazo/Gyazo-for-Linux/raw/master/src/gyazo.rb

# Делаем его исполняемым
chmod +x ./gyazo.rb

# Переносим в папку с программами
sudo mv gyazo.rb /usr/local/bin/gyazo

Настройка

По умолчанию gyazo отправляет все сделанные скриншоты на свои сервера и возращает ссылку имеено на них. Но если внимательно посмотерть на исходный код, то станет понятно, что это поведение можно переопределить через специально созданный файл конфигурации.

Создаем файл $HOME/.gyazo.config.yml, перезаписывающий дефолтные настройки и вносим туда реквизиты вашего сервера и название системной утилиты для создания, собственно, скриншотов:

# доменное имя
host: screens.kobzarev.com

# путь к загрузчику
cgi: /upload.php

# порт
http_port: 80

# есть ли поддержка https
use_ssl: false

# команда запуска скриншотера
command: gnome-screenshot -a -f

Где command может принимать одно из значений в зависимотси от вашего дистрибутива:

Программа Команда запуска
scrot scrot -s
gnome-screenshot gnome-screenshot -a -f
xfce4-screenshooter xfce4-screenshooter -r -o gyazo

Либо выбираете любую другую утилиту для вашей версии ОС.

Загрузчик

Сам аплоадер файлов, вы можете написать на любом удобном вам языке программирования, который вы больше всего знаете и понимаете. Я выбрал для этой цели PHP. Мой загрузчик upload.php в урезанном варианте выглядит примерно так:

<?php
// Приставка для имени файла.
$uri = "http://screens.kobzarev.com/";

// Если передан файл.
if ( isset( $_FILES['imagedata']['name'] ) ) {

	// Генерим имя для загруженного файла.
	$path = date('Y-m-d-U') . '.png';

	// Перемещаем из временной папки в нужный нам каталог.
	if ( move_uploaded_file( $_FILES['imagedata']['tmp_name'], $path ) ) {

		// Отдаем полный URL.
		echo $uri , $path;
	} else {

		// При ошибке - отдаем только домен.
		echo $uri;
	}
} else {

	// При ошибке - отдаем только домен.
	echo $uri;
} 
?>

Шорткат

Осталось только повесить наш скрипт на понравившуюся вам комбинацию клавиш и всё. Я предпочитаю Win + Print:

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

Вопросы и комментарии приветствуются.

1

Полезно, спасибо!

Пользуйтесь!
]]>
https://www.kobzarev.com/virus/wannacry/ WannaCry Кобзарёв Михаил Mon, 15 May 2017 09:05:22 +0000

WannaCry

Автора! Проекты Шпаргалки Файлы Карта

Проверка

Чтобы узнать, подвержен ли ваш комп этой заразе, вбейте в консоли вашего компьютера:

dism /online /get-packages | findstr KB4012212

Если в ответе вы увидите KB4012212, это значит, что патч у вас уже установлен, в противном случае установить патч Microsoft Security Bulletin MS17-010 (от него активация винды не слетает).

Для открытия консоли выполните последовательно: нажмите кнопки Windows + R, там впишите cmd.exe и жмакните Enter.

Защита

Так как данный вирус использует брешь в протоколе SMBv1 (эксплойт для Windows, известный под названием EternalBlue), просто отключите его одним из трех предложенных способов.

1. Ручное отключение SMBv1

Перейдите в Control Panel\Programs\Programs and Features:

И уберите галочку с пункта SMB1.0/CIF Filse Sharing Support.:

2. Из консоли

dism /online /norestart /disable-feature /featurename:SMB1Protocol

3. Отключение утилитой

Также можно скачать программу SMB2 Tools Disable и запустить ее от имени администратора:

Это программа-переключатель: если SMBv1 был включен — она его выключит и наоборот. После её запуска необходимо перезагрузить ваш компьютер.

Ну и своевременно устанавливайте обновления вашей системы.

Удаление заразы

  1. Скачайте патч MS17-010 для нужной Windows
  2. Отключитесь от интернета
  3. Откройте командную строку (cmd) от имени администратора: Пуск => В поиске вбиваете cmd => Нажимаете правой кнопкой мыши => Запуск от имени администратора
  4. Вписываете эту команду в командную строку:
    netsh advfirewall firewall addrule dir=in action= blockprotocol=tcp localport=445 name="Block_TCP-445"
  5. Во время загрузки и появления окна BIOS-a нажмите F8, после чего в списке выберите «Безопасный режим»
  6. Найдите и удалите папку вируса. Для этого нажмите на любой ярлык вируса правой кнопкой мыши, выберите «Расположение файла», и удалите корневую папку
  7. Перезагрузите компьютер
  8. Зайдите в обычный режим, и запустите устанавливаться патч MS17-010
  9. Во время установки подключитесь к интернету

Способ для Windows Vista, 7, 8, 8.1, 10, а также Windows Server 2008/2012/2016.

Расшифровка

Для распаковки зашифрованных файлов (с расширением .wncry) воспользуйтесь наработками Лаборатории Касперского.

Из непроверенных источников стало известно, что частично можно восстановить файлы при помощи утилиты Shadow Explorer. Ссылкок не даю нарочно.

Некоторым пользователям удалось расшифровать свои файлы на компьютере под управлением ОС Windows XP. Подробности есть на Хакере. Опять же используя одну из многочисленных дыр самой операционной системы.

Исследователи безопасности, доработали WannaKey до wanakiwi и теперь он умеет расшифровывать данные на ОС: Windows XP, Windows 7, 2003, Vista, Server 2008 и 2008 R2. Подробности на Хакере.

1
]]>
https://www.kobzarev.com/other/chrome-mousewheel-tabs/ Переключение вкладок Google Chrome при помощи колеса мыши в Windows Кобзарёв Михаил Fri, 14 Apr 2017 06:51:58 +0000

Переключение вкладок Google Chrome при помощи колеса мыши в Windows

Автора! Проекты Шпаргалки Файлы Карта

Установка AutoHotKey

Для начала вам необходимо установить бесплатную программу с открытым исходным кодом AutoHotKey для создания макросов и автоматизации, которая умеет биндить клавиши в Windows. Она очень простая в понимании и освоении.

Качните и установите AutoHotKey с официального сайта. Не берите ее с обменников и разных зеркал, напоритесь на пару-тройку троянов.

Создание скрипта

Создайте пустой файл chrome-mouswheel-tabs.ahk и скопируйте в него следующий скрипт:

;; Wheel Scroll Tabs for Google Chrome 

#IfWinActive ahk_class Chrome_WidgetWin_0 
 ~$WheelDown:: 
 ~$WheelUp:: 
    MouseGetPos,, yaxis 
    IfGreater,yaxis,23, Return 
    IfEqual,A_ThisHotkey,~$WheelDown, Send ^{PgDn} 
                                 Else Send ^{PgUp} 
Return 
#IfWinActive

Сохраните полученный файл и запустите его, дважды кликнув мышкой. Всё должно уже работать.

Возможные проблемы

Если у вас не заработало сразу, попробуйте поменять строку Chrome_WidgetWin_0 на Chrome_WidgetWin_1 и перегрузите скрипт.

Если вы хотите, чтобы скролл также работал и над панелью omnibox, поменяйте строку yaxis,23 на yaxis,67 и перегрузите скрипт.

Ссылки

1
]]>
https://www.kobzarev.com/other/trello-bookmarklet/ Как создать карточку Trello из любой веб-страницы Кобзарёв Михаил Thu, 23 Mar 2017 17:41:41 +0000

Как создать карточку Trello из любой веб-страницы

Автора! Проекты Шпаргалки Файлы Карта

Как это работает

  1. Перетащите эту ссылку в ваши закладки:
    Отправить в Trello
  2. Зайдите на страницу, которую вы хотите отправить в Trello
  3. Если вы находитесь на странице, которую хотите превратить в карточку, нажмите на закладку!

Ссылки

1
]]>
https://www.kobzarev.com/linux/aceproxy/ Сказ о том, как я AceProxy в Ubuntu 16.10 поднимал Кобзарёв Михаил Wed, 22 Mar 2017 11:18:51 +0000

Сказ о том, как я AceProxy в Ubuntu 16.10 поднимал

Автора! Проекты Шпаргалки Файлы Карта

Установка VLC

Обновляем пакеты на сервере:

sudo apt-get update

Добавляем пакет vlc-nox (это vlc, собранный без иксов):

sudo apt-get install vlc-nox

Пробуем запустить vlc:

sudo cvlc -I telnet \
    --clock-jitter -1 \
    --network-caching -1 \
    --sout-mux-caching 2000 \
    --telnet-password admin

Если при первом запуске, вы получите ошибку о невозможности запуска сервера от рута:

VLC is not supposed to be run as root. Sorry. If you need to use real-time priorities and/or privileged TCP ports you can use /usr/bin/vlc-wrapper (make sure it is Set-UID root and cannot be run by non-trusted users first).

Можно сделать небольшой хак в недрах самого vlc. Для чего в файле /usr/bin/vlc замените строку geteuid на getppid:

sudo sed -i 's/geteuid/getppid/' /usr/bin/vlc

Если вы будете собирать vlc из исходников, то просто скомпилируйте его с флагом --enable-run-as-root.

Установка Ace Stream

Для начала мы ставим версию 2.х из репозитория, а уж потом обновляем её до актуальной 3.х простой заменой файлов (это работает, проверено).

Добавляем репозиторий в /etc/apt/sources.list:

sudo deb http://repo.acestream.org/debian/ wheezy main

Скачиваем ключ:

wget -O - http://repo.acestream.org/keys/acestream.public.key | apt-key add -

Обновляем пакеты на сервере:

sudo apt-get update

Устанавливаем acestream 2.х:

sudo apt-get install acestream-engine

Сливаем себе зависимости для версии 3.х:

sudo apt-get install python-setuptools
sudo apt-get install python-m2crypto
sudo apt-get install python-apsw

Находим здесь ссылку на дистриб под вашу ОС и качаем его:

wget "http://dl.acestream.org/linux/acestream_3.1.16_ubuntu_16.04_x86_64.tar.gz"

Создаём временную директорию:

mkdir /tmp/acestream

Распаковываем полученный архив:

tar zxvf acestream_3.1.16_ubuntu_16.04_x86_64.tar.gz -C /tmp/acestream

Копируем соответствующие файлы из временной папки в корневую папку /opt/acestream:

sudo mv /tmp/acestream/acestream_3.1.16_ubuntu_16.04_x86_64/ /opt/acestream

Проверяем версию установленного приложения:

/opt/acestream/acestreamengine --version

Версия должна быть та, что содержится в названии архива. В моем случае это 3.1.16.

Установка AceProxy

Доставляем зависимости:

sudo apt-get install python-gevent git python-psutil python-pkg-resources

Клонируем себе обновляемый форк репозитория ValdikSS:

cd /opt
git clone https://github.com/AndreyPavlenko/aceproxy.git

Редактируем конфиг прокси /opt/aceproxy/aceconfig.py:

# Автоматом запускать Ace Stream при старте прокси
acespawn = True

# Команда запуска движка Ace Stream
acecmd = "/opt/acestream/acestreamengine \
    --client-console \
    --live-cache-type memory \
    --live-mem-cache-size 209715200 \
    --upload-limit 0 \
    --live-buffer 60"

# Включаем использование VLC
vlcuse = True

# Команда запуска VLC
vlccmd = "cvlc -I telnet \
    --clock-jitter -1 \
    --network-caching -1 \
    --sout-mux-caching 2000 \
    --telnet-password admin"

# Так установите эти переменные
videodelay = 0 
videoobey = False 
videopausedelay = 0

Запуск AceProxy

В простейшем случае запуск выглядит так:

python /opt/aceproxy/acehttp.py > /var/log/acehttp.log 2>&1 &

Проверка

Для проверки возьмите плейлист из вашего прокси по адресу:

http://ваш_домен:8000/torrent-telik/playlist.m3u

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

Будут вопросы, пишите в комментах.

Источник torrent-telik.com похоже загнулся окончательно.

Ссылки

1
Здравствуйте, Подскажите, пожалуйста, как исправить ошибку? При установке движка acestream — sudo apt-get install acestream-engine появляется сообщение: acestream-engine : Зависит: python2.7-apsw но он не может быть установлен E: Невозможно исправить ошибки, у вас отложены (held) битые пакеты пытаюсь установить на чистую ubuntu 16.04.3 по Вашей инструкции
Тут похожая тема
Сдётся мне вы пытаетесь накатить на старую бубунту новые пакеты.
на роутере aceproxy поднять возможно?
Ну если там кастомная прошивка и есть ssh, думаю, можно.
Подскажите пожалуйста, как правильно дать рут доступ асе, чтоб можно было прописать путь к кэшу в раздел нтфс? При попытке указать путь — нет прав. Спасибо.
Достаточно правильно указать путь в параметре --cache-dir, если --live-cache-type=disk (по дефолту оно так). Подробности в официальном мануале есть.
]]> https://www.kobzarev.com/programming/ssh-by-key/ Доступ к SSH по ключу Кобзарёв Михаил Mon, 20 Mar 2017 15:29:12 +0000

Доступ к SSH по ключу

Автора! Проекты Шпаргалки Файлы Карта

Генерируем ключ

Локально на своем компьютере необходимо создать 2048 битный RSA ключ :
ssh-keygen -t rsa -b 2048 -C "mihdan@yandex.ru"

Загружаем ключ на сервер

Публичный ключ нужно загрузить на сервер:
ssh mihdan@127.0.0.1 mkdir -p .ssh
cat ~/.ssh/id_rsa.pub | ssh mihdan@127.0.0.1 'cat >> .ssh/authorized_keys'

Готово

Теперь пробуем залогиниться без пароля:
ssh mihdan@127.0.0.1
1
]]>
https://www.kobzarev.com/wordpress/adding-support-for-woocommerce-2-7s-new-gallery-feature-to-your-theme/ Как добавить новую галерею WooCommerce 2.7 в вашу тему Кобзарёв Михаил Thu, 09 Mar 2017 14:32:25 +0000

Как добавить новую галерею WooCommerce 2.7 в вашу тему

Автора! Проекты Шпаргалки Файлы Карта

Программисты постарались на славу и запилили новую фичу, которую условно можно разделить на три отдельные новые функции:

  • Image zoom / magnification
  • Lightbox
  • Slider

Для включения каждой из них дополните functions.php в вашей теме хуком after_setup_theme со следующим сожержимым:

add_action( 'after_setup_theme', 'yourtheme_setup' );

function yourtheme_setup() {
	// Включить zoom на фото
	add_theme_support( 'wc-product-gallery-zoom' );
	// Включить лайтбокс
	add_theme_support( 'wc-product-gallery-lightbox' );
	// Включить слайдер
	add_theme_support( 'wc-product-gallery-slider' );
}

Таким образом, можно включать/выключать только нужный вам функционал.

Стилизация

Если в вашей теме отключены стили ядра WooCommerce, то придется ручками прописать их в соответствии со следующим списком:

  • .woocommerce-product-gallery – класс обёртки галереи. Также включает в себя класс, показывающий, сколько колонок с миниатюрами будет показано, например, .woocommerce-product-gallery--columns-4;
  • .woocommerce-product-gallery__wrapper – обёртка для слайдера;
  • .woocommerce-product-gallery__image – элемент figure, содержащий само изображение, которое обернуто в ссылку;
  • .woocommerce-product-gallery__trigger – ссылка, активирующая функциональность лайтбокса;
  • .flex-control-thumbs – класс, который присваивается тегу ol при включении функций слайдера на основе скрипта Flexslider.

При изменении количества колонок миниатюр через фильтр woocommerce_product_thumbnails_columns вам также придется дописать соответствующие правила в ваш файл со стилями.

Если интересно, то можно посмотреть, какой SASS используется в теме Storefront для стилизации галереи продукта.

Для изменения шаблонов вывода галереи продукта скопируйте и вставьте себе в тему следующие файлы: templates/single-product/product-image.php и templates/single-product/product-thumbnails.php.

И будьте внимательны, если данные шаблоны у вас уже переопределены, возьмите их снова из папки WooCommerce, так как для полноценной работы в них добавили новые скрипты и немного css. Без этого галерея просто может не заработать.

Живой пример

Ссылки

1
]]>
https://www.kobzarev.com/wordpress/28-facts-about-wordpress/ 28 интересных фактов о WordPress, которых вы не знали Кобзарёв Михаил Thu, 02 Mar 2017 14:55:13 +0000

28 интересных фактов о WordPress, которых вы не знали

Автора! Проекты Шпаргалки Файлы Карта

Платформа включает в себя массу преимуществ:

  • Она очень популярна во всем мире, что, несомненно, вызывает доверие пользователей.
  • Она имеет бесплатную версию, что с каждым днём привлекает все больше новых пользователей.
  • Создание сайта на WordPress не требует специальных знаний программирования, достаточно лишь следовать инструкциям, которые легко можно найти в интернете, или же на официальном сайте.
  • Установка WordPress, в среднем, занимает не более 10 минут. Для начала необходимо скачать набор файлов, составляющих программу, или, другими словами, – дистрибутив.

Эти скрипты WordPress можно скачать на официальном сайте WordPress.org. После процедуры установки, можно приступать к внешнему оформлению сайта/блога. Для этого, в разделе WordPress Themes пользователям предоставлен огромный выбор качественных тем и шаблонов.

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

Вот, собственно, основные шаги, которые необходимо выполнить для создания своего сайта или блога. После этого пользователь может наполнять созданный сайт контентом.

Благодаря своей простоте блог-платформа доступна для каждого. Этим она и прекрасна.

Представляем вашему вниманию 28 интересных фактов о WordPress, о которых вы не знали.

Первый факт, возможно, не станет для вас сенсацией. Доля WordPress на рынке систем управления содержимым сайта составляет 59,3%, в то время как доля того же Joomla составляет всего 6,2%, Drupal – 4,9%, Magento – 2,8%, а Blogger всего 2,6%. На остальные системы управления контентом приходится 24,2%. Как видите, среди CMS (content management system) платформа WordPress уверенно занимает позицию лидера.

Популярность WordPress обусловлена не только простотой использования. Ежедневно платформа используется для публикации новостей, видео, фотографий, аудио, различного рода товаров и т.д. Это привлекает аудиторию и значительно повышает рейтинг сайта в поисковике. Доказательством этого является тот факт, что поисковый запрос “WordPress” в Google дает 1,6 млрд. (!) результатов. Также, данные на 2016 год показывают, что WordPress 4.6 был загружен 3,8 млн. раз. Среди систем управления это наивысшие показатели.

Как уже говорилось ранее, WordPress предоставляет широкий выбор платных и бесплатных плагинов и тем. Наиболее продаваемые темы это: Avada, X The Theme, Enfold.

Среди них также много бесплатных. Если быть более точным — 4,081 бесплатных тем. Responsive, Customizr, Zerif Lite, Vantage, Hueman являются самыми популярными.

Для расширения функционала сайта в вашем распоряжении 46,291 бесплатных плагинов. Топ бесплатных плагинов выглядит следующим образом: Regenerate Thumbnails, Akismet, WooCommerce, Yoast Seo, Hello Dolly.

В тройку лидеров наиболее продаваемых плагинов вошли: Visual Composer, Slider Revolution, Layerslider.

И ещё немного статистики. Пользователи пишут более чем 69,8 миллионов новых постов ежемесячно. Более 542 миллионов слов пишутся в блогах WordPress ежедневно. Среди такого разнообразия будет не сложно найти что-то интересное, не правда ли?

За последние три года был зафиксирован значительный рост количества просмотров страниц блогов на WordPress.com. В 2013 году количество просмотров насчитывало 11,2 миллиона. Спустя 3 года этот показатель вырос в два раза. На июль 2016 года было зафиксировано 22,2 млн. просмотров.

По последним данным, известно, что 17 млн. сайтов используют WordPress в качестве блога или сопроводительного ресурса. Среди них есть сайты как обычных пользователей, так и всемирно известных компаний.

Например, среди знаменитых компаний, которые тесно сотрудничают с WordPress, есть компания-учредитель WordPress.com – Automattic. Она занимается веб-разработкой различных продуктов и, по словам самого руководства, является надёжным тылом WordPress. В августе 2015 года компании праздновали 10 лет совместного плодотворного сотрудничества.

Envato – австралийская компания, ориентированная на продажу различного рода контента. Themeforest — один из наиболее успешных интернет-ресурсов Envato, который производит темы и плагины для WordPress.

Последние данные показывают, что темы на Themeforest довольно прибыльны. 5% всех тем приносят прибыль в 10 тысяч долларов в месяц.

Среди средств массовой информации WordPress также пользуется популярностью. Такие лидеры мировых СМИ как Forbes, The New York Times, Reuters, The Wall Street Journal, Harvard Business Review используют WordPress в качестве движка для своих сайтов.

Многие технические блоги успешно работают на базе WordPress. Например, Mashable, Digg, boing boing, TechCrunch, IGN.

Известные актёры, певцы и спортсмены также пользуются услугами WordPress. Рэпер Джей Зи (Jay Z), английский юморист и стенд-ап комик Рассел Бренд, британский певец Том Джонс, баскетболист Коби Брайант, американский актёр Сильвестр Сталоне – они, и многие другие знаменитости, успешно использовали платформу для создания своих блогов.

Известные бренды и компании Samsung, Star Wars, Coca-Cola используют платформу в качестве блога или сопроводительного ресурса.

Учитывая популярность CMS WordPress среди пользователей интернета, логично предположить, что найдутся те, кто захочет воспользоваться чужими данными. В связи с этим, WordPress чаще остальных программ подвергался хакерским атакам, а именно – 78% атак было направленно на данную систему. На долю Joomla выпало 14% атак, а на Drupal всего 2%.

Например, один из самых известных случаев нарушения безопасности в WordPress произошел в 2011 году. Тогда, в результате хакерской атаки, были скомпрометированы 18 миллионов пользователей. Администрацией сайта было решено заменить все пароли пользователей.

Следующая история произошла в 2014 году. DDOS-атака продолжалась несколько часов. Более 162 тыс. сайтов WordPress атаковали систему с целью вывести её из строя. Благодаря оперативному вмешательству специалистов, атака была предотвращена, но злоумышленника так и не удалось обнаружить.

В том же году WordPress снова был вынужден сбросить пароли пользователей. На этот раз причиной стала утечка 5 млн. Google аккаунтов.

Относительно недавно мир поразило новое событие. 9 мая 2016 г. были опубликованы так называемые «панамские документы», содержащие информацию о связях некоторых влиятельных людей и мировых лидеров с офшорными фирмами. Основной причиной утечки информации считают слабую систему защиты сайта компании Mossack Fonseca. Главный сайт панамской юридической компании работал на базе версии WordPress и, по словам экспертов, имел множество уязвимых мест в защитной системе. В результате было потеряно 2,6 Тб и 11,5 млд. документов, что привело к значительным последствиям на мировой арене.

К примеру, лидеры многих европейских стран подверглись судебным разбирательствам, а премьер-министр Исландии и вовсе был вынужден покинуть свой пост.

Не смотря на популярность и загруженность платформы, заработная плата разработчиков WordPress не является самой высокой. В среднем за год, разработчик WordPress зарабатывает 79 тыс. долларов. Для сравнения, разработчики Drupal и Joomla получают 84 и 82 тысячи долларов в год соответственно.

Цифры и статистика говорят сами за себя – WordPress уверенно лидирует на рынке систем управления. Конечно же, искушенные пользователи могут найти недостатки в данной системе, но факт остаётся фактом – платформа является отличной базой для создания блогов и сайтов как для новичков, так и для профессионалов.

Опубликовано с разрешения Skilled

Источники

  1. The Best WordPress Theme of 2017
  2. Website Templates & Themes from ThemeForest
  3. About Us — Automattic
  4. WordPress Plugins
  5. Stats — WordPress.com
  6. Your source for the best premium themes from around the web
  7. Kriesi.at Theme Demos: abundance
  8. http://inside.envato.com/pressnomics
  9. https://en.wikipedia.org/wiki/WP_Englne
  10. https://en.wordpress.com/activity/traffic
  11. https://wordpress.org/download/counter
  12. http://themes.muffingroup.com/betheme/
  13. https://wordpress.org/themes/browse/new
  14. http://trends.builtwith.com/cms/WordPress
  15. https://wordpress.org/plugins/browse/popular
  16. https://managewp.com/statistics-about-wordpress-usage
  17. https://www.crunchbase.eom/organization/wp-engine#/entity
  18. https://www.crunchbase.eom/organization/automattic#/entity
  19. http://winningwp.com/examples-of-celebrities-using-wordpress
  20. https://commons.wikimedia.0rg/wiki/F1le:Kobe_Bryant_Sphte.jpg
  21. https://commons.wikimedia.Org/wiki/Rle:TomJones_2009_10_1 .jpg
  22. https://themeforesLnet/collections/3247049-best-selling-wp-themes
  23. https://w3techs.com/technologies/overview/content_management/all
  24. https://codecanyon.net/popular_item/by_category7category-wordpress
  25. http://www.indeed.com/salary?q1=drupal +developer& l 1=United+States
  26. http://www.indeed.com/salary/q-Joomla-Developer-l-United-States.html
  27. https://www.sitepoint.com/10-of-the-most-popular-free-wordpress-themes
  28. http://www.indeed.com/salary?q1=Wordpress+developer& l1=United+States
  29. https://commons.wikimedia.Org/wiki/Rle:Russell_Brand_Arthur_Premier_mike.jpg
  30. http://torquemag.io/2015/08/brands-celebrities-famous-websites-using-wordpress
  31. https://sucuri.net/website-security/Reports/Sucuri-Website-Hacked-Report-2016Q1.pdf
  32. http://www.securityweek.com/wordpresscom-hacked-attackers-gain-root-access-servers
  33. https://commons.wikimedia.Org/wiki/Rle:Stallone_66%C3%A8me_Festival_de_Venise_5.jpg
  34. https://www.wordfence.com/blog/2016/04/mossack-fonseca-breach-vulnerable-slider-revolution
  35. https://commons.wikimedia.org/wiki/Rle:Jay-Z_@_Shawn_%27Jay-Z%27_Carter_Foundation_Carnival_(crop_2).jpg
  36. http://www.eweek.com/blogs/security-watch/wordpress-resets-100000-passwords-after-google-account-leak.html
  37. https://blog.sucuri.net/2014/03/more-than-162000-wordpress-sites-used-for-distributed-denial-of-service-attack.html
1
]]>
https://www.kobzarev.com/browser/browser-notepad/ Как сделать блокнот из браузера Кобзарёв Михаил Mon, 20 Feb 2017 19:44:24 +0000

Как сделать блокнот из браузера

Автора! Проекты Шпаргалки Файлы Карта

Поэтому просто откройте новую вкладку в браузере, вставьте следующий код и нажмите клавишу Enter:

data:text/html;charset=UTF-8, <html><head><title>Блокнот</title></head><body spellcheck="false" contenteditable></body></html>

Творите!

Ссылки

1
]]>
https://www.kobzarev.com/wordpress/woocommerce-created-customer-admin-notification/ WooCommerce: Оповещение администратора магазина при регистрации нового покупателя Кобзарёв Михаил Tue, 14 Feb 2017 14:28:38 +0000

WooCommerce: Оповещение администратора магазина при регистрации нового покупателя

Автора! Проекты Шпаргалки Файлы Карта

Этот код можно разместить внутри вашего плагина или в functions.php темы вашего сайта.

<?php
/**
 * Оповещение администратора магазина
 * при регистрации нового покупателя
 *
 * @param int $customer_id - идентификатор нового покупателя.
 */
function woocommerce_created_customer_admin_notification( $customer_id ) {
	wp_send_new_user_notifications( $customer_id, 'admin' );
}
add_action( 'woocommerce_created_customer', 'woocommerce_created_customer_admin_notification' );
1
]]>
https://www.kobzarev.com/wordpress/debug-wordpress-cron/ Отладка WordPress крона Кобзарёв Михаил Thu, 09 Feb 2017 09:30:37 +0000

Отладка WordPress крона

Автора! Проекты Шпаргалки Файлы Карта

Установка WP-CLI

Скачайте файл wp-cli.phar, используя wget или curl:

$ curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

Убедитесь, что свежескачанный файл валидный и рабочий:

php wp-cli.phar --info

Для использования WP-CLI из командной строки (будете печатаь wp) сделайте файл исполняемым и добавьте его в ваш PATH:

chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp

Если WP-CLI установлен корректно, то при вводе команды wp --info вы должны получить примерно такой вывод:

PHP binary:    /usr/bin/php5
PHP version:    5.5.9-1ubuntu4.14
php.ini used:   /etc/php5/cli/php.ini
WP-CLI root dir:        /home/wp-cli/.wp-cli
WP-CLI packages dir:    /home/wp-cli/.wp-cli/packages/
WP-CLI global config:   /home/wp-cli/.wp-cli/config.yml
WP-CLI project config:
WP-CLI version: 1.1.0

Как отлаживать

Чтобы вывести на экран вообще все имеющиеся задачи, вбейте:

wp cron event list

Вы увидите примерно такую картинку:

+--------------------------------+---------------------+--------------------+-----------------------+
| hook                           | next_run_gmt        | next_run_relative  | recurrence            |
+--------------------------------+---------------------+--------------------+-----------------------+
| w3_pgcache_cleanup             | 2016-08-16 19:16:01 | now                | 6 minutes             |
| w3_pgcache_prime               | 2016-08-16 19:17:01 | now                | 5 minutes             |
| w3_objectcache_cleanup         | 2016-08-16 19:31:26 | 12 seconds         | 16 minutes 40 seconds |
| woocommerce_geoip_updater      | 2016-09-01 16:30:00 | 2 weeks 1 day      | 1 month               |
+--------------------------------+---------------------+--------------------+-----------------------+

Для удаления конкретной задачи используйте:

wp cron event delete woocommerce_geoip_updater

Для запуска ближайших заданий в режиме отладки:

wp cron event run --due-now --debug

Вы получите похожий вывод:

Debug (bootstrap): No readable global config found (0.006s)
Debug (bootstrap): No project config found (0.007s)
Debug (bootstrap): Loading packages from: /var/www/.wp-cli/packages/vendor/autoload.php (0.103s)
Debug (bootstrap): ABSPATH defined: /var/www/ (0.104s)
Debug (bootstrap): Begin WordPress load (0.104s)
Debug (bootstrap): wp-config.php path: /var/www/wp-config.php (0.104s)
Debug (bootstrap): Loaded WordPress (0.334s)
Debug (bootstrap): Running command: cron event run (0.334s)
Executed the cron event 'w3_pgcache_cleanup' in 0.022s.
Executed the cron event 'w3_pgcache_prime' in 2.002s.
Executed the cron event 'w3_objectcache_cleanup' in 1.673s.
Success: Executed a total of 3 cron events.

Еще больше примеров использования утилиты WP-CLI смотрите на официальном сайте проекта.

Ссылки

1
]]>
https://www.kobzarev.com/makeup/graaf/ Graaf — направляющие для CSS сеток Кобзарёв Михаил Thu, 02 Feb 2017 19:34:51 +0000

Graaf — направляющие для CSS сеток

Автора! Проекты Шпаргалки Файлы Карта

Поддерживаемые сетки

  Ширина Колонки Отступы  
BBC News 976px 12 16px bbc.css
Bootstrap 1170px 12 16px bootstrap.css
CNN Inter. 1100px 7 20px cnn.css
Dribbble 970px 4 30px dribbble.css
Github 980px 12 20px github.css
Graaf 793px 10 16px graaf.css
Medium 1000px 3 18px medium.css
NY Times 970px 5 16px nytimes.css
Twitter 1190px 4 10px twitter.css

Как использовать

Внутри своего проекта

Graaf не имеет никаких зависимостей. Поэтому для использования сеток в вашем проекте достаточно добавить в раздел <head> вашего сайта ссылку на соответствующую сетку из таблицы выше:

<link rel="stylesheet" href="//s3-eu-west-1.amazonaws.com/graaf/graaf.css">

На Codepen

Если вы хотите вставить одну из сеток в ваш сниппет на Codepen, просто добавьте ссылку на сетку в настройках проекта как показано на этой картинке:

Живой пример

0

Ссылки

1
]]>
https://www.kobzarev.com/makeup/ios-media-queries/ Пуленепробиваемые iOS медиа-выражения Кобзарёв Михаил Mon, 30 Jan 2017 18:00:03 +0000

Пуленепробиваемые iOS медиа-выражения

Автора! Проекты Шпаргалки Файлы Карта

iPhone 6 и iPhone 6+

/* iPhone 6 Портрет */
@media only screen and (min-device-width: 375px) and (max-device-width: 667px) and (orientation : portrait) {
}
/*iPhone 6 Альбом */
@media only screen and (min-device-width: 375px) and (max-device-width: 667px) and (orientation : landscape) {
}
/*iPhone 6+ Портрет */
@media only screen and (min-device-width: 414px) and (max-device-width: 736px) and (orientation : portrait) {
}
/*iPhone 6+ Альбом */
@media only screen and (min-device-width: 414px) and (max-device-width: 736px) and (orientation : landscape) {
}
/*iPhone 6 и iPhone 6+ Портрет и Альбом */
@media only screen and (max-device-width: 640px), only screen and (max-device-width: 667px), only screen and (max-width: 480px){ 
}
/*iPhone 6 и iPhone 6+ Портрет */
@media only screen and (max-device-width: 640px), only screen and (max-device-width: 667px), only screen and (max-width: 480px) and (orientation : portrait){
}
/*iPhone 6 и iPhone 6+ Альбом */
@media only screen and (max-device-width: 640px), only screen and (max-device-width: 667px), only screen and (max-width: 480px) and (orientation : landscape){
}

Retina iPad в портретной ориентации

@media only screen 
and (min-device-width : 768px) 
and (max-device-width : 1024px) 
and (orientation : portrait)
and (-webkit-min-device-pixel-ratio: 2) 
{  
// CSS Styles
}

Retina iPad в альбомной ориентации

@media only screen 
and (min-device-width : 768px) 
and (max-device-width : 1024px) 
and (orientation : landscape)
and (-webkit-min-device-pixel-ratio: 2) 
{ 
// CSS Styles
}

Retina iPad в портретной и альбомной ориентации

@media only screen 
and (min-device-width : 768px) 
and (max-device-width : 1024px)
and (-webkit-min-device-pixel-ratio: 2) 
{ 
// CSS Styles
}

iPad в портретной ориентации

@media only screen 
and (min-device-width : 768px) 
and (max-device-width : 1024px) 
and (orientation : portrait) 
{  
// CSS Styles
}

iPad в альбомной ориентации

@media only screen 
and (min-device-width : 768px) 
and (max-device-width : 1024px) 
and (orientation : landscape) 
{ 
// CSS Styles
}

iPad в портретной и альбомной ориентации

@media only screen 
and (min-device-width : 768px) 
and (max-device-width : 1024px)  
{ 
// CSS Styles
}

Ссылки

1
]]>
https://www.kobzarev.com/wordpress/wp-cli-cron/ Как запускать крон-задачи WordPress через WP-CLI Кобзарёв Михаил Fri, 27 Jan 2017 16:00:23 +0000

Как запускать крон-задачи WordPress через WP-CLI

Автора! Проекты Шпаргалки Файлы Карта

Стоит сказать спасибо утилите WP-CLI, с помощью которой мы можем упростить этот процесс, используя приведенный ниже bash-скрипт. Кстати, в режиме обычного сайта он также сохраняет свою работоспособность.

Если вы новичёк в WordPress и всякого рода кронах, то советую предварительно прочитать замечательную статью Тома Макфарлинса Properly Setting Up WordPress Cron Jobs для общего понимания происходяешл здесь.

Вот, собственно, сам скрипт, реализующий описаный трюк:

#!/bin/bash
# Copyright © 2015 Bjørn Johansen
# This work is free. You can redistribute it and/or modify it under the
# terms of the Do What The Fuck You Want To Public License, Version 2,
# as published by Sam Hocevar. See http://www.wtfpl.net/ for more details.

# Укажем путь до установленно WordPress
WP_PATH="/path/to/wp"

# Проверим, что WP-CLI доступен
if ! hash wp 2>/dev/null; then
	echo "WP-CLI is not available"
	exit
fi

# Проверим, что в казанной папке
# реально установлен WordPress
if ! $(wp core is-installed --path="$WP_PATH" --quiet); then
	echo "WordPress is not installed here: ${WP_PATH}"
	exit
fi

# Получим списко сайтов
if $(wp core is-installed --path="$WP_PATH" --quiet --network);
then
	SITE_URLS=`wp site list --fields=url --archived=0 --deleted=0 --format=csv --path="$WP_PATH" | sed 1d`
else
	SITE_URLS=(`wp option get siteurl --path="$WP_PATH"`)
fi

# Пройдемся в цикле по списку
for SITE_URL in $SITE_URLS
do
	# Запустим все подходящие задачи
	for EVENT_HOOK in $(wp cron event list --format=csv --fields=hook,next_run_relative --url="$SITE_URL" --path="$WP_PATH" | grep now$ | awk -F ',' '{print $1}')
	do
		wp cron event run "$EVENT_HOOK" --url="$SITE_URL" --path="$WP_PATH" --quiet
	done
done

Как использовать

Для начала убедитесь, что WP-CLI установлен и работоспособен. Это выходит за рамки данной статьи. Сам процесс детально описан на официальном сайте проекта WP-CLI.

Скачайте скрипт, сохраните его в дамашней директории под именем run-wp-cron.sh, отредактируйте переменную WP_PATH, содержащую путь к установленному WordPress и сделайте скрипт исполняемым:

chmod 0700 run-wp-cron.sh

Попробуйте запустить скрипт:

./run-wp-cron.sh

Настрока серверного крона

От текущего (не рутового!) пользователя отредактируйте crontab:

crontab -e

Добавьте эту линию в конец файла, заменив путь к скрипту на свой:

* * * * * /home/youruserdir/run-wp-cron.sh

Теперь наш скрипт будет выполняться каждую минуту.

При желании, вы можете задать свой интервал.

Отключение встроенного крона

Я не так давно описывал данный кейс, но если вкратце — то просто добавьте в ваш wp-config.php следующую строку:

define( 'DISABLE_WP_CRON', true );

На этом всё, приятного кодинга.

Ссылки

1
А какую проблему это решает ? Не нужно настраивать крон для каждого сайта ?
Не нужно дергать сайт по урлу, загружая весь WordPress. Вся работа через WP-CLI, не надо копипастить кучу идентичных кронов. Это навскидку.
]]>
https://www.kobzarev.com/makeup/godlike-css/ godlike.css Кобзарёв Михаил Mon, 09 Jan 2017 15:56:23 +0000

godlike.css

Автора! Проекты Шпаргалки Файлы Карта

Что умеет godlike.css

  • Сохраняет полезные дефолтные правила в отличии от многих других проектов;
  • Нормализует стили для широкого диапазона элементов;
  • Исправляет ошибки и несоответствия разных браузеров;
  • Повышает удобство и простоту использования с минимальными изменениями;
  • Детально описывает, какое правило для чего нужно в исходном коде — самодокументирование.

Установка godlike.css

NPM

$ npm i godlike.css

Bower

$ bower i godlike.css

CDN

https://cdnjs.com/libraries/godlike.css

Скачать

https://raw.githubusercontent.com/1000tech/godlike.css/master/godlike.css

Как использовать godlike.css

NPM

PostCSS и postcss-import:

@import 'godlike.css/godlike.min.css';

Bower

HTML

<link rel="stylesheet" href="bower_components/godlike.css/godlike.min.css"/>

CSS

@import '../bower_components/godlike.css/godlike.min.css';

Sass, Less, Stylus:

@import '../bower_components/godlike.css/godlike';

Демо

Живой пример смотрите на сайте MobiDevices. Найти godlike.css можно на гитхабе.

1
]]>
https://www.kobzarev.com/programming/payment-request-api/ Начинаем работать с Payment Request API Кобзарёв Михаил Wed, 28 Dec 2016 22:18:14 +0000

Начинаем работать с Payment Request API

Автора! Проекты Шпаргалки Файлы Карта

Не меньше боли возникало и у программистов, реализующих непростые интерфейсы с кучей проверок. Но теперь все стало намного проще.

В последнем релизе браузера Samsung Internet появилась долгожданная поддержка Payment Request API. Этот API позволяет очень просто организовать оплату на сайте, используя нативный UI устройства, с указанием деталей карты, вариантами доставки, адресами и контактными данными.

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

И не нужно будет тратить огромные суммы денег и кучу времени на программистов, разработку интерфейса и процесса валидации данных.

Как это работает

В основе API лежит метод new PaymentRequest. Перед началом работы необходимо проверить наличие данного API в браузере пользователя:

if ( window.PaymentRequest ) {
	// API есть - круто!
} else {
	// Показать фолбек, например,
	// в виде формы оплаты
}

А после клика юзером по кнопке оплаты покажем нативный UI и обработаем результат:

// Поддерживаемые способы оплаты
var methodData = [{
	supportedMethods: ['visa', 'mastercard', 'alipay']
}];

// Детали платежа
var details = {
	total: {
		label: 'Покупка слона', 
		amount: {
			currency: 'RUB', 
			value: '99.99'
		}
	},
	displayItems: [{
		label: 'Голова слона',
		amount: {currency: 'RUB', value: '39.99'}
	}, {
		label: 'Тело слона',
		amount: {currency: 'RUB', value: '60.00'}
	}]
};

// Настройки
var options = {
	requestShipping: false,
	requestPayerEmail: true,
	requestPayerPhone: true    
};

// Показать UI
new PaymentRequest( methodData, details, options )
	.show()
	.then(function(uiResult) {
		processPayment(uiResult);
	})
	.catch(function(error) {
		handlePaymentError(error);
	});

Моделируем процесс оплаты с двухсекундной задержкой:

Легко? Вы можете попробовать онлайн демку и посмотреть исходный код примера на Github.

Это только маленькая доля всех тех возможностей, что предоставляет API, более развернутый пример (стоимость доставки,контакты, адреса) можно посмотреть в репозитории команды Google Chrome, а также в замечательном руководстве от Ruadhán O’Donoghue.

Payment Request API доступен только в безопасном контексте.

Поддержка браузерами

На данный момент, Payment Request API поддерживается в следующих браузерах: Samsung Internet, Chrome 53+ для Android и частично в Edge — одним словом, использовать можно уже прямо сейчас, следуя принципу прогрессивного улучшения, добавляя фолбек в виде обычной формы для заполнения реквизитов, для браузеров без поддержки этого API.

По статистике большинство интернет покупок осуществляется при помощи мобильных устройств и, что самое удивительное, 66% из них совершается при помощи мобильных браузеров, а не приложений.

Ссылки

1
]]>
https://www.kobzarev.com/wordpress/sanitizing-queries-with-in-clauses-with-wpdb/ Санирование конструкции «IN» в $wpdb Кобзарёв Михаил Mon, 19 Dec 2016 11:33:27 +0000

Санирование конструкции «IN» в $wpdb

Автора! Проекты Шпаргалки Файлы Карта
// Получим записи.
// Вернет 'array(1, 3, 5, 8, 13, [...])'
$special_entries = get_option( 'entries' );

// Посчитаем количество записей
$how_many = count( $special_entries );

// Подготовим нужное количество плейсхолдеров.
// Если нужны строки, а не числа - используйте '%s'
$placeholders = array_fill( 0, $how_many, '%d' );

// Склеим плейсхолдеры в строку.
// Вернёт '%d, %d, %d, %d, %d, [...]'
$format = implode( ', ', $placeholders );

// Вставим плейсхолдеры в запрос
$query = "
	SELECT ID, post_title, post_name, post_parent 
	FROM $wpdb->posts 
	WHERE post_parent IN( $format )";

// Выполним безопасно запрос и получим данные
$results = $wpdb->get_results( $wpdb->prepare( 
	$query, $special_entries 
) );

Ссылки

1
]]>
https://www.kobzarev.com/wordpress/wordpress-to-jekyll/ Быстрый перенос блога с WordPress на Jekyll Кобзарёв Михаил Wed, 09 Nov 2016 22:12:34 +0000

Быстрый перенос блога с WordPress на Jekyll

Автора! Проекты Шпаргалки Файлы Карта

Зависимости

Чтобы использовать этот скрипт для импорта, необходимо установить дополнительные gems-пакеты:

gem install unidecode sequel mysql2 htmlentities

Для запуска импорта ваших постов из WordPress в Jekyll, выполните на сервере с установленным блогом:

$ ruby -rubygems -e 'require "jekyll-import";
    JekyllImport::Importers::WordPress.run({
      "dbname"   => "",
      "user"     => "",
      "password" => "",
      "host"     => "localhost",
      "socket"   => "",
      "table_prefix"   => "wp_",
      "site_prefix"    => "",
      "clean_entities" => true,
      "comments"       => true,
      "categories"     => true,
      "tags"           => true,
      "more_excerpt"   => true,
      "more_anchor"    => true,
      "extension"      => "html",
      "status"         => ["publish"]
    })'

Необязательно заполнять абсолютно все поля. По умолчанию они предустановлены как показано выше.

Этот пакет импортирует только данные ваших постов и страниц.

Он конвертит все посты и создаёт YAML, не беря в расчёт разметку, стили, скрипты, фото и другие внешние ресурсы.

Jekyll Exporter

Существует также WordPress плагин Бена Балтера Jekyll Exporter, который в один клик конвертирует все записи, страницы, таксономии, метаданные и параметры в Markdown и YAML. Полученные таким образом данные могут быть легко перенесены в Jekyll.

Что умеет Jekyll Exporter

  • Конвертирует все записи, страницы и параметры в WordPress под Jekyll;
  • Экспортирует то, что видят ваши пользователи (а не то, что хранит ваша база данных; контент записей пропускается через фильтр the_content перед экспортом, позволяя сторонним плагинам модифицировать вывод);
  • Конвертирует весь post_content в Markdown Extra (при помощи Markdownify);
  • Конвертирует все post_meta и поля таблицы wp_posts в формат YAML, подходящий для парсинга Jekyll
  • Генерирует _config.yml со всеми параметрами таблицы wp_options
  • Создает отдельный zip-архив с _config.yml, страницами, а также папкой _posts, содержащей .md-файлы для каждой записи в соответствующем формате имен Jekyll.

Генерация YAML запускается по кнопке из админки, либо из терминала через WP-CLI:

wp jekyll-export > export.zip

Ссылки

1
]]>
https://www.kobzarev.com/wordpress/disqus-google-amp/ Добавление Disqus в AMP-версию страницы Кобзарёв Михаил Fri, 04 Nov 2016 15:27:34 +0000

Добавление Disqus в AMP-версию страницы

Автора! Проекты Шпаргалки Файлы Карта

Перед началом

  • Если вы еще не в курсе, что такое Google AMP, посмотрите, как создать свою первую AMP-страницу.
  • Проверьте, что у вас есть зарегистрированный сайт в аккаунте Disqus. Покурите официальные маны для получения большей информации.
  • Найдитие короткое имя вашего сайта (shortname) в панели Disqus: Admin > Settings > General.
  • Убедитесь, что вы можете разместить код установки на двух разных доменах.

Как установить

Создайте файл disqus.php и разместите его на домене, отличном от текущего. Изголяться таким образом приходится по причине того, что в основу метода положено использование <amp-iframe>, ограничением которого является подгрузка данных только с другого домена.

<div id="disqus_thread"></div>

<script>
/**
 * Растягиваем фрейм по высоте содержимого
 */
window.addEventListener( 'message', receiveMessage, false );
function receiveMessage( event ) {
	if ( event.data ) {
		var msg;
		try {
			msg = JSON.parse( event.data );
		} catch ( err ) {
			// Do nothing
		}
	
		if ( ! msg ) {
			return false;
		}
	
		if ( msg.name === 'resize' ) {
			window.parent.postMessage({
			  sentinel: 'amp',
			  type: 'embed-size',
			  height: msg.data.height
			}, '*' );
		}
	}
}

/*
 * Впулим наш конфиг
 */
var disqus_config = function () {
	// URL страницы
	this.page.url = '<?php echo strip_tags( $_GET['disqus_url'] ); ?>';
	
	// Идентификатор страницы
	this.page.identifier = '<?php echo strip_tags( $_GET['disqus_identifier'] ); ?>';
};

/*
 * Подключить javascript-файл
 */
(function () {
	var d = document, s = d.createElement('script');
	s.src = '<?php printf( '//%s.disqus.com/embed.js', strip_tags( $_GET['disqus_shortname'] ) ); ?>';
	s.setAttribute('data-timestamp', +new Date());
	(d.head || d.body).appendChild(s);
})();
</script>

Разместите в разделе <head> вашего amp-шаблона ссылку на скрипт:

<script async custom-element="amp-iframe" src="https://cdn.ampproject.org/v0/amp-iframe-0.1.js"></script>

Поместите элемент <amp-iframe> в нужном месте шаблона внутри раздела <body>, там где хотите видеть комментарии:

<amp-iframe width=600 height=140
            layout="responsive"
            sandbox="allow-scripts allow-same-origin allow-modals allow-popups allow-popups-to-escape-sandbox"
            resizable
            src="{абсолютный_путь_к_disqus.php}">
	<div overflow tabindex=0 role=button aria-label="Read more">Read more!</div>
</amp-iframe>

Абсолютный путь к disqus.php строится по следующему алгоритму:

// Короткое имя домена из админки disqus
$shortname = 'mihdan';

// Ссылка на текущую страницу
$permalink = get_permalink( $post->ID );

// Полный путь к disqus.php
$path = 'https://домен/disqus.php?disqus_url=' . urlencode( $permalink ) . '&disqus_shortname=' . urlencode( $permalink ) . '&disqus_identifier=' . urlencode( $post->ID );

Наличие https на домене с disqus.php обязательно.

И, последним шагом, добавьте домен, на котором лежит disqus.php в доверенные в панели управления disqus. Найти можно тут: Admin > Settings > Advanced.

Ссылки

1
Спасибо, интересно. А как сделать чтобы отображались коменты Фейсбука? Мне кажется это более интересно ).
Комментарии ФБ из коробки работают
Попробую что-нибудь накопать
Почему нельзя просто дать кусок кода???? Нихрена в итоге не понятно как написать полный путь
Так в посте и есть куски кода, как вам нравится 🙂 Все построчно объяснено — в чем ваша проблема?
]]> https://www.kobzarev.com/linux/nautilus-list-view/ Ubuntu: задать дефолтный вид Nautilus в виде списка Кобзарёв Михаил Fri, 21 Oct 2016 15:25:59 +0000

Ubuntu: задать дефолтный вид Nautilus в виде списка

Автора! Проекты Шпаргалки Файлы Карта

Для этого необходимо через gsettings изменить параметр default-folder-viewer:

gsettings set org.gnome.nautilus.preferences default-folder-viewer 'list-view'

Для проверки того, что предыдущая команда отработала верно, попробуйте получить текущее значение параметра default-folder-viewer:

gsettings get org.gnome.nautilus.preferences default-folder-viewer

Если вы панически боитесь консоли, тоже самое можно проделать через GUI-интерфейс при помощи dconf, для чего пройдитесь в нём по пути org.gnome.nautilus.preferences и отредактируйте параметр default-folder-viewer в соответствии со скриншотом:

default-folder-viewer

1
]]>
https://www.kobzarev.com/linux/yakkety-yak/ Как обновить Ubuntu 16.04 Xenial Xerus LTS до Ubuntu 16.10 Yakkety Yak? Кобзарёв Михаил Thu, 20 Oct 2016 14:21:53 +0000

Как обновить Ubuntu 16.04 Xenial Xerus LTS до Ubuntu 16.10 Yakkety Yak?

Автора! Проекты Шпаргалки Файлы Карта

Как обновиться

# Обновить список пакетов
sudo apt update

# Скачать обновления
sudo apt -d dist-upgrade

# Установить обновления
sudo apt dist-upgrade

Если возникнут проблемы

Попробуйте отключить сторонние репозитории в /etc/apt/sources.list.d/, заменить все вхождения слова xenial на yakkety в /etc/apt/sources.list и повторить процесс.

Новые дистрибутивы также можно скачать с официального торрент-трекера Ubuntu или, по-старинке, через браузер со страницы загрузок.

Отличие Unity 7 от Unity 8

На данный момент Unity 8 можно попробовать только на видеокартах Nvidia (с драйвером nouveau), Intel (с открытым драйвером) или на виртуальной машине VMWare Fusion (Virtualbox не прокатит). Это связано с тем, что Unity 8 очень жестко завязана на графический сервер Mir.

Поддержка Ubuntu 16.10 будет осуществляться 9 месяцев.

1
]]>
https://www.kobzarev.com/programming/links-to-whatsapp-and-telegram/ Ставим правильные ссылки на WhatsApp и Telegram Кобзарёв Михаил Tue, 18 Oct 2016 17:25:22 +0000

Ставим правильные ссылки на WhatsApp и Telegram

Автора! Проекты Шпаргалки Файлы Карта

Поставить ссылку на WhatsApp или Telegram клиенты на первый взгдяд весьма простая задача. Но не все так просто, как может показаться на первый взгляд. Есть несколько нюансов. Погуглив, решил собрать все воедино, дабы использовать в качестве памятки.

(далее…)1

как передать сообщение абоненту, чтобы открылся телеграм с каким -то сообщением?

Смотрите пример в разделе «Сообщение абоненту из справочника»

Подскажите, существует ли такая ссылка в телеграмме, где может передаваться текст для определенного контакта?

Т.е. должен открываться контакт и автоматом заполнить готовым сообщение «Здравствуйте! Хочу заказать «Имя товара»


Если получателя нет в вашем справочнике — не сможете никак, это же логично, чтобы не спамили.

да это логично. Но не логично, когда можно открыть чат с контактом, а сообщение передать нельзя

В вашем случае это открывает путь спам мерам, так что это специально не реализовали в протоколе.

Так сообщение автоматически не отправляется, а только чат открывается с заготовкой текста. Посмотрите как сделал WhatsApp и спама там нет.

Есть phantomjs, casperjs и прочие, которые нажмут кнопку на вебморде мессенджера при не наличии, а у телеги и вотсапа она есть. И в вотсапе жёсткий спам как и в вайбере, а в телеге хотя-бы боты для чатов есть, которые следят.

ясно. Спасибо за ответ

Подскажите, пожалуйста в каком формате имя в ссылке tg://resolve?domain=имя @имя — не работает: «Нет аккаунта Telegram с таким именем пользователя»
А какой имя вы туда пишите и смотрите на телефоне хоть?

да, не работает тоже. ни на телефоне ни на компе