Поиск по нескольким тегам сразу

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

Про первое рассказывать не так интересно: там всё построено на вордпрессовой функции the_date (), которая, в отличие от get_the_date (), умеет отличать первый пост за день от всех остальных. Интереснее про второе.

Я увидел поиск по двум тегам сразу в блоге Ильи Бирмана, и мне захотелось тупо повторить эту функцию у себя, просто из принципа — всё равно пользоваться ей будут полтора человека, если вообще будут. После визита в гугл оказалось, что в WordPress есть особенность, позволяющая по запросу а-ля https://site.com/tags/tag1+tag2 получать посты, где есть оба тега — и tag1, и tag2 (здесь я имею в виду, понятно, ярлыки этих тегов, а не названия). А заменив + на ,, можно бросаться похожими запросами, только не И, а ИЛИ.

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

Однако есть ещё функция get_query_var (), которая смотрит на ваш запрос и извлекает из него разное интересное. В том числе она умеет извлекать и список тегов. Но, зараза, извлекает его как есть, строчкой! То есть если вы перешли по ссылке https://site.com/tags/tag1+tag2 — get_query_var ('tag') так и напишет в выводе: tag1+tag2! Хотя могла бы, ну, не знаю, сразу массив вывести, что ли.

Пришлось изобретать велосипед и вставлять его туда, где определяется заголовок <h1>:

/* Проверяем, есть ли в части запроса с тегами запятая: */
if ( strpos(get_query_var('tag'), ',') ) {
  /* Если есть, превращаем часть запроса с тегами в массив: */
  $tags_query_array_or = explode(',', get_query_var('tag'));
  foreach ($tags_query_array_or as $i => $tag) {
    if ($i !== 0) echo ' или ';
    $term = get_term_by('slug', $tag, 'post_tag');
    echo '<a href="/tags/' . $term->slug . '">' . $term->name . '</a>';
  }
} else if ( strpos(get_query_var('tag'), '+') ) {
  /* Если запятой не оказалось, ищем плюс: */
  $tags_query_array_and = explode('+', get_query_var('tag'));
  foreach ($tags_query_array_and as $i => $tag) {
    if ($i !== 0) echo ' и ';
    $term = get_term_by('slug', $tag, 'post_tag');
    echo '<a href="/tags/' . $term->slug . '">' . $term->name . '</a>';
  }
} else { // Если и плюса нет, значит, тег один, и надо просто написать его название:
  echo '<span>' . single_tag_title( '', false ) . '</span>';
}

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

Проверить, как всё это работает, можно, например, поискав посты, у которых одновременно стоит тег «как жить» и тег «Телеграм». По ссылке блог выдаст вам один пост, хотя постов с этими тегами отдельно — восемнадцать штук.

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

Это нововведение — из серии «ума не приложу, кому это может быть надо, но делать было интересно». Возможно, это же относится и к сайту в целом.

Впрочем, один use case у него всё же есть: как и на теги поодиночке, на комбинации тегов можно подписываться по RSS, добавив к адресу /feed. Например, вот ссылка на фид постов с одним из упомянутых выше тегов.

Открытие этого сайта

С этого момента сайт ivanvetoshkin.me официально открыт. Старый сайт — iaveto.ru — несколько месяцев будет перенаправлять сюда, а потом тихо уйдёт в небытие, не попрощавшись, оставшись только в архиве интернета.

Домен я поменял потому, что в апреле 2016, когда регистрировал iaveto.ru, совершенно не думал о том, почему сайт должен называться именно так. У меня было (и есть), среди прочих, два почтовых адреса: один начинался на iavetoshkin, другой — на iaveto. Мне хватило ума выбрать вариант покороче, но выйти за рамки имеющихся в арсенале слов и понять, что буква А в обоих вариантах ничего не значит, и надо придумать что-то более очевидное — не хватило. Теперь всё очевидно: как слышится, так и пишется. Название сайта теперь самодостаточно.

Доменную зону .me я выбрал потому, что мне нравится считать себя человеком мира, а не жителем конкретной страны. Несмотря на то, что формально .me — это доменная зона Черногории, засунуть на неё личный сайт можно по двум разным причинам, а .ru — только по одной. Разнообразие. (А ещё, согласно результатам тестов хостера BunnyCDN, сайты с доменами в зоне .me грузятся в среднем на 100 мс быстрее, чем сайты с доменами в зоне .ru, причём содержимое этих сайтов не имеет к этому никакого отношения. Но об этом я узнал уже после регистрации домена.)

Ещё поменялся дизайн. Несколько идей я взял у дизайнера Ильи Бирмана, потому что они мне понравились. Ещё несколько идей я взял у британского разработчика Джереми Кита, потому что они мне понравились. Остальное я взял со своего старого сайта, потому что в 2016 году мне, опять же, хватило ума внедрить что-то, что через четыре года всё ещё мне нравится.

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

Что там поменялось такого важного

RSS

Прямая ссылка на фид блога:

Подписаться по RSS

Эта ссылка подпишет буквально на всё, что я сюда помещаю: не только на обычные посты, но и на ссылки, фоточки, заметки на полях, объявления, новые работы в портфолио и отчёты о путешествиях. Но вдруг вы не хотите получать всё это в одной ленте? Тогда подпишитесь только на те RSS-фиды, которые вам интересны, и скомбинируйте из них свой собственный фид моего блога:

Нетрудно заметить, что адрес этих фидов образуется простым добавлением /feed к адресам блога, где расположены их источники. В случае обычных постов адрес другой; это связано с особенностями WordPress.

Но и это ещё не всё. Можно подписаться на RSS конкретной категории или тега. Для этого надо точно так же дописать /feed к адресу. Например, фид категории ★ Избранное, чей адрес — http://ivanvetoshkin.me/category/aaa (почему /aaa — не спрашивайте) — http://ivanvetoshkin.me/category/aaa/feed. Ума не приложу, кому это может быть нужно, но вдруг.

Пишите в комментариях, если что-то не работает. Указывайте свою RSS-читалку.

Поддержка

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

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

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

Если не хотите платить с карты, можно, например, оплатить с QIWI-кошелька. Нажмите сюда, войдите в свой кошелек и введите номер счета

410014631097232

Эгея

Слушайте, есть такой движок для ведения блога, называется «Эгея».

Когда я заводил блог, долго не мог выбрать, к какой конфессии примкнуть какой движок поставить. Выбирал между WordPress и «Эгеей». На «Эгее» сидел, да и сейчас сидит Иван Сурвилло, человек, которому этот блог обязан своим рождением, а на WordPress’e сидело к тому моменту все прогрессивное человечество все, кому хотелось побольше функциональности, но поменьше танцев с бубном. Кроме того, WP обещал установиться «за 5 минут». «Эгея» же — за секунду («секундное дело»). Я выбрал WP.

Продолжить чтение

Блог и Телеграм. Сценарий

(Место действия: концертный зал в здании сталинской постройки.)

— Дорогие товарищи!

Эти три месяца были трудными для нас. Мой блог постоянно рос и развивался, развивался и рос… Короче, благотворные изменения происходили… И вот теперь он… (всхлип) такой… (всхлип) краси-и-вый стал… (два всхлипа)… и интересны-ы-ый… (рыдание в голос, публика рыдает тоже, начинается нехватка носовых платков, через пару минут оратора начинают качать. Еще через десять минут охрана насильственными методами наводит порядок, и оставшиеся 90% зала рассаживаются по местам. Оратор, утирая слезы, продолжает)

— Блог рос и развивался, и вот наконец дорос до канала в Телеграме.

(Взрыв аплодисментов; стены зала трясутся)

— Спасибо… Вот он.

(На большом экране загорается изображение. Публика взрывается шквалом аплодисментов.)

— Спасибо… Пару слов о настройке.

Я ленив. Поэтому решил автоматизировать кросспостинг своих записей из блога на канал… (В зале недовольные возгласы.) Товарищи, не пугайтесь, пожалуйста, слова «кросспостинг»: оно не кусается… В автоматизации мне очень помог IFTTT. Это сервис, с помощью которого можно автоматизировать почти любой процесс — конечно, в рамках существующего программного обеспечения и здравого смысла, товарищи… По сути, он пишет за вас программу, состоящую из условия и команды: «если это — сделать то». Условие можно брать из множества источников: например, можно сдеать так, чтоб при солнечной погоде вам приходила напоминалка взять солнцезащитный крем. Правда, в нашем климате… Я не шучу, товарищи! Это чистая правда, хотите верьте, хотите — нет. А я подключил к IFTTT свой блог через WordPress и…

(Голос из зала: «Это гениально!» Шквал аплодисментов)

— Спасибо, товарищи… Не стоит… Тронут… Так вот. Я подключил свой блог и бот в Телеграме, который специально для этого создал, и поставил условие: если в блоге новая запись — отсылать её боту, который опубликует о ней пост на канале. Для этого мне потребовалось всего лишь базовое знание английского языка, бубен и умение танцевать.

(Пауза. В зале одинокий смешок. Еще пауза)

— Эм… Да. Так вот. С первой попытки, конечно, ничего не сработало… потребовалось четыре… а все потому, что бубен был дырявый, а у меня — руки… ну, не будем… Но зато теперь, товарищи, мы с вами заживе-е-ем! Теперь у нас с вами будет достойная замена олдскульным электропочтовым рассылкам и галимому RSS-у! Ура!

(Из зала — троекратное «ура»: два кратких, третий протяжный. По стенам идут трещины)

— Да… Конечно, на канале будут не только ссылки на посты, еще много интересного из того, что я ежедневно откапываю на просторах интернета. Там, ну, это… статьи всякие, русские, английские, разные, в общем. Интересные. Так что вы, товарищи, не робейте! Подписывайтесь, вот она, ссылочка. Спасибо за внимание! Пойду чаю выпью, в горле пересохло.

2016-07-25_00-52-39

Примечание: инструкция по подключению Телеграма к IFTTT — вот. Почему-то именно с Телеграмом там все непросто, поэтому и нужен бубен.

Революция на главной странице

Раньше главная страница моего блога выглядела вот так:

Я очень люблю эти два слова — «вот так»

Люблю эти два слова — «вот так"

Но это все было как-то не по фэн-шую. Не было фишки. Это была просто обычная страница, сделанная и криво сверстанная через WordPress с CSS, общим для всего сайта. Я уже начал подумывать о том, не освоить ли мне быстренько верстку сайтов, но тут увидел угадайте на чьем сайте ненавязчивую рекламу программы Pingendo для верстки страниц средствами Bootstrap.

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

Продолжить чтение