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

3 ноября, 2011

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

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

архив с исходным кодом

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

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

Примечание. Посмотреть описание предыдущих версий плагина можно в статье: Плагин 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 поста на который нужно поставить ссылку.

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

Заключение

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

Успехов!

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

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

Понравилась статья? Подписывайтесь на продолжение rss link !

Или на мой твиттер twitter link

]]>

Добавьте эту страницу в google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

]]>

Опубликовано в WordPress, Разное Комментарии (38) »

]]>

Вы можете оставить комментарий. Трекбеки закрыты.

  • http://twitter.com/mihdan Кобзарев Михаил

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

    • http://www.simplecoding.org Владимир

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

  • http://artmagika.ru artmagika

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

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

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

  • http://artmagika.ru artmagika

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

    • http://www.simplecoding.org Владимир

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

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

  • http://twitter.com/Almazov82on Dmitriy

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

    • http://www.simplecoding.org Владимир

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

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

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

  • http://twitter.com/Almazov82on Dmitriy

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

  • Izvrat911

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

    • http://www.simplecoding.org Владимир

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

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

  • http://twitter.com/BrainToolsru BrainTools.RU

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

    • http://www.simplecoding.org Владимир

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

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

      • http://twitter.com/BrainToolsru BrainTools.RU

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

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

        • http://www.simplecoding.org Владимир

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

  • Тимур Х

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

    • http://www.simplecoding.org Владимир

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

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

      • Shock

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

        • http://www.simplecoding.org Владимир

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

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

        • Shock

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

        • http://www.simplecoding.org Владимир

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

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

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

    • http://www.simplecoding.org Владимир

      Напишите, пожалуйста, в какой момент они у вас слетели. И проверьте кодировку таблиц в базе данных, должно быть 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

    • http://www.simplecoding.org Владимир

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

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

      • Shock

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

  • Shock

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

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

    • http://www.simplecoding.org Владимир

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

  • Александр

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

    • http://www.simplecoding.org Владимир

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

  • Екатерина

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

  • Yra

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

    • http://www.simplecoding.org Владимир

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

]]>
Tweet