Плагин для WordPress — Terms Descriptions (версия 1.2.0)

Владимир | | WordPress, Разное.

Приветствую всех!

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

Source

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

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

Примечание. Посмотреть описание предыдущих версий плагина можно в статье: Плагин WordPress: Terms Descriptions.

Рассмотрим по порядку все основные изменения.

Интерфейс

Переделан практически полностью. Надеюсь, будет удобнее 😉

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

Сейчас плагин создаёт три административных страницы, которые находятся в меню «Термины».

На первой странице (рис.1) размещена форма добавления новых терминов и таблица с уже существующими терминами.

terms_descriptions_1

Рис.1.

Принцип создания термина остался тем же, но форма изменилась. Во-первых, сейчас добавлена нормальная поддержка произвольных типов записей WP (custom post types). Во-вторых, для выбора записи (поста) используется поле с автокомплитом, а не выпадающий список с заголовками постов (рис. 2). Как оказалось, выпадающий список практически бесполезен, если блог содержит несколько сотен записей.

Рис. 2.

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

На второй странице находится форма со всеми основными настройками блога (рис. 3).

Рис. 3.

На третьей странице (рис. 4) – инструменты для экспорта/импорта данных плагина и для пакетной загрузки терминов.

Рис. 4.

Хранение терминов

Способ хранения и работы с терминами также был существенно переработан. Поэтому после обновления плагина в админке появится сообщение с кнопкой «Обновить БД». Я настоятельно рекомендую сделать резервную копию базы перед выполнением этой операции.

Причин для внесения этих изменений было две.

1) Оказалось, что часть пользователей создаёт большие списки терминов. И для работы с ними целесообразно создать отдельную таблицу.

2) Функция get_permalink, которая используется в WP для формирования ЧПУ, при определённых структурах ссылок оказывается довольно ресурсоемкой. Чтобы исключить её использование при формировании страниц блога, формирование ссылки теперь осуществляется один раз при создании термина. А для того, чтобы плагин правильно работал после изменения структуры URL, добавлена возможность пакетного обновления ссылок из админки. Кнопка «Обновить ссылки» находится справа над таблицей терминов (рис. 1). Т.е. если меняете структуру ЧПУ не забудьте обновить ссылки терминов.

Парсеры

Одними из самых неприятных проблем, с которыми я столкнулся при поддержке плагина, были конфликты с другими плагинами.

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

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

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

Сейчас в дистрибутиве плагина есть два парсера.

1) Простой. Ставит ссылку на текст, который полностью совпадает с одним из терминов.

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

Переключение между парсерами осуществляется на странице Термины->Настройки (рис. 3).

Пакетная загрузка терминов

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

Форма пакетной загрузки находится на странице Термины -> Инструменты.

Формат добавления терминов следующий. Каждый термин должен быть записан в отдельной строке. Можно указать несколько словоформ для терминов. Разделитель словоформ – символ |. Т.е. точно так же, как и при добавлении нового термина. Но есть важное отличие, в качестве последней словоформы нужно указать ссылку. Ссылкой может быть обычный URL (наличие http:// обязательно) или id поста (пост нужно создать до добавления терминов).

Например,

яблоко|яблоки|яблок|яблочный|http://apples.com
груша|груш|груши|24

и т.д.
здесь, 24 – id поста на который нужно поставить ссылку.

Хочу предупредить. Добавление терминов занимает некоторое время. И, при попытке загрузить большой список, время выполнения скрипта может превысить лимит, установленный хостером. В таких случаях единственный вариант решения (если не считать вариант переезда на выделенный сервер) – загружать список по частям.

Заключение

В общем, надеюсь, новая версия вам понравится и позволит сделать работу более комфортной 😉 И, конечно, жду ваших предложений, пожеланий и баг репортов 😉

UPD. Отдельное спасибо Borisa Djuraskovic за перевод на Сербо-Хорватский язык.

Успехов!

Полезные ссылки.

Закажите VPS Start и выше и получите 30$ + панель ISP в подарок! Отзывы — zapili.net

  • Открыл создание термина, выбрал «ИД записи», вписал реальный ИД записи сохранил. Термин появился в таблице терминов. Открыл на редактирование этот термин, поправил его. Сохраняю — ошибка.

    • Напишите, пожалуйста, какая именно ошибка появилась.

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

    Целесообразнее было бы сделать ограничение на количество повторов одного и того же термина в одной статье. Допустим, если других терминов не встречается в статье, кроме одного, то пускай линкует его наши установленные 3 раза — не жалко ведь, ничего не упустим. Если же помимо него есть и другие термины, то пусть он повторяется только один раз.

    Можно и усложнить задачу: Допустим идут в статье термины в таком порядке: яблоко1, яблоко2, яблоко3, груша4, яблоко5. Количество линковок в настройках стоит 3. В результате должно получится три линковки: яблоко 1, груша4, яблоко5.

  • Извиняюсь, предыдущий пост можно не читать, т.к. я ошибся. Предлагаю ввести дополнительное ограничение на максимальное количество перелинковок в статье. Т.к. излишне большое их количество может быть расценено поисковой системой как переоптимизация и негативно скажется на ранжировании.
    Можно сделать даже ограничение в зависимости от объёма статьи — чем больше статья, тем больше ссылок в ней может быть.

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

      Но анализом длины статьи заниматься не буду, т.к. тут много нюансов. Просто считать количество слов нельзя, в тексте могут быть объемные вставки спец. тегов, например, embed.

  • Проблема перестал работать плагин после его обновления. Теперь есть  только ??? вместо ранее созданных терминов и ссылок, и перестал работать. Как решить проблему не забивая заново все термины?
    пришлите предыдущую версию плагина 1.1.8. WordPress 3.1.2.  
    Спасибо.

    • После выхода новой версии мне пришло 2 похожих сообщения. В обоих случаях проблема возникла из-за изменения кодировок базы данных на хостинге. Исправляла ситуацию служба поддержки хостера. В любом случае, для нормальной работы WP нужно чтобы кодировка базы была utf-8.

      Т.е. вам нужно:
      1) восстановить базу из бекапа;
      2) проверить и исправить кодировки;
      3) установить новую версию плагина заново.

      Старые версии можно скачать здесь.

  • Проблема перестал работать плагин после его обновления. Теперь есть  только ??? вместо ранее созданных терминов и ссылок, и перестал работать. Как решить проблему не забивая заново все термины?
    пришлите предыдущую версию плагина 1.1.8. WordPress 3.1.2.  
    Спасибо.

  • Izvrat911

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

    • Выложил обновление, которое исправляет этот баг.

  • Pingback: Как сделать перелинковку сайта на wordpress плагином terms descriptions - видео. | Деньги в сети()

  • При «приличном» размере записи плагину не удается, за ограниченное время выполнения скрипта php, обработать текст страницы и вываливается страница с ошибкой превышения интервала выполнения скрипта php. Мне кажется, что не хватает каких то фильтров на обработку записей. Необходимо дать возможность настройки ограничения на обработку записей, например по размеру контента (не учитывая теги, т.е. как раз то, что в итоге обрабатывает плагин). И / или ввести список страниц исключений по маске или конкретная страница и так далее. Вообщем одной галочки обрабатывать только страницы отдельных записей недостаточно, т.к. записи бывают разные по объему информации и с некоторыми не справляется плагин.

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

      Пришлите, пожалуйста, текст самого большого из ваших постов и список терминов (на vova_33[@]gala.net)

      • Файлы для анализа выслал.
        Хостинг может и режет, но не такой уж он и слабый у меня

        VPS (openvz)
        2х2000 Мгц
        2 Гб память

        • Да, хостинг вполне приличный 🙂
          Еще раз спасибо за файлы.

  • Тимур Х

    Привет, а ты можешь дописать в плагин функцию, которая все проставленные ссылки данным плагином, делает их ссылкам в самих постах и страницах сайта, то есть когда плагин отключаешь все проставленные ссылки данным плагином, оставались на месте!? (мало ли какой-либо сбой, касяк или ещё что-нибудь отключит плагин, приведёт его к не корректной работе и все ссылки, проставленные данным плагином на сайте перестанут быть ссылками. Таким образом возможно даже нагрузка снизится на больших проектах? А может и нет, но всё равно думаю данная функция будет очень полезна). Благодарю!!!

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

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

      • Shock

        В тему нагрузки на проекты: правильно ли я понимаю, что нагрузка, создаваемая плагином, зависит от длинны записи и количества терминов? Замена терминов на соответствующие ссылки происходит каждый раз при обращении к записи? Если так, то эту проблему можно частично решить лишь кешированием, либо внесением изменений в сами посты? Тогда всё же можно ли реализовать такую функцию (чтобы внесённые изменения сохранялись в бд)? Конечно же, должно быть десяток предупреждений о необратимости данного действия и о необходимости сделать бекап.

        • Да, вы понимаете всё правильно. Кеш решает проблему практически на 100%. Фактически при использовании плагинов вроде W3TC обращений к PHP и БД не происходит вообще.

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

        • Shock

          Я написал, что кеш частично решает проблему лишь потому, что кеширование вызывает ряд других проблем, связанных с тем, что вносимые изменения не отобразятся, пока не пройдёт n-ое количество времени. В частности будут проблемы с sape и т.д.

        • Да, проблемы с sape будут.
          Но это отдельная проблема 🙂

  • Самохин Виталий

    Добрый день!
    Слетели русские шрифты в терминах, не могу добавить и изменить имеющийся. Открываю имеющиеся термины — изменить, а там абра-кадабра. Пишу латыницей — все хорошо, хотя в окне Термины все читается.

    • Напишите, пожалуйста, в какой момент они у вас слетели. И проверьте кодировку таблиц в базе данных, должно быть UTF-8.

      • Самохин Виталий

        Где менять UTF-8 — я не нашел, но после перезагрузки все заработало! Видимо, глюк какой-то, извиняюсь (((

  • Самохин Виталий

    Скажите, пожалуйста, как сделать так, чтобы ссылка открывалась в новом окне?

  • Самохин Виталий

    Скажите, пожалуйста, как сделать так, чтобы ссылка открывалась в новом окне?

    • Shock

      Если используется простой парсер (по умолчанию), то делай так: в файле по адресу terms-descriptions/includes/parsers/td_simple_parser.php замени строку

      $result = preg_replace( $replace_re, '$1' . $text_before . '<a  href="'. $term[ 't_post_url' ]

      на 

      $result = preg_replace( $replace_re, '$1' . $text_before . '<a target="_blank" href="'. $term[ 't_post_url' ]

    • Shock

      Чёрт, код в комент хз как вставить… 

    • Shock

      Вот сюда написал ответ paste.pro/5140749

    • Обратите внимание, что Shock предлагает изменить код плагина. Это означает, что после очередного обновления вам придется внести эти изменения заново.

      Наверное, я добавлю соответствующую опцию в следующей версии плагина.

      • Shock

        Да, наверное имеет смысл внести такую опцию… но по умолчанию наверное надо оставить так, как есть сейчас…

  • Shock

    Кстати, возможно ли реализовать такую вещь: чтобы в бд создавалась копия таблицы с записями, но не полная копия, а с внесёнными изменениями (термины заменены на ссылки). Данная «копия» бы обновлялась только после добавления новых записей/терминов. И самое важное: если плагин активен, то при формировании страницы, обращение шло именно к этой «копии», если плагин деактивирован — то обращение шло к оригиналу.

    Это будет своеобразным кешированием, но решит проблему, описанную выше (про sape). Или же это уже вопрос будет корректнее отнести к плагинам кеширования, а в плоскости данного плагина его не стоит рассматривать?

    • Да, такие возможности лучше вынести в плагин кеширования. Дело в том, что не только Terms Descriptions может изменять содержимое поста. Есть довольно много других плагинов, которые тоже меняют текст «на лету». Если записывать в дополнительную таблицу пост с проставленными ссылками, то нет никакой гарантии, что запишутся изменения, которые вносят другие плагины.

  • Александр

    Здравствуйте Владимир! После обновления плагина Terms Descriptions до Версии 3.0.2 перестали загружаться новые термины, добавляю но ничего не происходит.Подскажите пожалуйста в чем может быть причина. Установлен  WordPress 3.2.1. С уважением Александр.

    • Пожалуйста, установите firebug (плагин к firefox). Он во вкладке «Консоль» покажет ошибки, которые возникают при добавлении термина.
      Перешлите эти ошибки мне.

  • Екатерина

    Здравствуйте! У меня не работает плагин. Вообще не сохраняет термины. Пишет — Term save error или Link save error Как с этим бороться?

  • Yra

    Владимир, установив данный плагин, он не появляется на панели инструментов для дальнейшей настройки. Я его вижу установленным, но не в состоянии отлинковать для дальнейшей работоспособности. Мой почтовый адрес Yras4esov@mail.ru

    • Проверьте версию плагина, последняя — 3.0.4.
      После активации в меню появляется пункт — Термины.

  • Здравствуйте, Владимир. У вас отличный плагин, но почему-то страницы ссылаются сами на себя — нет фильтра, который бы это запрещал. Судя по комментам, вроде как и есть, но у меня ссылки «сам на себя» расставлены во всю 🙁

    •  Проверка ссылок не работает для ссылок типа «внешняя ссылка». Т.е. предполагается, что ссылка внешняя.
      Если вам нужно ссылаться на внутренние страницы используйте тип «Пост», «Страница», «Id поста».

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

  • Сорри, под «рабочим» акком случайно оставил пост…

  • Schukin Nws

    Владимир, поставил у себя в настройках -1, чтобы все термины делать ссылками. И в какой-то момент обнаружил, что половины статей просто нет, они исчезли. Переставил снова на 2 — всё ОК. Настройка -1 не применима вообще? И какие настройки оптимальны для этого плагина?

    • Уточните, пожалуйста, версию плагина. «-1» — означает максимально возможное количество замен.

  • Андрей

    Здравствуйте, Владимир. Как можно поменять цвет терминов, созданных этим плагином, в статье? Спасибо.

    • В файле стилей темы style.css добавьте класс с нужным цветом. Например,
      a.term {
      color: #f00;
      }

      В настройках плагина (на странице Настройки) укажите этот класс в параметре «Добавить CSS класс» в поле введите «term».

  • павел

    добавил термины, затем нажимаю «обновить ссылки на термины» появляется окошко с процентами, но до 100 не доходит, останавливается всегда в разном месте, вобщем ссылки не добавляются

    • Чтобы исправить нужна подробная информация об ошибках.

      Для этого нужно запустить обновление ссылок при запущеном Firebug (плагин для Firefox) или открытых инструментах разработчика (Chrome). В обоих случаях описание ошибок появится на вкладке Консоль.

  • Linkor

    у меня совсем не так работает плагин!

    Надо обязательно без пробелов перечисление делать? яблоко|яблоки|яблок|яблочный|

    У меня на сайте так стоит: яблоко | яблоки | яблок | яблочный |

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

    • Уточните, пожалуйста, какую версию плагина вы используете?

      Пробелы до и после вертикальной черты роли не играют.

      Чтобы решить проблему с коротким ключом в настройках (Термины -> Настройки) измените тип парсера на «Парсер с сортировкой терминов по их длинне».

      • Linkor

        Версия 3.0.2. Скоро буду всё обновлять до последних, кстати на WP 3.8 будет работать? Стоит — Простой парсер и есть Простой парсер с поддержкой кавычек — его нужно отметить? или плагин обновить?

        • Да, с WP 3.8 работает, хотя я в любом случае готовлю обновление, т.к. в этой версии серьезно изменился интерфейс.
          Но вам в любом случае нужно обновить плагин, т.к. в вашей версии нет «Парсера с сортировкой терминов по их длинне».

        • Linkor

          Благодарю! А по какой ссылке его можно будет скачать? обновлённый

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

  • Ivan Spaskou

    Добрый день!
    Как я заметил плагин парсит только данные, которые берутся из контен-области и области-комментариев. А как быть в случае, когда на сайте в связи с определенной необходимостью используются произвольные поля, в которые как раз таки вносится масса текстовой информации?
    Что поправить в коде плагина, чтобы парсило и произвольные поля.
    P.S. использую плагин Advanced Custom Fields.

    • Вам не обязательно изменять код плагина. Вы можете сделать замену с помощью следующего кода:

      if (class_exists('TD_Frontend')) {
      $parser = new TD_Frontend();
      echo $parser->parse_content('...текст в котором Вы хотите сделать замену...');
      }

      • Ivan Spaskou

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

  • Сергей Ишняков

    Здравствуйте, Владимир.
    Давно пользуюсь вашим замечательным плагином.
    Пожалуйста добавьте в настройки возможность включать/отключать преобразование терминов не только в «Записях» и «Комментариях», но и на «Страницах».

  • Антон Дробышевский

    Здравствуйте! Обнаружил вчера такого рода проблему: на сайте на страницах при применении данного плагина, примерно на 2-м линке происходит раздвоение текста и он опять повторяеться с места 2 линка.(появляються и по 2 фото) я сейчас включу плагин чтобы Вы смогли это увидеть (http://polska.org.ua). Может я что то не так настроил — не судите строго…Да обнаружил что если Преобразовывать первые

    вхождений каждого термина. стоит тогда и происходит данная проблема при 1 это пропадает. Ставить 1?

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