Чтоб не потерять.
Автора оригинала не ведаю, но помню, что в оригинале был какой-то глюк, исправили. Вроде работает, и даже правильно. :)
Вставлять в начало файла functions.php
шаблона темы.
На Pastebin
На Mega.nz
Это репост заметки из моего блога на сайте http://tolik-punkoff.com
Оригинал заметки находится здесь: http://tolik-punkoff.com/2017/01/21/kod-d
Page Summary
October 2025
|
Код, добавляющий тег rel canonical
HTTP-редирект в Wordpress.
Чуть не забыл, ко вчерашнему разговору с товарищем, который про это спрашивал. Ну я тебя, товарищ, немного надул, ибо не погуглил. Не надо никаких костылей с Страница со списком тегов (или рубрик) Wordpress
Если перейти в блоге Wordpress по ссылке на любой тег, то попадем на страничку, содержащую анонсы постов по данному тегу, адрес странички будет примерно такой: Идея такого формата адреса достаточно очевидна, убираешь из строки адреса выбранный тег и попадаешь в список всех тегов, как например это сделано в ЖЖ или LJR Вообще-то в профессиональной теме Wordpress это дело должно бы работать из коробки, потому что вообще-то плохо, если раздел сайта, который логически существовать должен, не существует. И так думаю не я один, а как выяснилось из логов, и роботы. Правда это оказался робот какого-то мелкого поисковика, не Google или Яндекса, но все равно неприятно. Так вот, если тема не сильно профессиональная, или разработчик забыл о такой мелочи, то посетитель сайта попадет по такой ссылке на страницу 404. Исправляем досадную неприятность. ( Читать далее... ) Скачать заметку в формате PDF Это репост заметки из моего блога на сайте http://tolik-punkoff.com Оригинал заметки находится здесь: http://tolik-punkoff.com/2017/01/20/tagl Cut в стиле livejournal в блоге Wordpress
В Wordpress откровенно не хватает ката в стиле ЖЖ, собственно кат-то там есть, но он монументален, как египетская пирамида и неумолим, как топор палача. Кат как в ЖЖ, напротив, может позволить скрыть несколько частей записи (длинные участки кода, крупные картинки) оставив остальное видимыми читателю с основной страницы блога. Удивительно, что никто эту ситуацию до сей поры не исправил, ни разработчики, ни авторы многочисленных плагинов. Конечно, попадались всякие статьи и исходники на тему "как сделать спойлер", но это были не устраивающие меня решения на javascript или ухищрения с CSS. И одно и другое плохо, во-первых, зависимостью от конкретного браузера, а во-вторых, тем, что зря занимает канал клиента, т.к. крупная картинка под спойлером или куча текста все равно будет загружена в клиентский браузер. Итак, необходим следующий функционал: 1. Кат в стиле живого журнала, поддерживающий изменение текста ссылки на содержимое под катом, с возможностью использоваться несколько раз в одном посту для скрытия определенных его фрагментов. 2. Сделано это должно быть без javascript и CSS. На главной странице блога область текста, находящаяся между тегами <lj-cut> и </lj-cut> заменяется на ссылку вида blog.livejournal.com/1234567.html#cutid1 со стандартным текстом Read more... или текстом, заданным пользователем. Где 1234567.html - страница, содержащая полный текст постаcutid1 - якорь [4], указывающий на начало скрываемого текста на странице поста.Правда, в такой реализации тоже есть один минус - имена якорей генерируются автоматически, в зависимости от количества участков, скрытых под катом в посту ( cutid1, cutid2... cutidN ). Ну ладно, писать, так писать, подумал я и решил добавить возможность задавать осмысленные имена якорей, например, #code, #function, #ioann_grozny_killing_son_2666_x_6666 и т.д.Тут на помощь придут шорткоды [1]. Можно написать плагин, реализующий такой функционал и добавляющий шорткод [lj-cut] [/lj-cut] В директории wp-content создаем поддиректорию lj-cut , а в ней файл lj-cut.php со следующим содержимым:
Информация в комментариях после Plugin Name: и Description: будет отображена в админ-панели в разделе плагинов. Plugin Name: и информация далее должна быть указана обязательно.Функция ljcut_shortcode($atts, $content=null) обрабатывает шорткод, ей передаются движком массив с параметрами $atts и содержимое между открывающим и закрывающим тегом $content Функция add_shortcode добавляет шорткод с указанным именем (1 параметр) и устанавливает функцию его обрабатывающую (2 параметр).Функция обработки шорткода будет вызвана каждый раз, как будет встречена в посту. Ей будут переданы параметры из массива $atts , указанные в тексте как [shortcodename param1="value1", param2="value2"] .1. Заведем 2 статических переменных: static $cutid=0; //номер текущего cutid в посту Первая будет хранить номер текущего cutid в посту, а вторая сохранять предыдущую постоянную ссылку на пост. Переменные обязательно должны быть объявлены при помощи ключевого слова static , иначе их значения будут сброшены при каждом вызове функции.2. Вытащим из массива $atts параметры и запишем их в соответствующие переменные. Если параметр не будет определен, то ему будет присвоено значение, указанное в кавычках после =>
4. Получим URL поста, откуда была вызвана функция обработки шорткода, используя внутреннюю функцию Wordpress get_permalink() [2]:5. $plink=get_permalink(); //получаем URL текущего поста 6. Получим URL текущей страницы: $clink=get_bloginfo('url').$_SERVER["REQ Функция get_bloginfo('url') получит адрес блога [3], а в элементе REQUEST_URI массива $_SERVER будет находиться значение вида /blog/post.html если пользователь читает пост на странице поста и значения вида /page/2/ (/author/tolik-punkoff/ , /tag/it/ ), если пост читают с какой-то из страниц сайта. В первом случае необходимо показывать весь текст, во втором - заменять скрытую под катом часть на соответствующую ссылку.7. Далее необходимо проверить, какой раз функция обработки шорткода ката вызывается из поста. Делается это путем сравнения заранее сохраненной постоянной ссылки на пост и только что полученной. Если ранее сохраненная ссылка не такая же, как и полученная во время вызова функции, значит, мы начали обрабатывать новый пост. В таком случае отсчет текущих фрагментов, скрытых под катом, необходимо начать заново, а постоянную ссылку на новый пост сохранить в соответствующей переменной. Иначе функция была очередной раз вызвана из текущего поста, соответственно, нужно просто увеличить счетчик фрагментов под катом:
8. Далее необходимо сравнить постоянную ссылку на пост (premalink) со ссылкой на той странице, на которой находится пользователь и если пользователь на странице поста - установить якорь [4] и вывести контент, скрытый под катом. Если пользователь на одной из страниц блога со списком постов, то выводится ссылка на пост, дополняемая указателем на якорь ( tolik-punkoff.com/tag/it/post#ancor ). Если имя якоря задано пользователем в соответствующем параметре шорткода, то оно и используется, иначе, якорь принимает вид cutidN , где N - заранее посчитанный в переменной $cutid номер.
Сохраняем сгенерированный HTML-код в переменной $ret 9. Возвращаем сгенерированный код и завершаем функцию обработки шорткода: return $ret; С Pastebin С Mega.nz Страничка плагина на сайте HexProject Страничка плагина на GitHub Скачать с tolik-punkoff.com 1. Шорткоды в Wordpress 2. get_permalink() 3. get_bloginfo() 4. Якорь (HTML) Это репост заметки из моего блога на сайте http://tolik-punkoff.com Оригинал заметки находится здесь: http://tolik-punkoff.com/2016/11/08/cut-v-s Небольшая заметка про безопасность Wordpress-блога
На полноценную инструкцию особо не претендующая, скорее так, некие примочки и припарки от кулхацкеров и всяких говноботов, да ссылки на найденные в сети материалы. 1.Защищаемся от спама. В комплекте с Wordpress идет плагин Akismet, настраивается он довольно просто и от спама защищает хорошо. Вот краткая инструкция, например. 2.Ставим капчу на вход в админ-панель, а заодно и на добавление комментариев, форму восстановления пароля с помощью плагина Securimage-WP. Настраивается он тоже несложно, хотя я особо ничего и не настраивал. Поставил, активировал, зашел в Настройки - Securimage-WP и поставил четыре галочки. Ах да, еще матан-капчу включил. 3.Можно установить плагин WP Security Audit Log и отслеживать различные действия, которые производят как пользователи сайта, так и пытаются произвести вредители. Говорят, что плагин тяжелый, но я особо этого не заметил. А вот боты в форму логина wp-login.php реально ломились нехилыми пачками и это с учетом того, что у меня не сильно известный и популярный блог. Заодно плагин отслеживает и 404 ошибки, что позволяет вовремя заметить косяки в теме оформления, тегах, структуре сайта и т.д.4.С помощью плагина Jeba Limit Login Attempts можно ограничить количество попыток ввода логина/пароля до трех штук, после чего вход в админку будет заблокирован на 30 минут. Правда, если количество вредителей, ломящихся в админку, превышает разумные пределы, может статься, что туда будет не попасть самому. Хотя есть способ и рыбку съесть, и ног не намочить. О нем далее. В принципе, если сайт/блог админится одним человеком или даже небольшой командой и не предусматривает регистрацию пользователей, то вполне можно сделать. В противном случае это особого смысла не имеет, ибо форму логина вредители все равно найдут через виджет Мета, или вам придется каждому новому пользователю объяснять, как входить на сайт. Шаг 1. Оригинальный wp-login.php переименуем в любое другое название, хоть в «s4gr3gerh6hb.php». Шаг 2. Затем заменим все слова wp-login.php на новое имя, в нашем случае на s4gr3gerh6hb.php, в файле s4gr3gerh6hb.php (старый wp-login.php) и в файле wp-includes/general-template.php [Копия в PDF] Можно еще в .htaccess доступ закрыть, либо устроить редирект куда-нибудь, например на http://www.cia.gov или на http://natribu.orgСпособ с изменением .htaccess считается самым надежным и самым ненагружающим сервер, но если не хочется/нет возможности/лень менять что-то на сервере, то можно сделать редирект и вручную средствами php [Копия в PDF]Например так:
Или вообще поизвращаться, написать свой скрипт, который будет демонстрировать визитеру рептилоидов, играющих на баяне OST X-files и вести учет IP и количества обращений к скрипту. Но это все-таки дополнительная нагрузка на сервер. Это репост заметки из моего блога на сайте http://tolik-punkoff.com Оригинал заметки находится здесь: http://tolik-punkoff.com/2016/11/05/nebo Отображение шорткодов в блоге WordPress, а точнее их синтаксиса.
ДОЧИТАЙТЕ ДО КОНЦА, КАК НЕЗНАНИЕ ИЛИ ПРЕНЕБРЕЖЕНИЕ К МАНУАЛАМ, ЗАСТАВЛЯЕТ ИЗОБРЕТАТЬ ВЕЛОСИПЕДЫ Звучит так же просто, как и делается. Вставляем следующий php-код куда удобно, хоть в functions.php , хоть в отдельный плагин.Я сделал отдельный плагин, но можно и в файл функций, код небольшой:
ВНИМАНИЕ! Переменную $atts нужно добавить обязательно, хотя она фактически не используется, т.к. у данного шорткода параметров нет, но так уж устроен движок Wordpress, что без наличия первого параметра не обработается и параметр $content Вставляете шорткод, синтаксис которого нужно отобразить, между открывающим и закрывающим псевдотегом shortcode. Единственный минус - не работает для самих тегов для отображения синтаксиса шорткодов, посему ниже картинка с примером: Результат работы: Все делается гораздо проще, код шорткода заключается в дублирующиеся квадратные скобки, например [[ljr user="hex_laden"]], т.е. сам шорткод надо заключить не в одни скобки "[" и "]", а в дублирующие "[[" и "]]" Благодарю злого анонимуса, который хотел постебаться, и случайно помог, хехе. Это репост заметки из моего блога на сайте http://tolik-punkoff.com Оригинал заметки находится здесь: http://tolik-punkoff.com/2016/07/30/otob Плагин, отображающий пользователей ЖЖ/LJR в блоге Wordpress в стиле ЖЖ/ЛЖР
Т.е. в виде ссылки с "головастиком", как в тестовом посте При добавлении псевдотега <ljr user="username"> или <lj user="username"> , данный псевдотег заменяется на ссылку с дополнительной картинкой-головастиком перед ней, клик по картинке ведет к открытию страницы userinfo пользователя ЖЖ и LJR, а клик по имени пользователя - к открытию главной страницы пользователя блогосервиса. Если вставить в пост на LJR псевдотег <lj user="username"> , то к имени пользователя будет добавлена дополнительная строка - username@lj, указывающая, что дневник пользователя находится в Живом Журнале.[ljr user="username"] или [lj user="username"] - вставляет на их место в посте "головастика", пользователя того или иного сервиса, дописывая в конце имени префикс @lj или @ljr, и проставляет все нужные ссылки. - Если указан параметр blank=1 , например [ljr user="hex_laden" blank=1] , то ссылки на userinfo (при клике по "головастику") или ссылка на главную страницу блога, откроются в новом окне/вкладке.1. В wp-content/plugins , создаем отдельный каталог lj-ljr-users , в нем подкаталог img , и загружаем туда графические файлы "головастиков" http://lj.rossia.org/img/userinfo.gif и http://lj.rossia.org/img/userinfo-lj.gif 2. Создаем файл lj-ljr-users.php в каталоге wp-content/plugins/lj-ljr-users и вставляем в него нижеследующий код.( Код плагина ) - Css встроено сразу в плагин и заточено под тему оформления, которую юзаю я, по-хорошему, надо стилевые настройки из плагина вымести, и чтоб они прописывались в styles.css - не определяется, пользователь это или сообщество. Но с другой стороны, это чрезмерно бы усложнило код и стабильность, вызвав необходимость обращаться к серверам блогосервисов (и обрабатывать случаи, если сервера "лежат"). - ну может еще какие мелкие недочеты, кому надо - берите и сами исправляйте. PHP-код на pastebin Готовый плагин с mega.nz Это репост заметки из моего блога на сайте http://tolik-punkoff.com Оригинал заметки находится здесь: http://tolik-punkoff.com/2016/07/28/plag Отображение опросов из LJR (ЛЖР, «Тифаретник», LJ.ROSSIA.ORG) и, возможно, ЖЖ (livejournal) в WP
Заметка посвящается тем, кто хочет перенести свой блог из ЖЖ, ЛЖР или другого блогосервиса, работающего на движке ЖЖ (LJ) в блог на Wordpress В ЖЖ и сайтах, работающих на движке ЖЖ существует определенный тип поста - опрос. И переносящие свой блог пользователи сталкиваются с невозможностью стандартными средствами перенести опрос из ЖЖ или (в моем примере LJR) в свой блог на Wordpress. А мы и не будем переносить результаты опроса из (в нашем случае) LJR, а будем отображать сам опрос, беря его с сайта. + Результаты опроса будут отображаться онлайн в нашем блоге, так же, как они будут и в блоге LJR + Пользователи сайта могут проголосовать в опросе, только зарегистрировавшись на старом сайте. Что плюс, если вы просто хотите сохранить результаты опроса на новом сайте/не хотите суммировать результаты из двух опросов. - При отображении поста необходима связь с сайтом, если ее не будет или опрос будет удален, то это приведет к возникновению ошибки - В конкретном примере я использовал довольно старую версию движка ЖЖ, которая применяется на сайте LJ.ROSSIA.ORG, посему вам потребуется подкорректировать код, если вы переносите блог с ЖЖ или другого сайта, работающего на том же движке. 1. Получить ID опроса (пользователь должен задать его вручную) 2. Выделить из страницы опроса его результаты и ссылки на участие в опросе. 3. Встроить эту информацию в пост Wordpress и отобразить ее. Создан здесь: http://lj.rossia.org/users/hex_laden/348 ID: 1307 Страница опроса: http://lj.rossia.org/poll/?id=1307&mode=results Внешний html-парсер, я использовал этот готовый simple_html_dom.php Сначала создаем файл с функцией, непосредственно занимающейся парсингом страницы опроса: ( Read more... ) И создаем главный файл плагина с функцией обработки шорткода, который, будучи вставлен в пост отобразит наш опрос: ( Read more... ) Для того, чтобы вставить в свой блог на Wordpress опрос с LJ.ROSSIA.ORG, останется добавить в пост следующий шорткод: [ljrpoll id="<poll_id>"] Где <poll_id> идентификатор опроса, например 1307Тестовый пост с отображенным опросом здесь: http://tolik-punkoff.com/2016/07/26/opro Код плагина доступен на PasteBin: getpoll.php Основной файл плагина Или можно скачать архив с плагином с mega.nz Папку из архива надо поместить в директорию wp-content/plugins вашего сайта, после чего зайти в консоль на страницу плагинов (или обновить ее) и активировать плагин LJR-pollDisplay Это репост заметки из моего блога на сайте http://tolik-punkoff.com Оригинал заметки находится здесь: http://tolik-punkoff.com/2016/07/26/otob Определение IP и местоположения пользователя посетителя сайта 5.
Пришедшие вчера за помощью студенты натолкнули на мысль окончательно завершить данную тему. Каскад прокси Анонимный прокси, заполняющий несколько заголовков HTTP_ Скачать. Посмотреть код на PasteBin Посмотреть в работе Впрочем, совсем не составляет труда сделать ему вид, более радующий глаз человека: 1. В строке header('Content-type: text/plain; charset=utf8'); изменим text/plain на text/html 2. Модифицируем сообщения скрипта. 3. Добавим код, выводящий оформление HTML (2 и 3 см. в самом скрипте ниже) Каскад прокси Анонимный прокси, заполняющий несколько заголовков HTTP_ Скачать. Посмотреть код на PasteBin Посмотреть в работе Предыдущая серия Движок для сайта-визитки
Основан на какой-то галерее, сделали друзья-карелы сто лет назад. На этом движке работает ChaosSoft. Определение IP и местоположения посетителя сайта 4.
Продолжаем модифицировать скрипт, точнее ответить на вопрос: Определение IP и местоположения посетителя сайта 3.
Вот анон задает справедливый вопрос, до которого из парней догадался лишь умник-Ильюша, четырнадцатилетний переросток из Харькова. Из девок - никто. Некрасиво и неправильно. Так как же этого избежать, известить клиента о такой ситуации? Известно, что в IANA определены группы адресов для LOOPBACK'а и локальных сетей: см. хотя-бы Википедию, а также известно, что нельзя использовать диапазон IP 0.0.0.0 - 0.255.255.255 , заодно это закрыло дырку в регулярном выражении (пропускались конструкции вида 1.1.1.1.1). Надо было бы подправить регулярку, но мне влом, кто хочет - помогите и подправьте. Дам я вам за это ничерта, спасибо скажу только лишь.Регулярка для валидации IP:
Итак. Добавляем функцию, проверяющую, попал ли IP в диапазон:
И функцию, которая последовательно проверяет не попал ли наш IP в один из диапазонов:
Если IP попал в один из диапазонов - функция возвращает строку с идентификатором события WRN (Внимание, некритичная ошибка или ситуация) и описанием, если IP не попадает ни в один диапазон, то функция возвращает 1. Перед тем, как создавать объект, вставляем очередную проверку:
Если попал - выводим сообщение и прерываем скрипт командой die(); Далее делаем, как в сериях 2 и 1, т.е. создаем объект SxGeo, обращаемся к нему и выводим данные в удобном виде. Скачать можно здесь, посмотреть как работает тут. В качестве аргумента GET вставлен адрес из LOOPBACK-диапазона. IP из частного диапазона. Предыдущая серия Продолжение Определение IP и местоположения посетителя сайта 2.
Мне сегодня в почту поступило довольно закономерных вопросов от моих читателей. тот самый анончик, точнее его прокси реакция на попытку передать ерунду или передать ничего Начало Продолжение Определение IP и местоположения посетителя сайта.
В сети по этому поводу довольно много материала, но я расскажу как это сделал я. У меня сегодня, например, голландский IP Продолжение Перенос текста в кнопке HTML
Понадобилось. Погуглил - в видимых пределах народ говорит, что это невозможно, либо предлагает всяческое шаманство с CSS и JavaScript, чего ради такой задачи не очень хотелось. Ларчик открылся довольно просто, во всяком случае в Firefox оно сработало. Оказалось, что достаточно в нужное место добавить перенос строки Программно вернуться на предыдущую страницу или перейти к определенной странице
с помощью php + javascript disabled элементы формы HTML и пост-запрос
Оказывается, если элемент в форме disabled, то в $_POST он не попадает. |