Теги, релевантные заголовку

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

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

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

Приступим к основной части. Чтобы получить список тегов используется функция get_tags. Для надёжности разобьём ещё и теги на слова, ведь порой теги бывают из пары слов. Алгоритм проверки сводим к следующему: необходимо проверить входит ли каждое из наших получившихся слов в название тега или наоборот, входит ли тег в слово. Например, если слово из заголовка муж, то ему соответственно подойдут теги мужчина и мужественный, действительно и обратное. Так же не забудем отсеять слова меньше 3-х букв, т.к. это обычно только предлоги, если их оставить, то от слова на выведутся все теги, содержащие этот слог(например, название, знание и др.). Во всём этом нам помогут функции eregi(ищет вхождение шаблона в строке), mb_strtolower(переводит слова к нижнему регистру в зависимости от используемой кодировки на сайте) и iconv_strlen(находит длину строки, необходимо указать кодировку).

Собственно получившийся код:

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

Добавить комментарий

Ваш e-mail не будет опубликован.