<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ars Longa, Vita Brevis &#187; Simple Tags</title>
	<atom:link href="http://blog.sjinks.pro/tag/simple-tags/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.sjinks.pro</link>
	<description>Quod scripsi, scripsi</description>
	<lastBuildDate>Mon, 06 Feb 2012 17:56:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Очередная партия исправлений для Simple Tags</title>
		<link>http://blog.sjinks.pro/wordpress/patches/841-new-patches-for-simple-tags/</link>
		<comments>http://blog.sjinks.pro/wordpress/patches/841-new-patches-for-simple-tags/#comments</comments>
		<pubDate>Thu, 28 Oct 2010 18:30:49 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Патчи]]></category>
		<category><![CDATA[Simple Tags]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[ошибка]]></category>
		<category><![CDATA[патч]]></category>
		<category><![CDATA[плагин]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=841</guid>
		<description><![CDATA[Cannot load st_mass_tags Благодаря одному из своих читателей я узнал, что у плагина Simple Tags помимо проблем, которые я регулярно исправляю, есть еще одна: при попытке зайти в Posts » Mass edit terms » All Pages выдаётся сообщение Невозможно загрузить st_mass_tags. Об ошибке автору сообщили на форуме поддержки, но так как автор в комментариях не отметился, пришлось исправлять плагин [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/patches/841-new-patches-for-simple-tags/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Cannot load st_mass_tags</em></h2>
<p>Благодаря одному из своих <a href="http://blog.sjinks.pro/wordpress/patches/821-fixing-simple-tags-1-8/comment-page-1/#comment-3556">читателей</a> я узнал, что у плагина <a href="http://blog.sjinks.pro/tag/simple-tags/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Simple Tags">Simple Tags</a> помимо проблем, которые я <a href="http://blog.sjinks.pro/tag/simple-tags/">регулярно исправляю</a>, есть еще одна: при попытке зайти в Posts » Mass edit terms » All Pages выдаётся сообщение <strong>Невозможно загрузить st_mass_tags</strong>.<span id="more-841"></span></p>
<p>Об ошибке автору <a href="http://wordpress.org/support/topic/plugin-simple-tags-cannot-load-st_mass_tags?replies=1">сообщили</a> на форуме поддержки, но так как автор в комментариях не отметился, пришлось исправлять <a href="http://blog.sjinks.pro/tag/plugin/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  плагин">плагин</a> самостоятельно.</p>
<p>Как оказалось, всё дело в вызове <code>add_posts_page()</code>. Дело в том, что эта функция регистрирует страницу плагина в системе только для меню «Записи» (Posts). Ссылки «Все записи», «Черновики», «Опубликованные» работают нормально, так как в их основе <code>/wp-admin/edit.<a href="http://blog.sjinks.pro/tag/php/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  PHP">php</a>?page=st_mass_tags</code>. А ссылка «Все страницы» (<code>/wp-admin/edit.php?page=st_mass_tags&amp;post_type=page</code>) уже не работает — из-за <code>post_type=page</code>. А всё потому, что <code>edit.php?post_type=page</code> — это уже другое меню (Страницы/Pages), для которого <code>add_posts_page()</code> не работает. Для того, чтобы зарегистрировать страницу в этом меню, нужно использовать функцию <code>add_pages_page()</code>.</p>
<p>Но при использовании <code>add_pages_page()</code> ссылка на страницу появится в меню «Страницы», а это, скорее всего, не совсем то, что хотел автор (фактически, у нас бы получилось два пункта «Mass Edit Terms» — один в меню записей, другой в меню страниц). Поэтому для чистого решения проблемы нужно проэмулировать работу функции <code>add_pages_page()</code>, но не создавать запись в меню.</p>
<p>Решение получается очень простым:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p8412">
        <div class="code diff" id="p841code2">
--- simple-tags/inc/admin.orig.php&nbsp; 2010-10-24 15:31:16.000000000 +0300<br />
<span class="re4">+++ simple-tags/inc/admin.php &nbsp; <span class="nu0">2010</span>-<span class="nu0">10</span>-<span class="nu0">24</span> <span class="nu0">15</span>:<span class="nu0">59</span>:<span class="nu0">37.000000000</span> +0300</span><br />
<span class="re6">@@ -<span class="nu0">231</span>,<span class="nu0">6</span> +<span class="nu0">231</span>,<span class="nu0">17</span> @@</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; add_posts_page<span class="br0">&#40;</span> __<span class="br0">&#40;</span>'Simple Terms: Mass Edit Terms', 'simpletags'<span class="br0">&#41;</span>, __<span class="br0">&#40;</span>'Mass Edit Terms', 'simpletags'<span class="br0">&#41;</span>, 'simple_tags', 'st_mass_tags', array<span class="br0">&#40;</span>&amp;$this, 'pageMassEditTags'<span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; add_posts_page<span class="br0">&#40;</span> __<span class="br0">&#40;</span>'Simple Terms: Auto Terms', 'simpletags'<span class="br0">&#41;</span>, __<span class="br0">&#40;</span>'Auto Terms', 'simpletags'<span class="br0">&#41;</span>, 'simple_tags', 'st_auto', array<span class="br0">&#40;</span>&amp;$this, 'pageAutoTags'<span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; add_options_page<span class="br0">&#40;</span> __<span class="br0">&#40;</span>'Simple Tags: Options', 'simpletags'<span class="br0">&#41;</span>, __<span class="br0">&#40;</span>'Simple Tags', 'simpletags'<span class="br0">&#41;</span>, 'admin_simple_tags', 'st_options', array<span class="br0">&#40;</span>&amp;$this, 'pageOptions'<span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
<span class="re8">+</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; global $_registered_pages, $_wp_real_parent_file;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; $menu_slug &nbsp; = plugin_basename<span class="br0">&#40;</span>'st_mass_tags'<span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; $parent_slug = plugin_basename<span class="br0">&#40;</span>'edit.php?post_type=page'<span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span>isset<span class="br0">&#40;</span>$_wp_real_parent_file<span class="br0">&#91;</span>$parent_slug<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $parent_slug = $_wp_real_parent_file<span class="br0">&#91;</span>$parent_slug<span class="br0">&#93;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></span><br />
<span class="re8">+</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; $hookname = get_plugin_page_hookname<span class="br0">&#40;</span>$menu_slug, $parent_slug<span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; add_action<span class="br0">&#40;</span>$hookname, array<span class="br0">&#40;</span>&amp;$this, 'pageMassEditTags'<span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; $_registered_pages<span class="br0">&#91;</span>$hookname<span class="br0">&#93;</span> = true;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; /**
        </div>
    </div>
</div>

<p>Специально для тех, у кого слово <a href="http://blog.sjinks.pro/tag/patch/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  патч">патч</a> вызывает нехорошие мысли, я собрал исправленную версию плагина, в которой:</p>
<ul>
<li>Устранена эта самая <a href="http://blog.sjinks.pro/tag/bug/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  ошибка">ошибка</a>;</li>
<li><a href="http://blog.sjinks.pro/wordpress/plugins/566-simpletags-166-and-auto-link-tags-in-russian/">добавлена поддержка UTF-8 в автоматических ссылках</a>;</li>
<li><a href="http://blog.sjinks.pro/wordpress/plugins/757-simple-tags-1-7-4-2/">оптимизирован вызов <code>register_uninstall_hook()</code></a>;</li>
<li>исправлена проблема с локализацией (спасибо <a href="http://blog.sjinks.pro/wordpress/patches/821-fixing-simple-tags-1-8/comment-page-1/#comment-3469">Analitik</a>).</li>
</ul>
<p><strong id="download"><a href="http://d.sjinks.pro/wordpress/simple-tags-1.8.2.zip" rel="nofollow">Скачать исправленный плагин Simple Tags 1.8.2</a></strong>.</p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/patches/841-new-patches-for-simple-tags/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/wordpress/patches/841-new-patches-for-simple-tags/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Исправляем Simple Tags 1.8</title>
		<link>http://blog.sjinks.pro/wordpress/patches/821-fixing-simple-tags-1-8/</link>
		<comments>http://blog.sjinks.pro/wordpress/patches/821-fixing-simple-tags-1-8/#comments</comments>
		<pubDate>Mon, 13 Sep 2010 03:44:50 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Патчи]]></category>
		<category><![CDATA[Simple Tags]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[патч]]></category>
		<category><![CDATA[плагин]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=821</guid>
		<description><![CDATA[Очередная порция патчей для Simple Tags Традиционное исправление ошибок в плагине Simple Tags. Ошибки всё те же: отсутствует поддержка многобайтовых символов (в частности, UTF-8) в автоматических ссылках; вызов register_uninstall_hook() при каждом обращении к блогу. Радует, что проблему с автоматическими ссылками меток автор всё же поправил Это то, ради чего данный плагин установлен. Традиционный патч (unified [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/patches/821-fixing-simple-tags-1-8/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Очередная порция патчей для <a href="http://blog.sjinks.pro/tag/simple-tags/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Simple Tags">Simple Tags</a></em></h2>
<p><a href="http://blog.sjinks.pro/search/simpletags/">Традиционное</a> исправление ошибок в плагине Simple Tags.</p>
<p>Ошибки всё те же:</p>
<ul>
<li><a href="http://blog.sjinks.pro/wordpress/plugins/566-simpletags-166-and-auto-link-tags-in-russian/">отсутствует поддержка многобайтовых символов (в частности, UTF-8) в автоматических ссылках</a>;</li>
<li><a href="http://blog.sjinks.pro/wordpress/plugins/757-simple-tags-1-7-4-2/">вызов <code>register_uninstall_hook()</code> при каждом обращении к блогу</a>.</li>
</ul>
<p>Радует, что проблему с автоматическими ссылками меток автор всё же поправил <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Это то, ради чего данный <a href="http://blog.sjinks.pro/tag/plugin/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  плагин">плагин</a> установлен.<span id="more-821"></span></p>
<p>Традиционный <a href="http://blog.sjinks.pro/tag/patch/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  патч">патч</a> (unified diff):</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p8214">
        <div class="code diff" id="p821code4">
diff -uwdBrN simple-tags.orig/inc/client.php simple-tags/inc/client.php<br />
<span class="re3">--- simple-tags.orig/inc/client.php <span class="nu0">2010</span>-08-<span class="nu0">11</span> <span class="nu0">10</span>:<span class="nu0">37</span>:<span class="nu0">39.000000000</span> +0300</span><br />
<span class="re4">+++ simple-tags/inc/client.php&nbsp; <span class="nu0">2010</span>-09-<span class="nu0">13</span> 06:<span class="nu0">20</span>:<span class="nu0">40.000000000</span> +0300</span><br />
<span class="re6">@@ -<span class="nu0">157</span>,<span class="nu0">8</span> +<span class="nu0">157</span>,<span class="nu0">9</span> @@</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $filtered = ''; // will filter text token by token<br />
<span class="re7">- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $match = &quot;/\b&quot; . preg_quote<span class="br0">&#40;</span>$term_name, &quot;/&quot;<span class="br0">&#41;</span> . &quot;\b/&quot;.$case;</span><br />
<span class="re7">- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $substitute = '&lt;a href=&quot;'.$term_link.'&quot; class=&quot;st_tag internal_tag&quot; '.$rel.' title=&quot;'. esc_attr<span class="br0">&#40;</span> sprintf<span class="br0">&#40;</span> __<span class="br0">&#40;</span>'Posts tagged with %s', 'simpletags'<span class="br0">&#41;</span>, $term_name <span class="br0">&#41;</span> <span class="br0">&#41;</span>.&quot;\&quot;&gt;$0&lt;/a&gt;&quot;;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $quoted = preg_quote<span class="br0">&#40;</span>$term_name, &quot;/&quot;<span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $match = '/<span class="br0">&#40;</span>\PL|\A<span class="br0">&#41;</span><span class="br0">&#40;</span>' . $quoted . '<span class="br0">&#41;</span><span class="br0">&#40;</span>\PL|\Z<span class="br0">&#41;</span>/u'.$case;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $substitute = '$1&lt;a href=&quot;'.$term_link.'&quot; class=&quot;st_tag internal_tag&quot; '.$rel.' title=&quot;'. esc_attr<span class="br0">&#40;</span> sprintf<span class="br0">&#40;</span> __<span class="br0">&#40;</span>'Posts tagged with %s', 'simpletags'<span class="br0">&#41;</span>, $term_name <span class="br0">&#41;</span> <span class="br0">&#41;</span>.&quot;\&quot;&gt;$2&lt;/a&gt;$3&quot;;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // for efficiency only tokenize if forced to do so<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span> $must_tokenize <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
diff -uwdBrN simple-tags.orig/inc/inc.functions.php simple-tags/inc/inc.functions.php<br />
<span class="re3">--- simple-tags.orig/inc/inc.functions.php&nbsp; <span class="nu0">2010</span>-08-<span class="nu0">11</span> <span class="nu0">10</span>:<span class="nu0">37</span>:<span class="nu0">39.000000000</span> +0300</span><br />
<span class="re4">+++ simple-tags/inc/inc.functions.php &nbsp; <span class="nu0">2010</span>-09-<span class="nu0">13</span> 06:<span class="nu0">16</span>:<span class="nu0">05.000000000</span> +0300</span><br />
<span class="re6">@@ -<span class="nu0">4</span>,<span class="nu0">6</span> +<span class="nu0">4</span>,<span class="nu0">7</span> @@</span><br />
&nbsp; *<br />
&nbsp; */<br />
&nbsp;function SimpleTags_Install<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<span class="re8">+ &nbsp; register_uninstall_hook <span class="br0">&#40;</span>dirname<span class="br0">&#40;</span>__FILE__<span class="br0">&#41;</span> . '/simple-tags.php', 'SimpleTags_Uninstall' <span class="br0">&#41;</span>;</span><br />
&nbsp; &nbsp; $options_from_table = get_option<span class="br0">&#40;</span> STAGS_OPTIONS_NAME <span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; if <span class="br0">&#40;</span> $options_from_table == false <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; $options = <span class="br0">&#40;</span>array<span class="br0">&#41;</span> include<span class="br0">&#40;</span> dirname<span class="br0">&#40;</span>__FILE__<span class="br0">&#41;</span> . '/default.options.php' <span class="br0">&#41;</span>;<br />
diff -uwdBrN simple-tags.orig/simple-tags.php simple-tags/simple-tags.php<br />
<span class="re3">--- simple-tags.orig/simple-tags.php&nbsp; &nbsp; <span class="nu0">2010</span>-08-<span class="nu0">11</span> <span class="nu0">10</span>:<span class="nu0">37</span>:<span class="nu0">38.000000000</span> +0300</span><br />
<span class="re4">+++ simple-tags/simple-tags.php <span class="nu0">2010</span>-09-<span class="nu0">13</span> 06:<span class="nu0">34</span>:<span class="nu0">39.000000000</span> +0300</span><br />
<span class="re6">@@ -<span class="nu0">3</span>,<span class="nu0">7</span> +<span class="nu0">3</span>,<span class="nu0">7</span> @@</span><br />
&nbsp;Plugin Name: Simple Tags<br />
&nbsp;Plugin URI: http://redmine.beapi.fr/projects/show/simple-tags<br />
&nbsp;Description: Extended Tagging for WordPress 3.0 ! Suggested Tags, Mass edit tags, Autocompletion, Tag Cloud Widgets, Related Posts, Related Tags, etc!<br />
<span class="re7">-Version: 1.8</span><br />
<span class="re8">+Version: 1.8.1</span><br />
&nbsp;Author: Amaury BALMER<br />
&nbsp;Author URI: http://www.herewithme.fr<br />
&nbsp;Text Domain: simpletags<br />
<span class="re6">@@ -<span class="nu0">23</span>,<span class="nu0">6</span> +<span class="nu0">23</span>,<span class="nu0">7</span> @@</span><br />
&nbsp;Contributors:<br />
&nbsp;- Kevin Drouvin <span class="br0">&#40;</span>kevin.drouvin@gmail.com - http://inside-dev.net<span class="br0">&#41;</span><br />
&nbsp;- Martin Modler <span class="br0">&#40;</span>modler@webformatik.com - http://www.webformatik.com<span class="br0">&#41;</span><br />
<span class="re8">+- Vladimir Kolesnikov <span class="br0">&#40;</span>vladimir at extrememember dot com - http://blog.sjinks.pro<span class="br0">&#41;</span></span><br />
&nbsp;<br />
&nbsp;Todo:<br />
&nbsp; &nbsp; Both :<br />
<span class="re6">@@ -<span class="nu0">60</span>,<span class="nu0">7</span> +<span class="nu0">61</span>,<span class="nu0">6</span> @@</span><br />
&nbsp;<br />
&nbsp;// Activation, uninstall<br />
&nbsp;register_activation_hook<span class="br0">&#40;</span>__FILE__, 'SimpleTags_Install' &nbsp; <span class="br0">&#41;</span>;<br />
<span class="re7">-register_uninstall_hook <span class="br0">&#40;</span>__FILE__, 'SimpleTags_Uninstall' <span class="br0">&#41;</span>;</span><br />
&nbsp;<br />
&nbsp;// Init ST<br />
&nbsp;function simple_tags_init<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
        </div>
    </div>
</div>

<p>И zip-архив для тех, кто патчи не любит: <strong><a href="http://d.sjinks.pro/wordpress/simple-tags-1.8.1.zip" rel="nofollow">скачать исправленную версию плагина Simple Tags 1.8</a></strong>.</p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/patches/821-fixing-simple-tags-1-8/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/wordpress/patches/821-fixing-simple-tags-1-8/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
		<item>
		<title>Simple Tags 1.7.4.4: The New Bugs</title>
		<link>http://blog.sjinks.pro/wordpress/patches/782-simple-tags-1-7-4-4-the-new-bugs/</link>
		<comments>http://blog.sjinks.pro/wordpress/patches/782-simple-tags-1-7-4-4-the-new-bugs/#comments</comments>
		<pubDate>Tue, 23 Mar 2010 14:04:55 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Патчи]]></category>
		<category><![CDATA[Simple Tags]]></category>
		<category><![CDATA[utf8]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[ошибка]]></category>
		<category><![CDATA[патч]]></category>
		<category><![CDATA[плагин]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=782</guid>
		<description><![CDATA[Исправляем старые и новые ошибки Сегодня наконец-то появилось время обновить старые плагины; в их числе оказался и Simple Tags. Честно говоря, версия 1.7.4.4 меня разочаровала: автор сломал автоматические ссылки меток. Теперь они не работают даже для английского языка. Резюмируя: в данной версии нужно исправить: автоматические ссылки меток; поддержку многобайтовых символов в автоматических ссылках; вызов register_uninstall_hook() при [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/patches/782-simple-tags-1-7-4-4-the-new-bugs/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Исправляем старые и новые ошибки</em></h2>
<p>Сегодня наконец-то появилось время обновить старые плагины; в их числе оказался и <a href="http://blog.sjinks.pro/tag/simple-tags/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Simple Tags">Simple Tags</a>. Честно говоря, версия 1.7.4.4 меня разочаровала: автор сломал автоматические ссылки меток. Теперь они не работают даже для английского языка.</p>
<p>Резюмируя: в данной версии нужно исправить:</p>
<ul>
<li>автоматические ссылки меток;</li>
<li><a href="http://blog.sjinks.pro/wordpress/plugins/566-simpletags-166-and-auto-link-tags-in-russian/">поддержку многобайтовых символов в автоматических ссылках</a>;</li>
<li><a href="http://blog.sjinks.pro/wordpress/plugins/757-simple-tags-1-7-4-2/">вызов <code>register_uninstall_hook()</code> при каждом обращении к блогу</a>.</li>
</ul>
<p><span id="more-782"></span></p>
<p>Проблема с автоматическими ссылками возникла из-за невнимательности автора:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p7827">
        <div class="code php" id="p782code7">
&nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">randomArray</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">link_tags</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; <span class="co1">//...</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">// only continue if the database actually returned any links</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span> <span class="kw1">isset</span><span class="br0">&#40;</span><span class="re0">$link_tags</span><span class="br0">&#41;</span> <span class="sy0">&amp;&amp;</span> <span class="kw3">is_array</span><span class="br0">&#40;</span><span class="re0">$link_tags</span><span class="br0">&#41;</span> <span class="sy0">&amp;&amp;</span> <span class="kw3">count</span><span class="br0">&#40;</span><span class="re0">$link_tags</span><span class="br0">&#41;</span> <span class="sy0">&gt;</span> <span class="nu0">0</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span>
        </div>
    </div>
</div>

<p>Метод <code>randomArray()</code> теперь не возвращает массив (как это было в предыдущих версиях плагина), а изменяет тот массив, который передан ему в параметрах (<span class="codebox"><code class="php"><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">link_tags</span></code></span>). Но если раньше результат <span class="codebox"><code class="php"><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">randomArray</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">link_tags</span><span class="br0">&#41;</span></code></span> присваивался переменной <span class="codebox"><code class="php"><span class="re0">$link_tags</span></code></span>, то теперь эта переменная исчезла, и условие в <span class="codebox"><code class="php"><span class="kw1">if</span></code></span> теперь всегда ложно.</p>
<p><a href="http://blog.sjinks.pro/tag/patch/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  патч">Патч</a> для плагина (unified diff):</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p7828">
        <div class="code diff" id="p782code8">
diff -uwdBrN simple-tags/inc/client.php simple-tags.new/inc/client.php<br />
<span class="re3">--- simple-tags/inc/client.php&nbsp; <span class="nu0">2010</span>-03-<span class="nu0">23</span> <span class="nu0">14</span>:01:<span class="nu0">55.000000000</span> +0200</span><br />
<span class="re4">+++ simple-tags.new/inc/client.php&nbsp; <span class="nu0">2010</span>-03-<span class="nu0">23</span> <span class="nu0">15</span>:<span class="nu0">14</span>:<span class="nu0">40.000000000</span> +0200</span><br />
<span class="re6">@@ -<span class="nu0">122</span>,<span class="nu0">8</span> +<span class="nu0">122</span>,<span class="nu0">8</span> @@</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; // Shuffle array<br />
<span class="re7">- &nbsp; &nbsp; &nbsp; $this-&gt;randomArray<span class="br0">&#40;</span>$this-&gt;link_tags<span class="br0">&#41;</span>;</span><br />
<span class="re7">- &nbsp; &nbsp; &nbsp; </span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; $link_tags = $this-&gt;link_tags;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; $this-&gt;randomArray<span class="br0">&#40;</span>$link_tags<span class="br0">&#41;</span>;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; // HTML Rel <span class="br0">&#40;</span>tag/no-follow<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; $rel = $this-&gt;buildRel<span class="br0">&#40;</span> $this-&gt;options<span class="br0">&#91;</span>'no_follow'<span class="br0">&#93;</span> <span class="br0">&#41;</span>;<br />
<span class="re6">@@ -<span class="nu0">157</span>,<span class="nu0">8</span> +<span class="nu0">157</span>,<span class="nu0">9</span> @@</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $filtered = ''; // will filter text token by token<br />
<span class="re7">- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $match = &quot;/\b&quot; . preg_quote<span class="br0">&#40;</span>$term_name, &quot;/&quot;<span class="br0">&#41;</span> . &quot;\b/&quot;.$case;</span><br />
<span class="re7">- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $substitute = '&lt;a href=&quot;'.$term_link.'&quot; class=&quot;st_tag internal_tag&quot; '.$rel.' title=&quot;'. esc_attr<span class="br0">&#40;</span> sprintf<span class="br0">&#40;</span> __<span class="br0">&#40;</span>'Posts tagged with %s', 'simpletags'<span class="br0">&#41;</span>, $term_name <span class="br0">&#41;</span> <span class="br0">&#41;</span>.&quot;\&quot;&gt;$0&lt;/a&gt;&quot;;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $quoted = preg_quote<span class="br0">&#40;</span>$term_name, &quot;/&quot;<span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $match = '/<span class="br0">&#40;</span>\PL|\A<span class="br0">&#41;</span><span class="br0">&#40;</span>' . $quoted . '<span class="br0">&#41;</span><span class="br0">&#40;</span>\PL|\Z<span class="br0">&#41;</span>/u'.$case;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $substitute = '$1&lt;a href=&quot;'.$term_link.'&quot; class=&quot;st_tag internal_tag&quot; '.$rel.' title=&quot;'. esc_attr<span class="br0">&#40;</span> sprintf<span class="br0">&#40;</span> __<span class="br0">&#40;</span>'Posts tagged with %s', 'simpletags'<span class="br0">&#41;</span>, $term_name <span class="br0">&#41;</span> <span class="br0">&#41;</span>.&quot;\&quot;&gt;$2&lt;/a&gt;$3&quot;;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // for efficiency only tokenize if forced to do so<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span> $must_tokenize <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
diff -uwdBrN simple-tags/inc/inc.functions.php simple-tags.new/inc/inc.functions.php<br />
<span class="re3">--- simple-tags/inc/inc.functions.php &nbsp; <span class="nu0">2010</span>-03-<span class="nu0">23</span> <span class="nu0">14</span>:01:<span class="nu0">55.000000000</span> +0200</span><br />
<span class="re4">+++ simple-tags.new/inc/inc.functions.php &nbsp; <span class="nu0">2010</span>-03-<span class="nu0">23</span> <span class="nu0">15</span>:09:<span class="nu0">06.000000000</span> +0200</span><br />
<span class="re6">@@ -<span class="nu0">4</span>,<span class="nu0">6</span> +<span class="nu0">4</span>,<span class="nu0">7</span> @@</span><br />
&nbsp; *<br />
&nbsp; */<br />
&nbsp;function SimpleTags_Install<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<span class="re8">+ &nbsp; register_uninstall_hook <span class="br0">&#40;</span>dirname<span class="br0">&#40;</span>__FILE__<span class="br0">&#41;</span> . '/simple-tags.php', 'SimpleTags_Uninstall' <span class="br0">&#41;</span>;</span><br />
&nbsp; &nbsp; $options_from_table = get_option<span class="br0">&#40;</span> STAGS_OPTIONS_NAME <span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; if <span class="br0">&#40;</span> $options_from_table == false <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; $options = <span class="br0">&#40;</span>array<span class="br0">&#41;</span> include<span class="br0">&#40;</span> dirname<span class="br0">&#40;</span>__FILE__<span class="br0">&#41;</span> . '/default.options.php' <span class="br0">&#41;</span>;<br />
diff -uwdBrN simple-tags/simple-tags.php simple-tags.new/simple-tags.php<br />
<span class="re3">--- simple-tags/simple-tags.php <span class="nu0">2010</span>-03-<span class="nu0">23</span> <span class="nu0">14</span>:01:<span class="nu0">55.000000000</span> +0200</span><br />
<span class="re4">+++ simple-tags.new/simple-tags.php <span class="nu0">2010</span>-03-<span class="nu0">23</span> <span class="nu0">15</span>:07:<span class="nu0">42.000000000</span> +0200</span><br />
<span class="re6">@@ -<span class="nu0">3</span>,<span class="nu0">7</span> +<span class="nu0">3</span>,<span class="nu0">7</span> @@</span><br />
&nbsp;Plugin Name: Simple Tags<br />
&nbsp;Plugin URI: http://redmine.beapi.fr/projects/show/simple-tags<br />
&nbsp;Description: Extended Tagging for WordPress 2.8 and 2.9 ! Suggested Tags, Mass edit tags, Autocompletion, Tag Cloud Widgets, Related Posts, Related Tags, etc!<br />
<span class="re7">-Version: 1.7.4.4</span><br />
<span class="re8">+Version: 1.7.4.4.1</span><br />
&nbsp;Author: Amaury BALMER<br />
&nbsp;Author URI: http://www.herewithme.fr<br />
&nbsp;Text Domain: simpletags<br />
<span class="re6">@@ -<span class="nu0">23</span>,<span class="nu0">6</span> +<span class="nu0">23</span>,<span class="nu0">7</span> @@</span><br />
&nbsp;Contributors:<br />
&nbsp;- Kevin Drouvin <span class="br0">&#40;</span>kevin.drouvin@gmail.com - http://inside-dev.net<span class="br0">&#41;</span><br />
&nbsp;- Martin Modler <span class="br0">&#40;</span>modler@webformatik.com - http://www.webformatik.com<span class="br0">&#41;</span><br />
<span class="re8">+- Vladimir Kolesnikov &lt;vladimir at extrememember dot com&gt; - http://blog.sjinks.pro/</span><br />
&nbsp;<br />
&nbsp;Todo:<br />
&nbsp; &nbsp; Both :<br />
<span class="re6">@@ -<span class="nu0">55</span>,<span class="nu0">9</span> +<span class="nu0">56</span>,<span class="nu0">8</span> @@</span><br />
&nbsp;require<span class="br0">&#40;</span> STAGS_DIR . '/inc/tpl.functions.php'<span class="br0">&#41;</span>; // Templates functions<br />
&nbsp;require<span class="br0">&#40;</span> STAGS_DIR . '/inc/widgets.php'<span class="br0">&#41;</span>; &nbsp;&nbsp; &nbsp; // Widgets<br />
&nbsp;<br />
<span class="re7">-// Activation, uninstall</span><br />
<span class="re8">+// Activation</span><br />
&nbsp;register_activation_hook<span class="br0">&#40;</span>__FILE__, 'SimpleTags_Install' &nbsp; <span class="br0">&#41;</span>;<br />
<span class="re7">-register_uninstall_hook <span class="br0">&#40;</span>__FILE__, 'SimpleTags_Uninstall' <span class="br0">&#41;</span>;</span><br />
&nbsp;<br />
&nbsp;// Init ST<br />
&nbsp;function simple_tags_init<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
        </div>
    </div>
</div>

<p>Для тех, кто патчи не любит, есть исправленная версия плагина (из исходного архива также удалены скриншоты): <strong><a href="http://d.sjinks.pro/wordpress/simple-tags-1.7.4.4.1.zip">скачать Simple Tags 1.7.4.4.1</a></strong></p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/patches/782-simple-tags-1-7-4-4-the-new-bugs/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/wordpress/patches/782-simple-tags-1-7-4-4-the-new-bugs/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Simple Tags 1.7.4.2</title>
		<link>http://blog.sjinks.pro/wordpress/plugins/757-simple-tags-1-7-4-2/</link>
		<comments>http://blog.sjinks.pro/wordpress/plugins/757-simple-tags-1-7-4-2/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 10:27:37 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Плагины WordPress]]></category>
		<category><![CDATA[Simple Tags]]></category>
		<category><![CDATA[utf8]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[ошибка]]></category>
		<category><![CDATA[патч]]></category>
		<category><![CDATA[плагин]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=757</guid>
		<description><![CDATA[Недавно вышла очередная версия плагина Simple Tags. Проблема с UTF-8/многобайтными строками осталась (нужно бы написать автору ещё раз). Вдобавок появилась проблема с вызовом register_uninstall_hook() при каждой загрузки страницы (я исправлял аналогичную проблему с NextGen Gallery). Из плюсов: Simple Tags 1.7.4.2 нормально работает с WordPress 3.0. Исправленная версия плагина Simple Tags 1.7.4.2 (я убрал их исходного архива скриншоты — вряд ли [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/plugins/757-simple-tags-1-7-4-2/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<p>Недавно вышла очередная версия плагина <a href="http://wordpress.org/extend/plugins/simple-tags/">Simple Tags</a>. <a href="http://blog.sjinks.pro/wordpress/patches/372-simple-tags-auto-link-tags-in-russian/">Проблема с UTF-8/многобайтными строками</a> осталась (нужно бы написать автору ещё раз). Вдобавок появилась проблема с вызовом <code>register_uninstall_hook()</code> при каждой загрузки страницы (я исправлял <a href="http://blog.sjinks.pro/wordpress/patches/703-yet-another-nextgen-gallery-optimization/">аналогичную проблему</a> с NextGen Gallery).</p>
<p>Из плюсов: <a href="http://blog.sjinks.pro/tag/simple-tags/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Simple Tags">Simple Tags</a> 1.7.4.2 нормально работает с <a href="http://blog.sjinks.pro/tag/wordpress/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  WordPress">WordPress</a> 3.0.<span id="more-757"></span></p>
<p><strong><a href="http://d.sjinks.pro/wordpress/simple-tags.1.7.4.2.1.zip">Исправленная версия плагина Simple Tags 1.7.4.2</a></strong> (я убрал их исходного архива скриншоты — вряд ли кто их смотрит).</p>
<p>Патч:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p75710">
        <div class="code diff" id="p757code10">
diff -uwdBrN simple-tags.orig/inc/base.php simple-tags/inc/base.php<br />
<span class="re3">--- simple-tags.orig/inc/base.php &nbsp; <span class="nu0">2010</span>-02-02 <span class="nu0">22</span>:<span class="nu0">39</span>:<span class="nu0">08.000000000</span> +0200</span><br />
<span class="re4">+++ simple-tags/inc/base.php&nbsp; &nbsp; <span class="nu0">2010</span>-02-03 <span class="nu0">11</span>:<span class="nu0">26</span>:<span class="nu0">48.000000000</span> +0200</span><br />
<span class="re6">@@ -<span class="nu0">41</span>,<span class="nu0">6</span> +<span class="nu0">41</span>,<span class="nu0">7</span> @@</span><br />
&nbsp; &nbsp; &nbsp;*<br />
&nbsp; &nbsp; &nbsp;*/<br />
&nbsp; &nbsp; function installSimpleTags<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; register_uninstall_hook <span class="br0">&#40;</span>WP_PLUGIN_DIR . '/simple-tags/simple-tags.php', array<span class="br0">&#40;</span>'SimpleTagsBase', 'uninstall'<span class="br0">&#41;</span> <span class="br0">&#41;</span>;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; $options_from_table = get_option<span class="br0">&#40;</span> STAGS_OPTIONS_NAME <span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span> $options_from_table == false <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;resetToDefaultOptions<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
diff -uwdBrN simple-tags.orig/inc/client.php simple-tags/inc/client.php<br />
<span class="re3">--- simple-tags.orig/inc/client.php <span class="nu0">2010</span>-02-02 <span class="nu0">22</span>:<span class="nu0">39</span>:<span class="nu0">08.000000000</span> +0200</span><br />
<span class="re4">+++ simple-tags/inc/client.php&nbsp; <span class="nu0">2010</span>-02-03 <span class="nu0">11</span>:<span class="nu0">39</span>:<span class="nu0">18.000000000</span> +0200</span><br />
<span class="re6">@@ -<span class="nu0">141</span>,<span class="nu0">8</span> +<span class="nu0">141</span>,<span class="nu0">9</span> @@</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $filtered = ''; // will filter text token by token<br />
<span class="re7">- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $match = &quot;/\b&quot; . preg_quote<span class="br0">&#40;</span>$term_name, &quot;/&quot;<span class="br0">&#41;</span> . &quot;\b/&quot;.$case;</span><br />
<span class="re7">- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $substitute = '&lt;a href=&quot;'.$term_link.'&quot; class=&quot;st_tag internal_tag&quot; '.$rel.' title=&quot;'. esc_attr<span class="br0">&#40;</span> sprintf<span class="br0">&#40;</span> __<span class="br0">&#40;</span>'Posts tagged with %s', 'simpletags'<span class="br0">&#41;</span>, $term_name <span class="br0">&#41;</span> <span class="br0">&#41;</span>.&quot;\&quot;&gt;$0&lt;/a&gt;&quot;;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $quoted = preg_quote<span class="br0">&#40;</span>$term_name, &quot;/&quot;<span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $match = &quot;/<span class="br0">&#40;</span>\PL|\A<span class="br0">&#41;</span><span class="br0">&#40;</span>&quot; . preg_quote<span class="br0">&#40;</span>$term_name, &quot;/&quot;<span class="br0">&#41;</span> . &quot;<span class="br0">&#41;</span><span class="br0">&#40;</span>\PL|\Z<span class="br0">&#41;</span>/u&quot;.$case;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $substitute = '$1&lt;a href=&quot;'.$term_link.'&quot; class=&quot;st_tag internal_tag&quot; '.$rel.' title=&quot;'. attribute_escape<span class="br0">&#40;</span> sprintf<span class="br0">&#40;</span> __<span class="br0">&#40;</span>'Posts tagged with %s', 'simpletags'<span class="br0">&#41;</span>, $term_name <span class="br0">&#41;</span> <span class="br0">&#41;</span>.&quot;\&quot;&gt;$2&lt;/a&gt;$3&quot;;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // for efficiency only tokenize if forced to do so<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span> $must_tokenize <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
diff -uwdBrN simple-tags.orig/simple-tags.php simple-tags/simple-tags.php<br />
<span class="re3">--- simple-tags.orig/simple-tags.php&nbsp; &nbsp; <span class="nu0">2010</span>-02-02 <span class="nu0">22</span>:<span class="nu0">39</span>:<span class="nu0">08.000000000</span> +0200</span><br />
<span class="re4">+++ simple-tags/simple-tags.php <span class="nu0">2010</span>-02-03 <span class="nu0">11</span>:<span class="nu0">42</span>:<span class="nu0">14.000000000</span> +0200</span><br />
<span class="re6">@@ -<span class="nu0">3</span>,<span class="nu0">7</span> +<span class="nu0">3</span>,<span class="nu0">7</span> @@</span><br />
&nbsp;Plugin Name: Simple Tags<br />
&nbsp;Plugin URI: http://redmine.beapi.fr/projects/show/simple-tags<br />
&nbsp;Description: Extended Tagging for WordPress 2.8 and 2.9 ! Suggested Tags, Mass edit tags, Autocompletion, Tag Cloud Widgets, Related Posts, Related Tags, etc!<br />
<span class="re7">-Version: 1.7.4.2</span><br />
<span class="re8">+Version: 1.7.4.2.1</span><br />
&nbsp;Author: Amaury BALMER<br />
&nbsp;Author URI: http://www.herewithme.fr<br />
&nbsp;Text Domain: simpletags<br />
<span class="re6">@@ -<span class="nu0">23</span>,<span class="nu0">6</span> +<span class="nu0">23</span>,<span class="nu0">7</span> @@</span><br />
&nbsp;Contributors:<br />
&nbsp;- Kevin Drouvin <span class="br0">&#40;</span>kevin.drouvin@gmail.com - http://inside-dev.net<span class="br0">&#41;</span><br />
&nbsp;- Martin Modler <span class="br0">&#40;</span>modler@webformatik.com - http://www.webformatik.com<span class="br0">&#41;</span><br />
<span class="re8">+- Vladimir Kolesnikov &lt;vladimir at extrememember dot com&gt; - http://blog.sjinks.pro/</span><br />
&nbsp;<br />
&nbsp;Todo:<br />
&nbsp; &nbsp; Both :<br />
<span class="re6">@@ -<span class="nu0">53</span>,<span class="nu0">7</span> +<span class="nu0">54</span>,<span class="nu0">6</span> @@</span><br />
&nbsp;<br />
&nbsp;// Activation, uninstall<br />
&nbsp;register_activation_hook<span class="br0">&#40;</span>__FILE__, array<span class="br0">&#40;</span>'SimpleTagsBase', 'installSimpleTags'<span class="br0">&#41;</span> <span class="br0">&#41;</span>;<br />
<span class="re7">-register_uninstall_hook <span class="br0">&#40;</span>__FILE__, array<span class="br0">&#40;</span>'SimpleTagsBase', 'uninstall'<span class="br0">&#41;</span> <span class="br0">&#41;</span>;</span><br />
&nbsp;<br />
&nbsp;// Init ST<br />
&nbsp;function simple_tags_init<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
        </div>
    </div>
</div>

<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/plugins/757-simple-tags-1-7-4-2/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/wordpress/plugins/757-simple-tags-1-7-4-2/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Simple Tags 1.6.6 и автоматические ссылки меток на русском языке</title>
		<link>http://blog.sjinks.pro/wordpress/plugins/566-simpletags-166-and-auto-link-tags-in-russian/</link>
		<comments>http://blog.sjinks.pro/wordpress/plugins/566-simpletags-166-and-auto-link-tags-in-russian/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 02:22:35 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Патчи]]></category>
		<category><![CDATA[Плагины WordPress]]></category>
		<category><![CDATA[Simple Tags]]></category>
		<category><![CDATA[utf8]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[ошибка]]></category>
		<category><![CDATA[патч]]></category>
		<category><![CDATA[плагин]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=566</guid>
		<description><![CDATA[Время идёт, проблемы остаются… Полгода назад я рассказывал о том, что Simple Tags не умеет работать с многобайтовыми символами (коими, к слову, являются русские буквы в кодировке UTF-8). За это время вышло восемь или девять новых версий плагина, но проблема с поддержкой UTF-8 всё же осталась. Так сложилось, что именно сегодня я решил обновить плагин. [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/plugins/566-simpletags-166-and-auto-link-tags-in-russian/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Время идёт, проблемы остаются…</em></h2>
<p>Полгода назад я рассказывал о том, что <a href="http://blog.sjinks.pro/tag/simple-tags/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Simple Tags">Simple Tags</a> <a href="http://blog.sjinks.pro/wordpress/patches/372-simple-tags-auto-link-tags-in-russian/">не умеет работать с многобайтовыми символами</a> (коими, к слову, являются русские буквы в кодировке UTF-8). За это время вышло восемь или девять новых версий плагина, но проблема с поддержкой UTF-8 всё же осталась.</p>
<p>Так сложилось, что именно сегодня я решил обновить <a href="http://blog.sjinks.pro/tag/plugin/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  плагин">плагин</a>. Патчить код было лень, я надеялся, что у <a href="http://lecactus.ru/2007/10/07/851/">Lecactus&#8217;а</a> лежит пропатченная свежая версия. Увы, только 1.6.3.<span id="more-566"></span></p>
<p>Для тех, кто больше любит патчи (unified diff):</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p56613">
        <div class="code diff" id="p566code13">
diff -uwdBrN simple-tags/simple-tags.php simple-tags.new/simple-tags.php<br />
<span class="re3">--- simple-tags/simple-tags.php <span class="nu0">2009</span>-04-<span class="nu0">22</span> <span class="nu0">10</span>:<span class="nu0">22</span>:<span class="nu0">28.000000000</span> -0400</span><br />
<span class="re4">+++ simple-tags.new/simple-tags.php &nbsp; &nbsp; <span class="nu0">2009</span>-06-01 <span class="nu0">21</span>:<span class="nu0">50</span>:<span class="nu0">20.000000000</span> -0400</span><br />
<span class="re6">@@ -<span class="nu0">3</span>,<span class="nu0">7</span> +<span class="nu0">3</span>,<span class="nu0">7</span> @@</span><br />
&nbsp;Plugin Name: Simple Tags<br />
&nbsp;Plugin URI: http://wordpress.org/extend/plugins/simple-tags<br />
&nbsp;Description: Simple Tags : Extended Tagging for WordPress 2.3, 2.5, 2.6 and 2.7 ! Autocompletion, Suggested Tags, Tag Cloud Widgets, Related Posts, Mass edit tags !<br />
<span class="re7">-Version: 1.6.6</span><br />
<span class="re8">+Version: 1.6.6.1</span><br />
&nbsp;Author: Amaury BALMER<br />
&nbsp;Author URI: http://www.herewithme.fr<br />
<br />
<span class="re6">@@ -<span class="nu0">22</span>,<span class="nu0">6</span> +<span class="nu0">22</span>,<span class="nu0">7</span> @@</span><br />
&nbsp;Contributors:<br />
&nbsp;- Kevin Drouvin <span class="br0">&#40;</span>kevin.drouvin@gmail.com - http://inside-dev.net<span class="br0">&#41;</span><br />
&nbsp;- Martin Modler <span class="br0">&#40;</span>modler@webformatik.com - http://www.webformatik.com<span class="br0">&#41;</span><br />
<span class="re8">+- Vladimir Kolesnikov <span class="br0">&#40;</span>vladimir at extrememember dot com - http://blog.sjinks.pro<span class="br0">&#41;</span></span><br />
<br />
&nbsp;Todo:<br />
&nbsp; &nbsp; &nbsp; &nbsp; Admin<br />
<span class="re6">@@ -<span class="nu0">30</span>,<span class="nu0">25</span> +<span class="nu0">31</span>,<span class="nu0">6</span> @@</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; - Verifier la case du remplacement par les liens<br />
&nbsp;*/<br />
<br />
<span class="re7">-// Check version.</span><br />
<span class="re7">-global $wp_version;</span><br />
<span class="re7">-if <span class="br0">&#40;</span> strpos<span class="br0">&#40;</span>$wp_version, '2.7'<span class="br0">&#41;</span> !== false || strpos<span class="br0">&#40;</span>$wp_version, '<span class="nu0">2.8</span>'<span class="br0">&#41;</span> !== false &nbsp;<span class="br0">&#41;</span> <span class="br0">&#123;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; require<span class="br0">&#40;</span>dirname<span class="br0">&#40;</span>__FILE__<span class="br0">&#41;</span>.'/2.7/simple-tags.client.php'<span class="br0">&#41;</span>;<br />
<span class="re7">-<span class="br0">&#125;</span> elseif <span class="br0">&#40;</span> strpos<span class="br0">&#40;</span>$wp_version, '2.5'<span class="br0">&#41;</span> !== false || strpos<span class="br0">&#40;</span>$wp_version, '<span class="nu0">2.6</span>'<span class="br0">&#41;</span> !== false &nbsp;<span class="br0">&#41;</span> <span class="br0">&#123;</span></span><br />
<span class="re7">- &nbsp; &nbsp; &nbsp; require<span class="br0">&#40;</span>dirname<span class="br0">&#40;</span>__FILE__<span class="br0">&#41;</span>.'/2.5/simple-tags.client.php'<span class="br0">&#41;</span>;</span><br />
<span class="re7">-<span class="br0">&#125;</span> elseif <span class="br0">&#40;</span> strpos<span class="br0">&#40;</span>$wp_version, '<span class="nu0">2.3</span>'<span class="br0">&#41;</span> !== false <span class="br0">&#41;</span> <span class="br0">&#123;</span></span><br />
<span class="re7">- &nbsp; &nbsp; &nbsp; require<span class="br0">&#40;</span>dirname<span class="br0">&#40;</span>__FILE__<span class="br0">&#41;</span>.'/2.3/simple-tags.client.php'<span class="br0">&#41;</span>;</span><br />
<span class="re7">-<span class="br0">&#125;</span> elseif <span class="br0">&#40;</span> strpos<span class="br0">&#40;</span>$wp_version, '2.2'<span class="br0">&#41;</span> !== false || strpos<span class="br0">&#40;</span>$wp_version, '2.1'<span class="br0">&#41;</span> !== false || strpos<span class="br0">&#40;</span>$wp_version, '<span class="nu0">2.0</span>'<span class="br0">&#41;</span> !== false <span class="br0">&#41;</span> <span class="br0">&#123;</span></span><br />
<span class="re7">- &nbsp; &nbsp; &nbsp; add_action<span class="br0">&#40;</span>'admin_notices', 'simple_tagging_warning'<span class="br0">&#41;</span>;</span><br />
<span class="re7">-<span class="br0">&#125;</span> else <span class="br0">&#123;</span></span><br />
<span class="re7">- &nbsp; &nbsp; &nbsp; add_action<span class="br0">&#40;</span>'admin_notices', 'simple_tags_warning'<span class="br0">&#41;</span>;</span><br />
<span class="re7">-<span class="br0">&#125;</span></span><br />
<br />
<span class="re7">-function simple_tagging_warning<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span><br />
<span class="re7">- &nbsp; &nbsp; &nbsp; echo '&lt;div class=&quot;updated fade&quot;&gt;&lt;p&gt;&lt;strong&gt;'.__<span class="br0">&#40;</span>'Simple Tags can\'t work with this WordPress version !', 'simpletags'<span class="br0">&#41;</span>.'&lt;/strong&gt; '.sprintf<span class="br0">&#40;</span>__<span class="br0">&#40;</span>'You must use &lt;a href=&quot;%1$s&quot;&gt;Simple Tagging Plugin&lt;/a&gt; for it to work.', 'simpletags'<span class="br0">&#41;</span></span><br />
, 'http://wordpress.org/extend/plugins/simple-tagging-plugin/'<span class="br0">&#41;</span>.'&lt;/p&gt;&lt;/div&gt;';<br />
<span class="re7">-<span class="br0">&#125;</span></span><br />
<span class="re7">-</span><br />
<span class="re7">-function simple_tags_warning<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span><br />
<span class="re7">- &nbsp; &nbsp; &nbsp; echo '&lt;div class=&quot;updated fade&quot;&gt;&lt;p&gt;&lt;strong&gt;'.__<span class="br0">&#40;</span>'Simple Tags can\'t work with this WordPress version !', 'simpletags'<span class="br0">&#41;</span>.'&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;';</span><br />
<span class="re7">-<span class="br0">&#125;</span></span><br />
&nbsp;?&gt;<br />
<span class="kw1">\ No newline at end of file</span>
        </div>
    </div>
</div>

          
<div class="codebox">
    <div class="the_code" style="" id="p56614">
        <div class="code diff" id="p566code14">
diff -uwdBrN simple-tags/2.7/simple-tags.client.php simple-tags.new/2.7/simple-tags.client.php<br />
<span class="re3">--- simple-tags/<span class="nu0">2.7</span>/simple-tags.client.php &nbsp; &nbsp; &nbsp;<span class="nu0">2009</span>-04-<span class="nu0">22</span> <span class="nu0">10</span>:<span class="nu0">22</span>:<span class="nu0">28.000000000</span> -0400</span><br />
<span class="re4">+++ simple-tags.new/<span class="nu0">2.7</span>/simple-tags.client.php &nbsp;<span class="nu0">2009</span>-06-01 <span class="nu0">22</span>:02:<span class="nu0">04.000000000</span> -0400</span><br />
<span class="re6">@@ -<span class="nu0">1</span>,<span class="nu0">6</span> +<span class="nu0">1</span>,<span class="nu0">6</span> @@</span><br />
&nbsp;&lt;?php<br />
&nbsp;class SimpleTags <span class="br0">&#123;</span><br />
<span class="re7">- &nbsp; &nbsp; &nbsp; var $version = '1.6.6';</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; var $version = '1.6.6.1';</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; var $info;<br />
&nbsp; &nbsp; &nbsp; &nbsp; var $options;<br />
<span class="re6">@@ -<span class="nu0">274</span>,<span class="nu0">8</span> +<span class="nu0">274</span>,<span class="nu0">9</span> @@</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; foreach <span class="br0">&#40;</span> <span class="br0">&#40;</span>array<span class="br0">&#41;</span> $link_tags as $term_name =&gt; $term_link <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $filtered = &quot;&quot;; // will filter text token by token<br />
<span class="re7">- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $match = &quot;/\b&quot; . preg_quote<span class="br0">&#40;</span>$term_name, &quot;/&quot;<span class="br0">&#41;</span> . &quot;\b/&quot;.$case;</span><br />
<span class="re7">- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $substitute = '&lt;a href=&quot;'.$term_link.'&quot; class=&quot;st_tag internal_tag&quot; '.$rel.' title=&quot;'. attribute_escape<span class="br0">&#40;</span> sprintf<span class="br0">&#40;</span> __<span class="br0">&#40;</span>'Posts tagged with %s', 'simpletags'<span class="br0">&#41;</span>, $term_name <span class="br0">&#41;</span> <span class="br0">&#41;</span>.&quot;\&quot;&gt;$0&lt;/a&gt;&quot;;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $quoted = preg_quote<span class="br0">&#40;</span>$term_name, &quot;/&quot;<span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $match = &quot;/<span class="br0">&#40;</span>\PL|\A<span class="br0">&#41;</span><span class="br0">&#40;</span>&quot; . preg_quote<span class="br0">&#40;</span>$term_name, &quot;/&quot;<span class="br0">&#41;</span> . &quot;<span class="br0">&#41;</span><span class="br0">&#40;</span>\PL|\Z<span class="br0">&#41;</span>/u&quot;.$case;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $substitute = '$1&lt;a href=&quot;'.$term_link.'&quot; class=&quot;st_tag internal_tag&quot; '.$rel.' title=&quot;'. attribute_escape<span class="br0">&#40;</span> sprintf<span class="br0">&#40;</span> __<span class="br0">&#40;</span>'Posts tagged with %s', 'simpletags'<span class="br0">&#41;</span>, $term_name <span class="br0">&#41;</span> <span class="br0">&#41;</span>.&quot;\&quot;&gt;$2&lt;/a&gt;$3&quot;;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // for efficiency only tokenize if forced to do so<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span> $must_tokenize <span class="br0">&#41;</span> <span class="br0">&#123;</span>
        </div>
    </div>
</div>

<p>Для тех, кто предпочитает готовое: <strong><a href="http://static.sjinks.info/wp-content/uploads/2009/06/simple-tags-1.6.6.1.zip">скачать исправленную версию плагина Simple Tags 1.6.6 для WordPress</a></strong>.</p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/plugins/566-simpletags-166-and-auto-link-tags-in-russian/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/wordpress/plugins/566-simpletags-166-and-auto-link-tags-in-russian/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Simple Tags и автоматические ссылки меток на русском языке</title>
		<link>http://blog.sjinks.pro/wordpress/patches/372-simple-tags-auto-link-tags-in-russian/</link>
		<comments>http://blog.sjinks.pro/wordpress/patches/372-simple-tags-auto-link-tags-in-russian/#comments</comments>
		<pubDate>Sat, 22 Nov 2008 06:03:48 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Патчи]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Simple Tags]]></category>
		<category><![CDATA[utf8]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[ошибка]]></category>
		<category><![CDATA[патч]]></category>
		<category><![CDATA[плагин]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=372</guid>
		<description><![CDATA[Добавляем поддержку многобайтных символов в Simple Tags Сегодня у Lecacus&#8217;а на сайте наткнулся на упоминание одной нерешённой проблемы: У меня не работают автоматические ссылки меток в содержимом записи для меток на русском языке. Т.е. если есть метка «wordpress», то слово «wordpress» заменяется на ссылку http://myblog.net/tag/wordpress/. А вот если есть метка «спорт», то слово «спорт» ссылкой [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/patches/372-simple-tags-auto-link-tags-in-russian/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Добавляем поддержку многобайтных символов в <a href="http://blog.sjinks.pro/tag/simple-tags/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Simple Tags">Simple Tags</a></em></h2>
<p>Сегодня у Lecacus&#8217;а на <a href="http://lecactus.ru/2007/10/07/851/" rel="nofollow">сайте</a> наткнулся на упоминание одной нерешённой проблемы:</p>
<blockquote cite="http://lecactus.ru/2007/10/07/851/#comment-20848">У меня не работают автоматические ссылки меток в содержимом записи для меток на русском языке. Т.е. если есть метка «<a href="http://blog.sjinks.pro/tag/wordpress/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  WordPress">wordpress</a>», то слово «<a href="http://blog.sjinks.pro/tag/wordpress/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  WordPress">wordpress</a>» заменяется на ссылку <span class="codebox"><code class="text">http://myblog.net/tag/wordpress/</code></span>. А вот если есть метка «спорт», то слово «спорт» ссылкой не заменяется. Подскажите как сделать так, чтобы <a href="http://blog.sjinks.pro/tag/plugin/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  плагин">плагин</a> работал и с русскими метками.</blockquote>
<p>А так как сегодня мне уже пришлось иметь дело с Simple Tags, я решил разобраться, в чём же дело и исправить досадный баг.<span id="more-372"></span></p>
<p>Сам по себе код плагина довольно-таки простой (что определённо делает честь автору), но регулярные выражения, использованные в коде, требуют некоторых знаний и навыков.</p>
<p>За создание автоматических меток отвечает метод <span class="codebox"><code class="php">SimpleTags<span class="sy0">::</span><span class="me2">autoLinkTags</span></code></span>, основу которого составляют регулярные выражения из <a href="http://blog.sjinks.pro/tag/php/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  PHP">PHP</a> Markdown Михеля Фортина (Michel Fortin); замечу, что эти регулярные выражения исправлять не пришлось (хотя, по-хорошему, их можно упростить).</p>
<p>Сама <a href="http://blog.sjinks.pro/tag/bug/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  ошибка">ошибка</a> находится в данной строке:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p37219">
        <div class="code php" id="p372code19">
<ol class="php" style="font-family:monospace;" start="265"><li class="li1"><div class="de1"><span class="re0">$match</span> <span class="sy0">=</span> <span class="st0">&quot;/\b&quot;</span> <span class="sy0">.</span> <span class="kw3">preg_quote</span><span class="br0">&#40;</span><span class="re0">$term_name</span><span class="sy0">,</span> <span class="st0">&quot;/&quot;</span><span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st0">&quot;\b/&quot;</span><span class="sy0">.</span><span class="re0">$case</span><span class="sy0">;</span></div></li>
</ol>
        </div>
    </div>
</div>

<p>Очень многие &laquo;Забугорные&raquo; программисты (а также наши, работающие на иностранцев), привыкли считать, что нет иной кодовой таблицы, нежели iso-8859-x, что, собственно, и выражается в регулярном выражении.</p>
<p>Те, кто знаком с PCRE, знают, что \b&nbsp;&mdash;&nbsp;это граница слова. Но в локали по умолчанию русские буквы не попадают в категорию &laquo;буквы&raquo;; как следствие, регулярное выражение <code>/\bспорт\b/</code> не сработает.</p>
<p>Решение проблемы состоит в использовании <a href="http://www.php.net/manual/en/reference.pcre.pattern.syntax.php">классов символов Unicode</a> (то, что знают, увы, очень немногие программисты).</p>
<p>Фактически, нужно было проверять на нахождение не-буквы перед меткой и после метки; например, так:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p37220">
        <div class="code php" id="p372code20">
<span class="re0">$match</span> <span class="sy0">=</span> <span class="st0">&quot;/(\PL)(&quot;</span> <span class="sy0">.</span> <span class="kw3">preg_quote</span><span class="br0">&#40;</span><span class="re0">$term_name</span><span class="sy0">,</span> <span class="st0">&quot;/&quot;</span><span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st0">&quot;)(\PL)/u&quot;</span><span class="sy0">.</span><span class="re0">$case</span><span class="sy0">;</span>
        </div>
    </div>
</div>

<p>Уже лучше, но работает не всегда. В частности, не будет работать, если метка идет сразу после открывающего тэга, либо сразу перед закрывающим тэгом (не сработает условие (\PL) в начале или в конце). Правильным решением будет следующее:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p37221">
        <div class="code php" id="p372code21">
<span class="re0">$match</span> <span class="sy0">=</span> <span class="st0">&quot;/(\PL|\A)(&quot;</span> <span class="sy0">.</span> <span class="kw3">preg_quote</span><span class="br0">&#40;</span><span class="re0">$term_name</span><span class="sy0">,</span> <span class="st0">&quot;/&quot;</span><span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st0">&quot;)(\PL|\Z)/u&quot;</span><span class="sy0">.</span><span class="re0">$case</span><span class="sy0">;</span>
        </div>
    </div>
</div>

<p>Полное решение выглядит сложнее, но суть должна быть понятна.</p>
<p>Ниже приведён <a href="http://blog.sjinks.pro/tag/patch/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  патч">патч</a> в формате unified diff:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p37222">
        <div class="code diff" id="p372code22">
--- simple-tags.client.php.orig 2008-11-22 06:15:22.000000000 +0200 <br />
<span class="re4">+++ simple-tags.client.php &nbsp; &nbsp; &nbsp;<span class="nu0">2008</span>-<span class="nu0">11</span>-<span class="nu0">22</span> 07:<span class="nu0">53</span>:<span class="nu0">15.000000000</span> +0200 </span><br />
<span class="re6">@@ -<span class="nu0">262</span>,<span class="nu0">8</span> +<span class="nu0">262</span>,<span class="nu0">9</span> @@ </span><br />
&nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; foreach <span class="br0">&#40;</span> <span class="br0">&#40;</span>array<span class="br0">&#41;</span> $this-&gt;link_tags as $term_name =&gt; $term_link <span class="br0">&#41;</span> <span class="br0">&#123;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $filtered = &quot;&quot;; // will filter text token by token <br />
<span class="re7">- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $match = &quot;/\b&quot; . preg_quote<span class="br0">&#40;</span>$term_name, &quot;/&quot;<span class="br0">&#41;</span> . &quot;\b/&quot;.$case; </span><br />
<span class="re7">- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $substitute = '&lt;a href=&quot;'.$term_link.'&quot; class=&quot;st_tag internal_tag&quot; '.$rel.' title=&quot;'. attribute_escape<span class="br0">&#40;</span> sprintf<span class="br0">&#40;</span> __<span class="br0">&#40;</span>'Posts tagged with %s', 'simpletags'<span class="br0">&#41;</span>, $term_name <span class="br0">&#41;</span> <span class="br0">&#41;</span>.&quot;\&quot;&gt;$0&lt;/a&gt;&quot;;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $quoted = preg_quote<span class="br0">&#40;</span>$term_name, &quot;/&quot;<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $match = &quot;/<span class="br0">&#40;</span>\PL|\A<span class="br0">&#41;</span><span class="br0">&#40;</span>&quot; . preg_quote<span class="br0">&#40;</span>$term_name, &quot;/&quot;<span class="br0">&#41;</span> . &quot;<span class="br0">&#41;</span><span class="br0">&#40;</span>\PL|\Z<span class="br0">&#41;</span>/u&quot;.$case;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $substitute = '$1&lt;a href=&quot;'.$term_link.'&quot; class=&quot;st_tag internal_tag&quot; '.$rel.' title=&quot;'. attribute_escape<span class="br0">&#40;</span> sprintf<span class="br0">&#40;</span> __<span class="br0">&#40;</span>'Posts tagged with %s', 'simpletags'<span class="br0">&#41;</span>, $term_name <span class="br0">&#41;</span> <span class="br0">&#41;</span>.&quot;\&quot;&gt;$2&lt;/a&gt;$3&quot;;<br />
&nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // for efficiency only tokenize if forced to do so <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span> $must_tokenize <span class="br0">&#41;</span> <span class="br0">&#123;</span>
        </div>
    </div>
</div>

<p><strong>Внимание:</strong> патч будет работать только если PHP собран с поддержкой UTF-8, если кодировка блога установлена в UTF-8 и соединение с базой данных тоже использует кодировку UTF-8. В принципе, ничего запредельного, <em>нормальная</em> инсталляция WordPress будет отвечать этим требованиям.</p>
<p>Те, кто не хотят заморачиваться с патчем, могут скачать пропатченную версию (но она требует как минимум WordPress&nbsp;2.5).</p>
<p><strong><a href="http://d.sjinks.pro/wordpress/simple-tags-1.5.7.1.zip">Скачать Simple Tags 1.5.7.1</a>.</strong></p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/patches/372-simple-tags-auto-link-tags-in-russian/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/wordpress/patches/372-simple-tags-auto-link-tags-in-russian/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>WordPress 2.7 и Simple Tags</title>
		<link>http://blog.sjinks.pro/wordpress/patches/370-wordpress-27-and-simple-tags/</link>
		<comments>http://blog.sjinks.pro/wordpress/patches/370-wordpress-27-and-simple-tags/#comments</comments>
		<pubDate>Sat, 22 Nov 2008 04:14:51 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Патчи]]></category>
		<category><![CDATA[Simple Tags]]></category>
		<category><![CDATA[utf8]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[ошибка]]></category>
		<category><![CDATA[патч]]></category>
		<category><![CDATA[плагин]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=370</guid>
		<description><![CDATA[Как заставить Simple Tags работать в WordPress 2.7 Simple Tags — это плагин для WordPress, предназначенный для управления тэгами (или, как их еще называют, метками). Достоинств у плагина очень много (полный список — на официальной странице плагина), работает просто на «ура». Но, как обычно, в бочке мёда есть ложка дёгтя: плагин отказывается работать в WordPress 2.7. Причём довольно-таки по-глупому: номера [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/patches/370-wordpress-27-and-simple-tags/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Как заставить <a href="http://blog.sjinks.pro/tag/simple-tags/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Simple Tags">Simple Tags</a> работать в <a href="http://blog.sjinks.pro/tag/wordpress/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  WordPress">WordPress</a> 2.7</em></h2>
<p><a href="http://www.herewithme.fr/wordpress-plugins/simple-tags" rel="nofollow"><strong>Simple Tags</strong></a> — это <a href="http://blog.sjinks.pro/tag/plugin/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  плагин">плагин</a> для WordPress, предназначенный для управления тэгами (или, как их еще называют, метками). Достоинств у плагина очень много (полный список — на <a href="http://wordpress.org/extend/plugins/simple-tags/">официальной странице плагина</a>), работает просто на «ура».</p>
<p>Но, как обычно, в бочке мёда есть ложка дёгтя: плагин отказывается работать в WordPress 2.7. Причём довольно-таки по-глупому: номера версий, с которыми плагин <em>хочет</em> работать, жёстко зашиты в коде. Если в список добавить 2.7, плагин будет работать.<span id="more-370"></span></p>
<p>По традиции, для таких случаев привожу <a href="http://blog.sjinks.pro/tag/patch/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  патч">патч</a> (в формате unified diff):</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p37024">
        <div class="code diff" id="p370code24">
--- simple-tags.php.orig &nbsp; &nbsp; &nbsp; &nbsp;2008-05-05 18:37:58.000000000 +0300 <br />
<span class="re4">+++ simple-tags.php &nbsp; &nbsp; <span class="nu0">2008</span>-<span class="nu0">11</span>-<span class="nu0">22</span> 05:<span class="nu0">27</span>:<span class="nu0">50.000000000</span> +0200 </span><br />
<span class="re6">@@ -<span class="nu0">32</span>,<span class="nu0">7</span> +<span class="nu0">32</span>,<span class="nu0">7</span> @@ </span><br />
&nbsp; <br />
&nbsp;// Check version. <br />
&nbsp;global $wp_version; <br />
<span class="re7">-if <span class="br0">&#40;</span> strpos<span class="br0">&#40;</span>$wp_version, '2.5'<span class="br0">&#41;</span> !== false || strpos<span class="br0">&#40;</span>$wp_version, '<span class="nu0">2.6</span>'<span class="br0">&#41;</span> !== false &nbsp;<span class="br0">&#41;</span> <span class="br0">&#123;</span> </span><br />
<span class="re8">+if <span class="br0">&#40;</span> strpos<span class="br0">&#40;</span>$wp_version, '2.5'<span class="br0">&#41;</span> !== false || strpos<span class="br0">&#40;</span>$wp_version, '2.6'<span class="br0">&#41;</span> !== false || strpos<span class="br0">&#40;</span>$wp_version, '<span class="nu0">2.7</span>'<span class="br0">&#41;</span> !== false <span class="br0">&#41;</span> <span class="br0">&#123;</span> </span><br />
&nbsp; &nbsp; &nbsp; &nbsp; require<span class="br0">&#40;</span>dirname<span class="br0">&#40;</span>__FILE__<span class="br0">&#41;</span>.'/2.5/simple-tags.client.php'<span class="br0">&#41;</span>; <br />
&nbsp;<span class="br0">&#125;</span> elseif <span class="br0">&#40;</span> strpos<span class="br0">&#40;</span>$wp_version, '2.3'<span class="br0">&#41;</span> !== false <span class="br0">&#41;</span> <span class="br0">&#123;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; require<span class="br0">&#40;</span>dirname<span class="br0">&#40;</span>__FILE__<span class="br0">&#41;</span>.'/2.3/simple-tags.client.php'<span class="br0">&#41;</span>;
        </div>
    </div>
</div>

<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/patches/370-wordpress-27-and-simple-tags/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/wordpress/patches/370-wordpress-27-and-simple-tags/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

