Обновление WordPress плагина Terms Descriptions

Владимир | | PHP, Web разработка, WordPress.

wp terms descriptions logo

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

Сегодня выложил очередное обновление WordPress плагина Terms Descriptions.

Для тех, кто слышит о нём впервые, кратко объясню его назначение. Он позволяет создавать списки терминов, назначать им ссылки, автоматически искать термины и преобразовывать их в ссылки в ваших записях. Подробнее можно почитать здесь.

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

Последнее усовершенствование предложил Андрей Х.

Идея заключается в добавлении атрибута class ссылкам, которые создаёт плагин.

Что это даёт?

1) Возможность выделить ссылки с помощью CSS стилей.

2) Возможность обеспечить единый внешний вид ссылок, если для остальных ссылок уже установлен атрибут class.

Добавить атрибут несложно.

Обновите плагин, в админке появится дополнительное поле.

wordpress terms descriptions class

Значение атрибута нужно указать в поле «Атрибут Class для ссылок».

После этого, ссылки будут выглядеть так.

<a href="http://site.domain" class="ext_link">Текст ссылки</a>

Не хотите пользоваться этой возможность, просто оставьте поле пустым.

Ещё одно изменение касается русской локализации. За это отдельное спасибо Андрей Х, который не поленился и исправил мои ошибки.

Кстати, если есть желание и возможность, вы можете перевести этот плагин на свой язык. Много времени это не займет. Плагин содержит менее 40 текстовых фраз. Для перевода удобнее всего использовать программу Poedit. Затем просто пришлите файл переводов мне.

Надеюсь, нововведения будут вам полезны.

Удачи!

  • Очень интересная идея плагина.. Будет полезна где много информации для новичков. Будут пояснения!

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

    • 29118000

      При подстановке фильтра content_save_pre ссылки просто исчезают и не подставляются ни на лету, ни сохраняются в базе. Возможно нужно что-то менять здесь array( 'Terms_descriptions', 'termReplace' ) ), но я этих терминов не понимаю. Подскажите как сохранить ссылки в базе навсегда… Это необходимо для кросспостинга в другие блоги. Если ссылки создаются на лету, то в базе их нет и контент экспортируется в другие блоги (например в жж) без ссылок, что не есть гуд. Сможете помочь разобраться?

      • Я прошу прощения, в WP 3+ этот фильтр (content_save_pre) отмечен как depricated.
        Попробуйте использовать wp_insert_post_data.

        • 29118000

          Добрый день Владимир, может я что то не так понимаю…
          вставляю в terms-descriptions.php
          add_filter( 'wp_insert_post_data', array( 'Terms_descriptions', 'termReplace' ) );
          но в итоге все ссылки отключаются, плагин просто перестает работать

        • 29118000

          использую WordPress 2.7.1

        • В вашем случае должен работать вариант с фильтром content_save_pre.
          Нашел пример в одном из своих старых плагинов, нормально работает.

          function replace_text( $content ) {
          //изменяем содержимое $content
          return $content;
          }

          add_filter( 'content_save_pre', 'replace_text' );

        • 29118000

          спасибо за совет, но я видимо чего то не понимаю.
          пробовал ставить вашу функция после фильтра:
          //filters for posts and/or comments
          $tdTarget = get_option( 'td_target' );
          if ( is_array( $tdTarget ) && in_array( 'posts', $tdTarget )) {
          add_filter( 'the_content', array( 'Terms_descriptions', 'termReplace' ) );
          }
          if ( is_array( $tdTarget ) && in_array( 'comments', $tdTarget )) {
          add_filter( 'comment_text', array( 'Terms_descriptions', 'termReplace' ) );
          }

          function replace_text( $content ) {
          //изменяем содержимое $content
          return $content;
          }

          add_filter( 'content_save_pre', 'replace_text' );

          не получилось, потом попробовал первый фильтр убрать поставить Ваш:
          function replace_text( $content ) {
          //изменяем содержимое $content
          return $content;
          }

          add_filter( 'content_save_pre', 'replace_text' );

          тоже ничего не выходит. Плагин просто перестает работать…:(

        • Вместо комментария
          //изменяем содержимое $content
          нужно вставить код из метода termReplace, т.е. изменить текст, который находится в параметре $content

  • Kalian

    Возникла проблема с WP 3+. После введения возможности добавлять собственные типы записей, естественно решил все это испытать. Но решил испытать на готовом премиум шаблоне.
    Оказалось, что в новых типах записей термины не заменяются на ссылки. В стандартных записях все как и раньше меняется прекрасно.
    Насколько я понял, конкретной привязки к типу записи у плагина нет, он просто меняет ссылки в the_content. Но у меня почему-то не работает.

    Можете проверить, так ли это или у меня проблемы с шаблоном?

    • Большое спасибо за сообщение.
      Если не сложно, напишите, какой шаблон вы используете.

      • Kalian

        Шаблон DailyNotes от Elegant Themes.
        Скачать, наверное, можно здесь http://www.uniq-themes.ru/index.php/wpthemes/elegantthemes/1080-dailynotes.html

        • Спасибо, я проверю.

        • Kalian

          Еще не проверили, как там обстоит дело с новыми типами записей?

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

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

        • Kalian

          Перепроверил несколько раз, оказалось редактор WP надобавлял дополнительных спецсимволов, и из-за этого ничего не менялось.
          В общем, ложная тревога, спасибо за отличный плагин.
          P.S.: теперь вы точно знаете, что плагин замечательно справляется и с новыми типами записей 🙂

        • Знакомая ситуация 🙂
          У себя я визуальный редактор вообще отключил.

  • Илья

    Владимир, к сожалению придется отказаться пока от вашего плагина =( С недавних пор начал подглючивать сайт, думал я что-то намудрил с сервером или с самописной темой. А на самом деле оказалось, что это плагин делает почти 900 дополнительных SQL запросов на генерацию каждой страницы, the_content отрабатывает почти 8 секунд! Пока нет времени разбираться, что с ним не так, но пробовал включать-выключать объектное кеширование вордпресса, на количество запросов плагина это увы не влияет =( Админка летает, проблема только на сайте. Даже страница плагина не тормозит (раньше использовал другой плагин, он тормозил при добавлении термов).

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

    • Илья

      Обещал не смотреть, но посмотрел =) причина большого числа запросов в строке 482, где get_permalink( (int)$term['pageid'] ), то есть, если указана не ссылка, а id записи, плагин лезет запросом к ее текущему урлу. Пока не придумал ничего лучше, кроме как сконвертить все термы в обычные линки. А еще лучше, написать кнопочку, которая будет единовременно генерировать урлы по id и писать их в базу для плагина. Лично мне это сэкономит почти 900 запросов и 4 секунды на генерацию страницы!

      • Большое спасибо, что написали об этой проблеме.

        Я выложил обновление. Надеюсь, что оно решит ваши проблемы 😉

        Дело в том, что в первых версиях плагина ссылки на термины формировались при их создании и вызовов get_permalink не было. Но начали приходить просьбы сделать поддержку изменения структуры ЧПУ. Я поспешил и не проверил работу плагина при больших количествах терминов.

        Я согласен, плагин нужно переписать и добавить возможность генерации url по запросу (ведь структура ЧПУ изменяется довольно редко). Правда и тут может возникнуть проблема. На дешевых хостингах возможно превышение допустимого времени выполнения скрипта, и пользователи вообще не смогут обновить ссылки.

        • Илья

          Помогло, и даже очень =) Все работает, запросов нет, время генерации в шаблоне single.php не больше полутора секунд (у меня 450 записей по 5 термов в среднем в каждой, думаю это нормально). Однако, на главной странице время генерации увеличилось до 23 секунд в отработке get_the_excerpt и the_content, у меня на главной the_excerpt вызывается девять раз (в категориях у меня нет аннотаций, но, думаю, там тоже будут тормоза). Возможно так было и раньше, просто сейчас я увеличил таймауты. Пробежался по коду, не могу понять куда пихнуть проверку типа is_single, чтобы плагин отрабатывал только в single.php?

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

          Скорее всего, добавлю опцию в админку, отключенную по-умолчанию.

          Если есть другие предложения, пишите.

  • Илья

    Владимир, как раз галочка в настройках в этом случае поможет =) Пока я отключил wp_trim_excerpt и написал свою функцию, которая вызывает get_the_content и формирует анонс.

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

    До вашего плагина использовал Internal Links Building, там была возможность импорта и экспорта в CSV, она мне помогла при установке плагина на работающий сайт, так как намного проще сначала все в текстовой файл записать и скопом скормить плагину, чем добавлять каждый терм отдельно.

    Кстати, чтобы решить проблему регенерации урлов на дешевых хостингах, можно реализовать эту функцию через AJAX, как сделано в плагинах регенерации миниатюр (я часто использую AJAX Thumbnail Rebuild, он у меня работал еще когда я хостился на шаред-хостингах, и нормально справлялся как минимум с 500 изображениями)

    • Решение с использованием AJAX хорошее, пару раз им пользовался в других плагинах, но почему-то сразу не подумал о нем.

      Импорт/экспорт давно собирался сделать. Но хотелось бы учесть форматы выдачи ключевых слов из каких-нибудь популярных программ (я ими просто не пользовался), чтобы свести к минимуму количество ручной работы. Поэтому если можете что-нибудь посоветовать, буду очень благодарен 😉

      Опцию отображения только на страницах отдельных записей добавил.