<?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>WordPress &#8212; Nikita Spivak</title>
	<atom:link href="https://nikita-sp.com.ua/tag/wordpress/feed" rel="self" type="application/rss+xml" />
	<link>https://nikita-sp.com.ua</link>
	<description>web developer&#039;s portfolio</description>
	<lastBuildDate>Fri, 11 Mar 2016 00:07:13 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>
	<item>
		<title>Локализация сайтов WordPress</title>
		<link>https://nikita-sp.com.ua/2016/03/lokalizatsiya-saytov-wordpress.html</link>
					<comments>https://nikita-sp.com.ua/2016/03/lokalizatsiya-saytov-wordpress.html#disqus_thread</comments>
		
		<dc:creator><![CDATA[Nikita_Sp]]></dc:creator>
		<pubDate>Fri, 11 Mar 2016 08:00:54 +0000</pubDate>
				<category><![CDATA[Создание сайтов]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">http://nikita-sp.com.ua/?p=3136</guid>

					<description><![CDATA[Все больше и больше владельцев стараются иметь несколько языковых версий сайта. Это касается как интернет магазинов, так и других сайтов. В большинстве случаев, создаются либо копии страниц для разных языков сайта, или создается несколько записей на разных языках для одной страницы. Для WordPress одним из решений для создания мультиязычного сайта является плагин PolyLang. Однако данный плагин не решает задачу [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Все больше и больше владельцев стараются иметь <strong>несколько языковых версий сайта</strong>. Это касается как интернет магазинов, так и других сайтов. В большинстве случаев, создаются либо копии страниц для разных языков сайта, или создается несколько записей на разных языках для одной страницы.</p>
<p><img fetchpriority="high" decoding="async" width="800" height="400" itemprop="image" class="aligncenter size-full wp-image-3152" src="http://nikita-sp.com.ua/wp-content/uploads/2016/03/lokalizacija-sajtov-wordpress-mutijazi4nie-sajti.jpg" alt="Локализация шаблонов WordPress" srcset="https://nikita-sp.com.ua/wp-content/uploads/2016/03/lokalizacija-sajtov-wordpress-mutijazi4nie-sajti.jpg 800w, https://nikita-sp.com.ua/wp-content/uploads/2016/03/lokalizacija-sajtov-wordpress-mutijazi4nie-sajti-600x300.jpg 600w, https://nikita-sp.com.ua/wp-content/uploads/2016/03/lokalizacija-sajtov-wordpress-mutijazi4nie-sajti-768x384.jpg 768w, https://nikita-sp.com.ua/wp-content/uploads/2016/03/lokalizacija-sajtov-wordpress-mutijazi4nie-sajti-150x75.jpg 150w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p>Для WordPress одним из решений для <strong>создания мультиязычного сайта</strong> является плагин PolyLang. Однако данный плагин не решает задачу локализации надписей/полей в шаблонах WordPress которые не являются полями страниц или записей, которые заполняются в административной части.<span id="more-3136"></span></p>
<h2>Знакомьтесь *.po и *.mo</h2>
<p>Уверен что большинство разработчиков сталкивались с <strong>файлами с расширением *.po и *.mo</strong> &#8212; именно эти файлы и позволяют локализовать строки вашего сайта очень простым путем. Они содержат в себе инструкции в формате &#171;ключ = значение&#187;, где ключ &#8212; идентификатор строки, а значение &#8212; ее перевод.</p>
<p>Если вы с ними не знакомы, то можете открыть папку wp-content/languages, или папку с языками вашей темы, которая может находится в папке с самой темой и познакомиться с ними поближе, открыв их, например, NotePad или любым другим текстовым редактором.</p>
<p><strong><span style="color: #ff0000;">Обратите внимание:</span></strong> имя каждого файла состоит из названия плагина или темы (или любой другой идентификационной информации), а также кода языка, перевод которого содержит данный файл локализации. Таким образом для каждого языка создается по одному файлу *.po и *.mo.</p>
<p>Если вы откроете *.mo файл при помощи текстового редактора, то вы наверняка увидите абракадабру и ничего не поймете, ведь это и есть скомпилированный языковый файл для системы, который генерируется из файла *.po. Если проводить аналогию с редактированием изображений, то *.psd = *.po, а *.jpg = *.mo.</p>
<p>Файл *.po имеет уже более понятную структуру и можно разобраться в нем. Если разобрать данный файл, то вы увидите что строки идут парами &#171;ключ-значение&#187;, о чем мы и говорили в начале статьи. Выглядит это примерно так:</p>
<pre class="brush: plain; title: Код:; notranslate">
#: views/start.php:59
msgid &quot;Sign up with a different email address&quot;
msgstr &quot;Войти с другим адресом электронной почты&quot;
</pre>
<p>Как видите символ &#171;<strong>#</strong>&#171;, как и в многих C-подобных языках программирования, обозначает комментарий, в котором в данном случае указан путь к файлу в котором была обнаружена строка с &#171;<strong>msgid</strong>&#187; (message ID &#8212; идентификатор сообщения). Далее следует значение для данного ключа с указанием &#171;<strong>msgstr</strong>&#187; (message string &#8212; строка сообщения), которую необходимо вывести в случае если в шаблоне встретится данный идентификатор.</p>
<p>Но согласитесь, как бы не была проста данная конструкция, не каждый пользователь, который является переводчиком будет сидеть и писать строки для локализации шаблонов или плагинов, и были разработаны специальные программные продукты, позволяющие быстро и удобно создавать такие вот файлы. Но к ним мы вернемся позже.</p>
<h2>Локализуем шаблон WordPress</h2>
<p>Для того чтобы включить в шаблоне поддержку локализации, нам сперва необходимо добавить в файл functions.php нашей темы следующую строку:</p>
<pre class="brush: php; title: Код:; notranslate">load_theme_textdomain('your_translation_ID', 'path_to_mo_files');</pre>
<p>где <em>your_translation_ID</em> &#8212; это идентификатор вашего перевода (можно занести название темы или плагина например), он будет использоваться далее при вызове строки перевода. А <em>path_to_mo_files</em> &#8212; естественно путь к вашим файлам локализации (*.mo и *.po).</p>
<p><span style="color: #808080;">По идее: в случае использования стандартной папки для переводов (т.к. параметр <em>path_to_mo_files</em> является необязательным) <em>your_translation_ID</em> используется как идентификатор файла, т.к. там расположены переводы разных плагинов и тем. То есть файл должен иметь имя <em>your_translation_ID</em>-en_GB.mo, например для стандартной темы файл называет так: twentysixteen-en_GB.mo.</span></p>
<p><span style="color: #ff0000;"><strong>Обратите внимание:</strong></span> по-умолчанию файлы хранятся в папке <em>wp-content/languages</em> и далее либо в папке <em>themes</em> или <em>plugins</em>. Также путь к файлам указывается БЕЗ слеша в конце. Для того чтобы указать путь к языкам, которые находятся в папке с темой можно использовать следующую конструкцию:</p>
<pre class="brush: php; title: Код:; notranslate">load_theme_textdomain('your_translation_ID', get_template_directory().'/languages');</pre>
<p>Естественно, если файл локализации содержит пару ключ-значение, то в шаблоне WordPress или любом другом файле, который мы собираемся локализовать, должен быть вызов строки по соответствующему ключу. При работе с шаблонами WordPress, вы наверное уже сталкивались с конструкциями вида:</p>
<pre class="brush: php; title: Код:; notranslate">_e(&quot;404 error&quot;, &quot;your_translation_ID&quot;);</pre>
<p>или</p>
<pre class="brush: php; title: Код:; notranslate">__(&quot;404 error&quot;, &quot;your_translation_ID&quot;);</pre>
<p>Данные строки и являются местами вызова локализационных файлов. Эти функции отличаются лишь тем, что одна (<strong>_e()</strong>) выводит строку на экран (выполняется функция php &#171;echo&#187;), а другая (<strong>__()</strong>) просто возвращает локализованую строку. Данные функции принимают два параметра: идентификатор строки (по которому будет идти поиск соответствующего <strong>msgid</strong>) и идентификатор перевода, откуда будет браться данная строка.</p>
<p>Теперь нам необходимо &#171;пройтись&#187; по всем файлам нашей темы или плагина и заменить все строки на подобные конструкции. После этого мы будем их парсить (просматривать программным обеспечением) и переводить строки, создавая файлы *.po и *.mo.</p>
<h2>Создаем файл локализации *.po и *.mo</h2>
<p>Для <strong>работы с файлами локализации шаблона на WordPress *.po *.mo</strong> понадобится программа <a href="https://poedit.net/" target="_blank" data-wpel-link="external" rel="nofollow external noopener noreferrer" class="ext-link wpel-icon-right">Poedit<span class="wpel-icon wpel-image wpel-icon-6"></span></a>, которая позволит работать с файлами переводов (*.po) и генерировать непосредственно файл, который использует WordPress (*.mo). Для примера, я создам файл test.php, который будет содержать два примера строк: с переменными и обычную, а идентификатором выступит ключ &#171;nikita-spivak&#187;.</p>
<pre class="brush: php; title: Код:; notranslate">
&lt;p&gt;Тут может быть любой текст или верстка&lt;p&gt;
&lt;?php _e(&quot;This text will be shown&quot;, &quot;nikita-spivak&quot;); ?&gt;
&lt;p&gt;Также он может быть тут&lt;/p&gt;
&lt;p&gt;&lt;?php printf(__('See full lesson %s here %s', 'nikita-spivak'), '&lt;a href=&quot;http://nikita-sp.com.ua&quot;&gt;', '&lt;/a&gt;'); ?&gt;
или тут. Где угодно!&lt;/p&gt;;
</pre>
<p>Теперь откроем программу Poedit и создадим новый файл (Файл &#8212; создать). Указываем язык, на который мы будем переводить строки, в нашем случае русский, и приступаем к настройке парсера. Для этого переходим во вкладку Каталог &#8212; Свойства. Заполняем всю информацию (по желанию) на первой вкладке &#171;Свойства перевода&#187;, переходим к последней вкладке &#171;Ключевые слова исходных файлов&#187; и добавляем ключевые слова для парсера (__ и _e). Сохраняем файл в нужной нам директории шаблона или плагина.</p>

<a href="https://nikita-sp.com.ua/2016/03/lokalizatsiya-saytov-wordpress.html/1-sozdaem-novij-perevod" data-wpel-link="internal"><img decoding="async" width="119" height="96" src="https://nikita-sp.com.ua/wp-content/uploads/2016/03/1.sozdaem-novij-perevod.jpg" class="attachment-thumbnail size-thumbnail" alt="Локализация WordPress с помощью Poedit - создаем новый перевод" srcset="https://nikita-sp.com.ua/wp-content/uploads/2016/03/1.sozdaem-novij-perevod.jpg 1274w, https://nikita-sp.com.ua/wp-content/uploads/2016/03/1.sozdaem-novij-perevod-600x486.jpg 600w, https://nikita-sp.com.ua/wp-content/uploads/2016/03/1.sozdaem-novij-perevod-768x622.jpg 768w, https://nikita-sp.com.ua/wp-content/uploads/2016/03/1.sozdaem-novij-perevod-960x777.jpg 960w, https://nikita-sp.com.ua/wp-content/uploads/2016/03/1.sozdaem-novij-perevod-150x121.jpg 150w" sizes="(max-width: 119px) 100vw, 119px" /></a>
<a href="https://nikita-sp.com.ua/2016/03/lokalizatsiya-saytov-wordpress.html/2-svojstva-novij-perevod" data-wpel-link="internal"><img decoding="async" width="128" height="94" src="https://nikita-sp.com.ua/wp-content/uploads/2016/03/2.svojstva-novij-perevod.jpg" class="attachment-thumbnail size-thumbnail" alt="Локализация WordPress с помощью Poedit - свойства нового перевода" srcset="https://nikita-sp.com.ua/wp-content/uploads/2016/03/2.svojstva-novij-perevod.jpg 731w, https://nikita-sp.com.ua/wp-content/uploads/2016/03/2.svojstva-novij-perevod-600x442.jpg 600w, https://nikita-sp.com.ua/wp-content/uploads/2016/03/2.svojstva-novij-perevod-150x111.jpg 150w" sizes="(max-width: 128px) 100vw, 128px" /></a>
<a href="https://nikita-sp.com.ua/2016/03/lokalizatsiya-saytov-wordpress.html/3-klu4evie-slova-novij-perevod" data-wpel-link="internal"><img loading="lazy" decoding="async" width="128" height="94" src="https://nikita-sp.com.ua/wp-content/uploads/2016/03/3.klu4evie-slova-novij-perevod.jpg" class="attachment-thumbnail size-thumbnail" alt="Локализация WordPress с помощью Poedit - ключевые слова" srcset="https://nikita-sp.com.ua/wp-content/uploads/2016/03/3.klu4evie-slova-novij-perevod.jpg 731w, https://nikita-sp.com.ua/wp-content/uploads/2016/03/3.klu4evie-slova-novij-perevod-600x442.jpg 600w, https://nikita-sp.com.ua/wp-content/uploads/2016/03/3.klu4evie-slova-novij-perevod-150x111.jpg 150w" sizes="auto, (max-width: 128px) 100vw, 128px" /></a>

<p>После того как файл был успешно сохранен, переходим к настройке путей к файлам, которые необходимо просканировать на наличие строк для перевода. Переходим во вкладку Каталог &#8212; Свойства и открываем вторую вкладку (посередине) &#171;папки с исходными файлами&#187;.  На данной вкладке расположены два списка которые нам необходимо заполнить:</p>
<ul>
<li>папки которые включены в поиск;</li>
<li>исключенные папки, например, папки с css, js или sass файлами.</li>
</ul>
<p>Используя кнопки добавления, редактирования и удаления элементов в списке добавляем нужные папки, после чего нажимаем &#171;ОК&#187; и нажимаем на кнопку &#171;Обновить&#187;. Когда редактор скажет что нужно сохранить файл &#8212; соглашаемся и сохраняем файл. После сканирования папок вы увидите найденные в ваших файлах строки для перевода. Теперь остается их только перевести и снова сохранить в файл.</p>

<a href="https://nikita-sp.com.ua/2016/03/lokalizatsiya-saytov-wordpress.html/4-papka-s-ishodnimi-failami-novij-perevod" data-wpel-link="internal"><img loading="lazy" decoding="async" width="128" height="94" src="https://nikita-sp.com.ua/wp-content/uploads/2016/03/4.papka-s-ishodnimi-failami-novij-perevod.jpg" class="attachment-thumbnail size-thumbnail" alt="Локализация WordPress с помощью Poedit - папки с исходными файлами" srcset="https://nikita-sp.com.ua/wp-content/uploads/2016/03/4.papka-s-ishodnimi-failami-novij-perevod.jpg 731w, https://nikita-sp.com.ua/wp-content/uploads/2016/03/4.papka-s-ishodnimi-failami-novij-perevod-600x442.jpg 600w, https://nikita-sp.com.ua/wp-content/uploads/2016/03/4.papka-s-ishodnimi-failami-novij-perevod-150x111.jpg 150w" sizes="auto, (max-width: 128px) 100vw, 128px" /></a>
<a href="https://nikita-sp.com.ua/2016/03/lokalizatsiya-saytov-wordpress.html/5-obnovlenie-strok-poisk-po-failam" data-wpel-link="internal"><img loading="lazy" decoding="async" width="118" height="96" src="https://nikita-sp.com.ua/wp-content/uploads/2016/03/5.obnovlenie-strok-poisk-po-failam.jpg" class="attachment-thumbnail size-thumbnail" alt="Локализация WordPress с помощью Poedit - обновление строк - поиск по файлам" srcset="https://nikita-sp.com.ua/wp-content/uploads/2016/03/5.obnovlenie-strok-poisk-po-failam.jpg 1273w, https://nikita-sp.com.ua/wp-content/uploads/2016/03/5.obnovlenie-strok-poisk-po-failam-600x486.jpg 600w, https://nikita-sp.com.ua/wp-content/uploads/2016/03/5.obnovlenie-strok-poisk-po-failam-768x623.jpg 768w, https://nikita-sp.com.ua/wp-content/uploads/2016/03/5.obnovlenie-strok-poisk-po-failam-960x778.jpg 960w, https://nikita-sp.com.ua/wp-content/uploads/2016/03/5.obnovlenie-strok-poisk-po-failam-150x122.jpg 150w" sizes="auto, (max-width: 118px) 100vw, 118px" /></a>
<a href="https://nikita-sp.com.ua/2016/03/lokalizatsiya-saytov-wordpress.html/6-resultat-obnovlenia" data-wpel-link="internal"><img loading="lazy" decoding="async" width="118" height="96" src="https://nikita-sp.com.ua/wp-content/uploads/2016/03/6.resultat-obnovlenia.jpg" class="attachment-thumbnail size-thumbnail" alt="Локализация WordPress с помощью Poedit - обновление строк - результат обновления" srcset="https://nikita-sp.com.ua/wp-content/uploads/2016/03/6.resultat-obnovlenia.jpg 1273w, https://nikita-sp.com.ua/wp-content/uploads/2016/03/6.resultat-obnovlenia-600x486.jpg 600w, https://nikita-sp.com.ua/wp-content/uploads/2016/03/6.resultat-obnovlenia-768x623.jpg 768w, https://nikita-sp.com.ua/wp-content/uploads/2016/03/6.resultat-obnovlenia-960x778.jpg 960w, https://nikita-sp.com.ua/wp-content/uploads/2016/03/6.resultat-obnovlenia-150x122.jpg 150w" sizes="auto, (max-width: 118px) 100vw, 118px" /></a>
<a href="https://nikita-sp.com.ua/2016/03/lokalizatsiya-saytov-wordpress.html/7-pereveli-vse-stroki" data-wpel-link="internal"><img loading="lazy" decoding="async" width="118" height="96" src="https://nikita-sp.com.ua/wp-content/uploads/2016/03/7.pereveli-vse-stroki.jpg" class="attachment-thumbnail size-thumbnail" alt="Локализация WordPress с помощью Poedit - обновление строк - перевели строки" srcset="https://nikita-sp.com.ua/wp-content/uploads/2016/03/7.pereveli-vse-stroki.jpg 1273w, https://nikita-sp.com.ua/wp-content/uploads/2016/03/7.pereveli-vse-stroki-600x486.jpg 600w, https://nikita-sp.com.ua/wp-content/uploads/2016/03/7.pereveli-vse-stroki-768x623.jpg 768w, https://nikita-sp.com.ua/wp-content/uploads/2016/03/7.pereveli-vse-stroki-960x778.jpg 960w, https://nikita-sp.com.ua/wp-content/uploads/2016/03/7.pereveli-vse-stroki-150x122.jpg 150w" sizes="auto, (max-width: 118px) 100vw, 118px" /></a>
<a href="https://nikita-sp.com.ua/2016/03/lokalizatsiya-saytov-wordpress.html/8-faili-po-i-mo" data-wpel-link="internal"><img loading="lazy" decoding="async" width="128" height="29" src="https://nikita-sp.com.ua/wp-content/uploads/2016/03/8.faili-po-i-mo.jpg" class="attachment-thumbnail size-thumbnail" alt="Локализация WordPress с помощью Poedit - обновление строк - файлы po и mo были созданы" srcset="https://nikita-sp.com.ua/wp-content/uploads/2016/03/8.faili-po-i-mo.jpg 495w, https://nikita-sp.com.ua/wp-content/uploads/2016/03/8.faili-po-i-mo-150x34.jpg 150w" sizes="auto, (max-width: 128px) 100vw, 128px" /></a>

<p>После сохранения файлов вы увидите, что в папке куда вы сохранили *.po файл будет сгенерирован также и файл с расширением *.mo. В случае если файл находится в папке с темой или плагином, название файла должно содержать только код языка, перевод которого содержится в файле, если же файл расположен в общей папке wp-content/languages то нужно перед кодом файла указать идентификатор перевода.</p>
<p>Если вам необходимо добавить новую строку в вашу тему или плагин, достаточно просто добавить ее в исходные файлы, открыть файл локализации *.po при помощи Poedit и нажать на кнопку &#171;Обновить&#187;. Обратите внимание что структура папок должна оставаться той же! Если вы переместили файл(ы) &#8212; укажите новый путь в свойствах перевода.</p>
<h2>Итог</h2>
<p>Вот таким простым и быстрым способом мы можем <strong>перевести любой шаблон или сайт на WordPress</strong>. Для этого требуется всего лишь данная инструкция и бесплатная программка Poedit. Данная статья будет полезна как разработчикам, так и администраторам сайтов, т.к. они смогут управлять/изменять переводы строк на своем сайте при помощи программы Poedit.</p>
<p>Не забывайте ставить лайки или оценку голосованием звездами, чтобы показать насколько была полезна данная статья. Если возникли вопросы &#8212; пишите в комментариях. <img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://nikita-sp.com.ua/2016/03/lokalizatsiya-saytov-wordpress.html/feed</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Используем шаблон в плагине отзывов на сайте WP Customer Reviews</title>
		<link>https://nikita-sp.com.ua/2015/12/ispolzuem-shablon-plagine-otzyivov-na-sayte-wp-customer-reviews.html</link>
					<comments>https://nikita-sp.com.ua/2015/12/ispolzuem-shablon-plagine-otzyivov-na-sayte-wp-customer-reviews.html#disqus_thread</comments>
		
		<dc:creator><![CDATA[Nikita_Sp]]></dc:creator>
		<pubDate>Fri, 04 Dec 2015 08:15:55 +0000</pubDate>
				<category><![CDATA[Плагины и модули]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[модули и плагины]]></category>
		<guid isPermaLink="false">http://nikita-sp.com.ua/?p=2928</guid>

					<description><![CDATA[При создании сайта, разработчики не редко сталкиваются с задачей создания отдельной страницы для отзывов о компании или продукте. Учитывая невысокую популярность такого функционала, бесплатных модулей, реализующих отдельную страницу с отзывами, не много, и если вы создаете сайт на CMS WordPress, то скорей всего вы придете к плагину WP Customer Reviews. Данный плагин является частично бесплатным &#8212; [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>При <strong>создании сайта</strong>, разработчики не редко сталкиваются с задачей <strong>создания отдельной страницы для отзывов</strong> о компании или продукте. Учитывая невысокую популярность такого функционала, бесплатных модулей, реализующих отдельную страницу с отзывами, не много, и если вы <strong>создаете сайт на CMS WordPress</strong>, то скорей всего вы придете к <strong>плагину WP Customer Reviews</strong>.</p>
<p><a href="http://nikita-sp.com.ua/wp-content/uploads/2015/11/wp-customer-reviews.jpg" rel="lightbox[2928]" data-wpel-link="internal"><img loading="lazy" decoding="async" width="600" height="205" itemprop="image" class="aligncenter size-medium wp-image-2940" src="http://nikita-sp.com.ua/wp-content/uploads/2015/11/wp-customer-reviews-600x205.jpg" alt="Плагин отзывов на сайт WP Customer Reviews" srcset="https://nikita-sp.com.ua/wp-content/uploads/2015/11/wp-customer-reviews-600x205.jpg 600w, https://nikita-sp.com.ua/wp-content/uploads/2015/11/wp-customer-reviews-960x327.jpg 960w, https://nikita-sp.com.ua/wp-content/uploads/2015/11/wp-customer-reviews-150x51.jpg 150w, https://nikita-sp.com.ua/wp-content/uploads/2015/11/wp-customer-reviews.jpg 985w" sizes="auto, (max-width: 600px) 100vw, 600px" /></a></p>
<p>Данный плагин является частично бесплатным &#8212; вы можете приобрести Premium версию, которая даст вам больше возможностей, среди прочих будет возможность <strong>использования шаблонов</strong>. Однако, ваш покорный слуга, нашел способ <strong>изменять шаблон вывода отзывов плагина WP Customer Reviews без приобретения лицензии</strong>.<span id="more-2928"></span></p>
<p>Начнем, пожалуй, с того, что я не являюсь сторонником пиратства и с уважением отношусь к чужому труду, однако, по моему скромному мнению, уж если ты решился распространять модуль бесплатно &#8212; то дай возможность настроить его вид! Обрежь функционал, запрети добавлять дополнительные поля к отзывам, да что угодно, но дай возможность настроить вывод соответственно дизайну сайта.</p>
<p><span style="color: #ff0000;">Данная статья является ознакомительной и я настоятельно рекомендую приобретать лицензии на Premium версии <strong>плагина WP Customer Reviews</strong>.</span></p>
<p>Итак, вышло <strong>обновление плагина WP Customer Reviews</strong> и в новой (3.x) версии почему-то внезапно настройка внешнего вида попала под Premium лицензию, хотя в предыдущих версиях 2.x настроить вывод отзывов данного плагина было можно, изменяя файлы в директории самого дополнения (<em>wp-content/plugins/wp-customer-reviews</em>).</p>
<h2>Шаблон WP Customer Reviews 3.x</h2>
<p>Чтобы изменить вид отзывов в плагине WP Cusomer Reviews 3.x, придется модифицировать и исполнимые файлы модуля, чтобы заставить его использовать шаблоны в соответствующей папке <em>wp-content/plugins/wp-customer-reviews/include/templates</em>. Сами шаблоны для бесплатной лицензии хранятся в базе данных в таблице <strong><em>wp_options</em></strong> с ключом <strong><em>option_name = wpcr3_options</em></strong>, и выглядят как показано на рис. 1. Но хранение и редактирование шаблона в БД, в моем понимании, крайняя степень мазохизма.</p>
<p><a href="http://nikita-sp.com.ua/wp-content/uploads/2015/11/wp-customer-reviews-settings-in-wp_options-table.jpg" rel="lightbox[2928]" data-wpel-link="internal"><img loading="lazy" decoding="async" width="600" height="378" itemprop="image" class="aligncenter size-medium wp-image-2963" src="http://nikita-sp.com.ua/wp-content/uploads/2015/11/wp-customer-reviews-settings-in-wp_options-table-600x378.jpg" alt="Шаблон WP Customer Reviews в настройках в таблице wp_options" srcset="https://nikita-sp.com.ua/wp-content/uploads/2015/11/wp-customer-reviews-settings-in-wp_options-table-600x378.jpg 600w, https://nikita-sp.com.ua/wp-content/uploads/2015/11/wp-customer-reviews-settings-in-wp_options-table-960x605.jpg 960w, https://nikita-sp.com.ua/wp-content/uploads/2015/11/wp-customer-reviews-settings-in-wp_options-table-150x95.jpg 150w, https://nikita-sp.com.ua/wp-content/uploads/2015/11/wp-customer-reviews-settings-in-wp_options-table.jpg 1444w" sizes="auto, (max-width: 600px) 100vw, 600px" /></a></p>
<p>CSS стили также генерируются из базы данных. Также, обратите внимание, что при каждом обновлении вам необходимо будет повторять процедуру, т.к. файлы шаблонов будут перезаписаны, а CSS файлы сгенерированы заново! Поэтому рекомендую стили указывать в вашем основном CSS файле, и сделать бекап модифицированного модуля.</p>
<p>В связи с этим я решил разобраться, как же все-таки работает данный механизм, и оказалось все предельно просто: в плагине используется шаблонизатор именуемый Goatee, который и подставляет все переменные в HTML, который передается в виде аргумента функции.</p>
<pre class="brush: php; title: Код:; notranslate">wpcr_Goatee::fill($this-&gt;options['templates']['frontend_review_item'], $data)</pre>
<p>Таким образом, в функцию передается HTML шаблон из базы данных, а также данные из массива <em>$data</em>. Наша же с вами задача просто заменить источник HTML кода с базы данных на файл шаблона.</p>
<h2>Используем шаблон WP Customer Reviews</h2>
<p>Для того чтобы использовать непосредственно файлы шаблонов, которые расположены в директории самого плагина в папке include/templates, нам необходимо установить источник HTML кода, передаваемого в функцию <em><strong>wpcr_Goatee::fill</strong></em> на эти файлы. Для этого ищем строчки, содержащие следующий код:</p>
<pre class="brush: php; title: Код:; notranslate">wpcr_Goatee::fill($this-&gt;options['templates']</pre>
<p>Таких строчек мы должны найти 9 штук. И каждую из них необходимо модифицировать путем замены переменной <strong><em>$this-&gt;options[&#8216;templates&#8217;][&#8216;TEMPLATE_NAME&#8217;]</em></strong> на <strong><em>file_get_contents($this-&gt;getplugindir() . &#8216;include/templates/TEMPLATE_NAME.html&#8217;)</em></strong>. Таким образом из строчки:</p>
<pre class="brush: php; title: Код:; notranslate">wpcr_Goatee::fill($this-&gt;options['templates']['frontend_review_pagination'], $pagination);</pre>
<p>мы получаем:</p>
<pre class="brush: php; title: Код:; notranslate">wpcr_Goatee::fill(file_get_contents($this-&gt;getplugindir() . 'include/templates/frontend_review_pagination.html'), $pagination);</pre>
<p>И так далее все девять строчек, где встречается <em><strong>wpcr_Goatee::fill($this-&gt;options[&#8216;templates&#8217;]</strong></em>. Таким образом мы заменяем HTML из базы данных HTML-кодом из файлов. Также вы можете использовать любой другой файл, который вам удобно &#8212; вы можете вынести эти файлы в папку вашей темы WordPress и хранить их там, чтобы предотвратить из перезапись.</p>
<h2>Итог</h2>
<p>Теперь вы можете редактировать HTML-код в файлах, хранящихся в папке шаблонов <em>include/templates</em> и внешний вид ваших отзывов будет изменен согласно вашим правкам. Но не забудьте, что данная модификация будет работать до следующего обновления плагина WP Customer Reviews, когда файлы перезапишутся (а карета превратится обратно в тыкву <img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> )!</p>
<p>Вот таким простым способом вы можете настроить вид отзывов на WordPress сайте, использующем плагин WP Customer Reviews. Лично я считаю что такая возможность как изменение внешнего вида плагина не должна попадать под список &#171;привилегированных функций&#187; для Premium лицензии, поэтому собственно и решил поделиться этой маленькой инструкцией. А что думаете вы по этому поводу?</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nikita-sp.com.ua/2015/12/ispolzuem-shablon-plagine-otzyivov-na-sayte-wp-customer-reviews.html/feed</wfw:commentRss>
			<slash:comments>11</slash:comments>
		
		
			</item>
		<item>
		<title>Скрыть весь контент страницы OnePress Social Locker</title>
		<link>https://nikita-sp.com.ua/2015/11/skryit-ves-kontent-stranitsyi-onepress-social-locker.html</link>
					<comments>https://nikita-sp.com.ua/2015/11/skryit-ves-kontent-stranitsyi-onepress-social-locker.html#disqus_thread</comments>
		
		<dc:creator><![CDATA[Nikita_Sp]]></dc:creator>
		<pubDate>Mon, 09 Nov 2015 18:00:49 +0000</pubDate>
				<category><![CDATA[Статьи о php]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[интересно]]></category>
		<guid isPermaLink="false">http://nikita-sp.com.ua/?p=2788</guid>

					<description><![CDATA[Несколько дней назад я уже рассказывал о социальных блокировщиках контента, для чего они нужны и в чем их преимущества и недостатки. Сегодня я хочу поделиться одним скромным решением для сайтов на WordPress, на которых все-таки установлен бесплатный плагин социального блокировщика контента OnePress Social Locker. Данный плагин очень удобный и имеет достаточно настроек, но к сожалению, в нем отсутствует [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Несколько дней назад я уже рассказывал <a href="http://nikita-sp.com.ua/2015/11/blokirovat-kontent-sayta-cherez-sotsialnyie-seti.html" data-wpel-link="internal">о социальных блокировщиках контента</a>, для чего они нужны и в чем их преимущества и недостатки. Сегодня я хочу поделиться одним скромным решением для сайтов на <strong>WordPress</strong>, на которых все-таки установлен бесплатный плагин социального блокировщика контента <strong>OnePress Social Locker</strong>.</p>
<p><a href="http://nikita-sp.com.ua/wp-content/uploads/2015/11/one-press-social-locker.jpg" rel="lightbox[2788]" data-wpel-link="internal"><img loading="lazy" decoding="async" width="960" height="321" itemprop="image" class="aligncenter size-large wp-image-2810" src="http://nikita-sp.com.ua/wp-content/uploads/2015/11/one-press-social-locker-960x321.jpg" alt="One Press Social Locker" srcset="https://nikita-sp.com.ua/wp-content/uploads/2015/11/one-press-social-locker-960x321.jpg 960w, https://nikita-sp.com.ua/wp-content/uploads/2015/11/one-press-social-locker-600x201.jpg 600w, https://nikita-sp.com.ua/wp-content/uploads/2015/11/one-press-social-locker-150x50.jpg 150w, https://nikita-sp.com.ua/wp-content/uploads/2015/11/one-press-social-locker.jpg 983w" sizes="auto, (max-width: 960px) 100vw, 960px" /></a></p>
<p>Данный плагин очень удобный и имеет достаточно настроек, но к сожалению, в нем отсутствует опция блокирования всего контента страницы/статьи, о чем и пойдет речь.<span id="more-2788"></span></p>
<p><strong>OnePress Social Locker</strong> &#8212; это один из популярных <span style="text-decoration: underline;">бесплатных</span> (<em>если не единственный бесплатный</em>) социальных локеров контента для WordPress. Он позволяет блокировать определенный контент на странице при помощи shortcode (шорткодов/тегов, см. изображение). Вы можете создать несколько типов блокировки (текст, оформление блокирующего блока) и использовать для разных кусков контента. Например:</p>
<ol>
<li>Чтобы скачать с сайта &#8212; создадим блокировщик с текстом &#171;Ссылка скрыта, подпишитесь на группу чтобы скачать&#187; и ссылка на группу;</li>
<li>Чтобы просмотреть отдельную часть статьи &#8212; создадим блокировщик с текстом &#171;Контент защищен, поставьте лайк чтобы увидеть&#187; и кнопочки для лайков;</li>
</ol>
<p><a href="http://nikita-sp.com.ua/wp-content/uploads/2015/11/one-press-social-locker-2.png" rel="lightbox[2788]" data-wpel-link="internal"><img loading="lazy" decoding="async" width="530" height="315" itemprop="image" class="aligncenter size-full wp-image-2809" src="http://nikita-sp.com.ua/wp-content/uploads/2015/11/one-press-social-locker-2.png" alt="Создаем блокировщик используя One Press Social Locker для WordPress" srcset="https://nikita-sp.com.ua/wp-content/uploads/2015/11/one-press-social-locker-2.png 530w, https://nikita-sp.com.ua/wp-content/uploads/2015/11/one-press-social-locker-2-150x89.png 150w" sizes="auto, (max-width: 530px) 100vw, 530px" /></a></p>
<p><a href="http://nikita-sp.com.ua/wp-content/uploads/2015/11/one-press-social-locker-1.png" rel="lightbox[2788]" data-wpel-link="internal"><img loading="lazy" decoding="async" width="530" height="650" itemprop="image" class="aligncenter size-full wp-image-2808" src="http://nikita-sp.com.ua/wp-content/uploads/2015/11/one-press-social-locker-1.png" alt="Обворачиваем контент в шорткод используя One Press Social Locker для WordPress" srcset="https://nikita-sp.com.ua/wp-content/uploads/2015/11/one-press-social-locker-1.png 530w, https://nikita-sp.com.ua/wp-content/uploads/2015/11/one-press-social-locker-1-122x150.png 122w" sizes="auto, (max-width: 530px) 100vw, 530px" /></a>Также, плагин позволяет автоматически закрыть нужный контент в уже существующих записях: вы можете закрыть весь контент или только часть статьи, используя следующие правила:</p>
<ul>
<li>количество абзацев после которых дальнейший контент будет заблокирован;</li>
<li>скрывать контент после тега &#171;Далее&#187; (&lt;!&#8212; more &#8212;&gt;);</li>
</ul>
<p>и еще множество других. Но! Если мы скроем контент таким образом, то при необходимости убрать блокировку необходимо будет перелопатить потом вручную все записи, удаляя шорткод. Чтобы не прибегать к такому неудобному способу, было разработано следующее решение: заменить в файле <em>single.php</em> стандартный вывод контента на следующий код:</p>
<pre class="brush: php; title: Код:; notranslate">	 	 
$content = get_the_content();
$content = apply_filters('the_content', $content);
echo do_shortcode('[sociallocker]'.$content.'[/sociallocker]');
</pre>
<p>Таким образом весь контент нашей статьи будет обернут в shortcode блокировщика и его можно будет, спустя некоторое время, безболезненно и быстро убрать, при этом не редактируя все записи на вашем сайте.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nikita-sp.com.ua/2015/11/skryit-ves-kontent-stranitsyi-onepress-social-locker.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Как создать шаблон (тему) WordPress</title>
		<link>https://nikita-sp.com.ua/2015/02/kak-sozdat-shablon-temu-wordpress.html</link>
					<comments>https://nikita-sp.com.ua/2015/02/kak-sozdat-shablon-temu-wordpress.html#disqus_thread</comments>
		
		<dc:creator><![CDATA[Nikita_Sp]]></dc:creator>
		<pubDate>Sat, 07 Feb 2015 09:00:34 +0000</pubDate>
				<category><![CDATA[Создание сайтов]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[вопросы]]></category>
		<category><![CDATA[создание сайтов]]></category>
		<guid isPermaLink="false">http://nikita-sp.com.ua/?p=2007</guid>

					<description><![CDATA[По отчетам статистики переходов с поисковых систем, некоторые посетители попадают на мой блог в поисках информации как создать шаблон WordPress, и в продолжение серии статей на тему &#171;Создание сайта на WordPress&#171;, я решил написать данную статью, которая, надеюсь, поможет вам при создании сайта на WordPress, разработать правильную структуру вашей темы WordPress. Создание темы для WordPress&#8217;a достаточно [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>По отчетам статистики переходов с поисковых систем, некоторые посетители попадают на мой блог в поисках информации как <strong>создать шаблон WordPress</strong>, и в продолжение серии статей на тему &#171;<strong>Создание сайта на WordPress</strong>&#171;, я решил написать данную статью, которая, надеюсь, поможет вам при создании сайта на WordPress, разработать правильную структуру вашей темы WordPress.</p>
<p><img loading="lazy" decoding="async" width="600" height="240" itemprop="image" class="aligncenter size-full wp-image-2063" src="http://nikita-sp.com.ua/wp-content/uploads/2015/03/wordpress-themes.png" alt="Как создать шаблон (тему) WordPress" srcset="https://nikita-sp.com.ua/wp-content/uploads/2015/03/wordpress-themes.png 600w, https://nikita-sp.com.ua/wp-content/uploads/2015/03/wordpress-themes-150x60.png 150w" sizes="auto, (max-width: 600px) 100vw, 600px" /></p>
<p>Создание темы для WordPress&#8217;a достаточно простая задача, ведь принцип работы WordPress достаточно простой и ясный: присутствуют сущности (post и page), и соответственно циклы для вывода ленты постов. Дальше &#8212; дело вашей фантазии. И я никогда не понимал людей, которые используют чужие шаблоны и имеют много неудобств с этим, ведь проще сделать самому!<span id="more-2007"></span></p>
<h2>Структура и основные файлы шаблона</h2>
<p>Пожалуй для начала, необходимо понять какова структура шаблона для WordPress и я рекомендую начать знакомство с ней с предыдущей статьи о <a title="Создание сайтов на  WordPress: иерархия шаблонов" href="http://nikita-sp.com.ua/2014/12/sozdanie-saytov-na-wordpress-ierarhiya-shablon.html" target="_blank" data-wpel-link="internal">иерархии шаблонов WordPress</a>, это позволит вам получить основы разработки шаблона под WordPress.</p>
<p>Как видно на схеме, представленной в предыдущей статье, существует 7 основных типов вывода контента:</p>
<ol>
<li>страница архива;</li>
<li>одиночная запись;</li>
<li>главная страница;</li>
<li>главная страница блога;</li>
<li>всплывающие комментарии;</li>
<li>страница 404 ошибки;</li>
<li>страница поиска.</li>
</ol>
<p>Все эти типы страниц могут иметь свой вывод (шаблон) согласно <a title="Создание сайтов на  WordPress: иерархия шаблонов" href="http://nikita-sp.com.ua/2014/12/sozdanie-saytov-na-wordpress-ierarhiya-shablon.html" target="_blank" data-wpel-link="internal">иерархии шаблонов WordPress</a>, и основным файлом (шаблоном) темы является файл index.php, к которому будет произведено обращение, в случае отсутствия иных файлов в теме, или будет использован стандартный вывод (шаблон): если к примеру у вас нет в файлах темы шаблона для вывода комментариев (comments.php), то будет использован шаблон по-умолчанию, встроенный в WordPress.</p>
<p>Каждый шаблон в WordPress имеет свое название, описание, имя автора, версию и иные параметры, которые выводятся в административной части и указываются во втором по значению файле <em>style.css</em>, который, если не ошибаюсь, автоматически подключается при его наличии в папке с темой.</p>
<p>В этом файле вы можете указать данные о шаблоне, информацию о цветах, преобладающих в теме, написать имя автора, разработчика и т.д. Как прописать такие данные в файле style.css и как это будет выглядеть представлены ниже:</p>
<p><a href="http://nikita-sp.com.ua/wp-content/uploads/2015/03/wp-theme-nikita-sp.jpg" rel="lightbox[2007]" data-wpel-link="internal"><img loading="lazy" decoding="async" width="600" height="315" itemprop="image" class="aligncenter size-medium wp-image-2066" src="http://nikita-sp.com.ua/wp-content/uploads/2015/03/wp-theme-nikita-sp-600x315.jpg" alt="Вид темы Nikita_Sp под WordPress Администратор" srcset="https://nikita-sp.com.ua/wp-content/uploads/2015/03/wp-theme-nikita-sp-600x315.jpg 600w, https://nikita-sp.com.ua/wp-content/uploads/2015/03/wp-theme-nikita-sp-960x505.jpg 960w, https://nikita-sp.com.ua/wp-content/uploads/2015/03/wp-theme-nikita-sp-150x79.jpg 150w, https://nikita-sp.com.ua/wp-content/uploads/2015/03/wp-theme-nikita-sp.jpg 1684w" sizes="auto, (max-width: 600px) 100vw, 600px" /></a></p>
<pre class="brush: css; title: Код:; notranslate">/*

Theme Name: Nikita_Sp Blog
Theme URI: http://nikita-sp.com.ua/
Description: Nikita_Sp Blog Theme
Author: Nikita_Sp
Author URI: http://nikita-sp.com.ua
*/</pre>
<p>Как видно на изображении, в моих данных не указана версия шаблона, и выводится только надпись &#171;версия&#187;. Также я не писал описание и прочие данные, которые вы можете добавить к данным темы, т.к. они мне не особо нужны. Ниже представлен полный список данных, которые вы можете использовать при описании темы:</p>
<pre class="brush: css; title: Код:; notranslate">/*

Theme Name: Имя вашего шаблона
Theme URI: http://адрес-где-можно-ознакомиться.com/скачать-тему.html
Author: Собственно Автор
Author URI: http://адрес-автора.com
Description: Тут описание.
Version: 1.0
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: black, brown, orange, tan, white, yellow, light, one-column, two-columns, right-sidebar, flexible-width, custom-header, custom-menu, editor-style, featured-images, microformats, post-formats, rtl-language-support, sticky-post, translation-ready
Text Domain: twentythirteen

This theme, like WordPress, is licensed under the GPL.
Use it to make something cool, have fun, and share what you've learned with others.

*/</pre>
<p>Таким образом, имея минимум два файла index.php и style.css, мы можем смело заявить о созданном WordPress шаблоне. Однако на этом мы не можем останавливаться, т.к. нам нужен очень красивый шаблон, который будет хоть как-то кастомизирован под нас.</p>
<h2>Второстепенные файлы WordPress шаблона</h2>
<p>Следующим этапом необходимо выделить следующие блоки нашей темы:</p>
<ul>
<li>comments.php</li>
<li>comments-popup.php</li>
<li>footer.php</li>
<li>header.php</li>
<li>sidebar.php</li>
</ul>
<p>Разбор начнем, как и положено с нашей &#171;шапки&#187;, т.е. с файла <em>header.php</em>. В данном файле вы создаете &#171;шапку&#187; сайта, т.е. начинаете свой документ. У данного файла есть определенные &#171;правила хорошего тона&#187;:</p>
<ul>
<li>Открывающий тег <tt>&lt;html&gt;</tt> должен содержать вызов функции <tt>language_attributes()</tt>.</li>
<li>Тег кодировки <tt>&lt;meta&gt;</tt> должен находится перед остальными тегами, включая тег <tt>&lt;title&gt;</tt>.</li>
<li>Вызывайте функцию <tt>bloginfo</tt><tt>()</tt> чтобы вывести <tt>&lt;meta&gt;</tt> теги кодировки и описаний.</li>
<li>Используйте <tt>wp_title()</tt> чтобы установить заголовок <tt>&lt;title&gt;</tt>.</li>
<li>Вызывайте <tt>get_stylesheet_uri()</tt> чтобы подключить файл style.css текущей темы.</li>
<li>Добавьте вызов <tt>wp_head()</tt> перед закрывающимся тегом <tt>&lt;/head&gt;</tt>, для того чтобы плагины могли подключать свои стили, скрипты и т.п.</li>
</ul>
<p>Пример простого файла <em>header.php</em> приведен ниже:</p>
<pre class="brush: php; title: Код:; notranslate">
&lt;!DOCTYPE html&gt;
&lt;html &lt;?php language_attributes(); ?&gt;&gt;
    &lt;head&gt;
        &lt;meta charset=&quot;&lt;?php bloginfo( 'charset' ); ?&gt;&quot; /&gt;
        &lt;title&gt;&lt;?php wp_title(); ?&gt;&lt;/title&gt;
        &lt;link rel=&quot;profile&quot; href=&quot;http://gmpg.org/xfn/11&quot; /&gt;
        &lt;link rel=&quot;stylesheet&quot; href=&quot;&lt;?php echo get_stylesheet_uri(); ?&gt;&quot; type=&quot;text/css&quot; media=&quot;screen&quot; /&gt;
        &lt;link rel=&quot;pingback&quot; href=&quot;&lt;?php bloginfo( 'pingback_url' ); ?&gt;&quot; /&gt;
        &lt;?php if ( is_singular() &amp;&amp; get_option( 'thread_comments' ) ) wp_enqueue_script( 'comment-reply' ); ?&gt;
        &lt;?php wp_head(); ?&gt;
    &lt;/head&gt;
    &lt;body&gt;
</pre>
<p>Также сюда добавляете начало вашего сайта, а именно основной контейнер, &#171;шапочку&#187;, верхнее меню и любой другой контент, который вы считаете необходимым.</p>
<p>Для вызова файла <em>header.php</em> в (давайте их назовем, &#171;теловых&#187;) файлах, файлах, которые выводят непосредственно сам контент страницы, вам необходимо использовать функцию <tt>get_header()</tt>.</p>
<p>В файле <em>footer.php</em> также нет ничего сложного, тут мы закрываем все наши открытые контейнеры в файле <em>header.php</em> и добавляем вызов <tt>&lt;?php wp_footer(); ?&gt;</tt> для вывода администраторского меню при посещении сайта в соответствующем статусе, для работы плагинов и пр.</p>
<p>Пример простого кода файла <em>footer.php</em> приведен ниже:</p>
<pre class="brush: php; title: Код:; notranslate">
&lt;?php wp_footer(); ?&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Не забываем, также как и для файла <em>header.php</em>, подключить наш футер в &#171;теловые&#187; файлы используя <tt>get_footer()</tt>.</p>
<p>Когда шапка и низ (футер) нашего сайта готовы, перейдем к созданию боковой колонки (сайдбара), за вывод которого отвечает файл <em>sidebar.php</em>. Сам файл сайдбара может быть пустым и содержать только контейнер самого сайдбара и вызов динамического сайдбара, где будут размещаться виджеты, настроенные из административной части.</p>
<p><span style="color: #ff0000;">Внимание!</span> Для того чтобы пользоваться динамическим сайдбаром его необходимо еще зарегистрировать в файле <em>functions.php</em>!</p>
<p>Ниже вы можете ознакомиться с примером кода файла шаблона сайдбара с пояснениями:</p>
<pre class="brush: xml; title: Код:; notranslate">
&lt;aside class=&quot;sidebar&quot; role=&quot;complementary&quot;&gt;
&lt;?php if(!function_exists('dynamic_sidebar') || !dynamic_sidebar('sidebar')){ ?&gt;
&lt;p&gt;Тут контент, на случай если мы не добавили виджетов в наш сайдбар или просто пустота&lt;/p&gt;
&lt;?php } ?&gt;
&lt;/aside&gt;
</pre>
<p>Сайдбар подключается также как и файлы header.php и footer.php с помощью функции <tt>get_sidebar()</tt>. в каждом файле, где это необходимо. Регистрацию динамического сайдбара и подключение разных сайдбаров на разные страницы мы рассмотрим в следующей статье.</p>
<p>Теперь у нас есть вполне себе полноценный каркас нашего будущего шаблона под WordPress и мы смело можем приступать к верстке основных частей нашего сайта &#8212; шапки и футера. Дальше &#8212; интересней, подписывайтесь и следите за новыми статьями!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nikita-sp.com.ua/2015/02/kak-sozdat-shablon-temu-wordpress.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Как добавить Google Adsense в середину записи WordPress</title>
		<link>https://nikita-sp.com.ua/2015/02/dobavit-adsense-v-seredinu-zapisi-wordpress.html</link>
					<comments>https://nikita-sp.com.ua/2015/02/dobavit-adsense-v-seredinu-zapisi-wordpress.html#disqus_thread</comments>
		
		<dc:creator><![CDATA[Nikita_Sp]]></dc:creator>
		<pubDate>Thu, 05 Feb 2015 10:00:24 +0000</pubDate>
				<category><![CDATA[Статьи о php]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">http://nikita-sp.com.ua/?p=2003</guid>

					<description><![CDATA[При создании сайта, если вы собираетесь его в дальнейшем монетизировать, следует обратить внимание и продумать места для размещения рекламы в будущем. И я говорю не только о Google Adsense, но и про другие рекламные блоки. Одними из популярных мест для размещения рекламных блоков является шапка сайта (начало статьи, страницы), но разместить там код рекламного баннера [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>При создании сайта, если вы собираетесь его в дальнейшем монетизировать, следует обратить внимание и продумать места для размещения рекламы в будущем. И я говорю не только о Google Adsense, но и про другие рекламные блоки.</p>
<p><img loading="lazy" decoding="async" width="500" height="400" itemprop="image" class="aligncenter size-full wp-image-2052" src="http://nikita-sp.com.ua/wp-content/uploads/2015/02/adverts-in-post-text.png" alt="Как вставить рекламу в текст записи WordPress" srcset="https://nikita-sp.com.ua/wp-content/uploads/2015/02/adverts-in-post-text.png 500w, https://nikita-sp.com.ua/wp-content/uploads/2015/02/adverts-in-post-text-150x120.png 150w" sizes="auto, (max-width: 500px) 100vw, 500px" /></p>
<p>Одними из популярных мест для размещения рекламных блоков является шапка сайта (начало статьи, страницы), но разместить там код рекламного баннера достаточно просто, а <strong>как разместить код</strong> того же<strong> Google Adsense в тексте записи сайта на WordPress без плагинов</strong>?</p>
<p><span id="more-2003"></span></p>
<p>Итак, для того чтобы <strong>разместить код рекламного блока Google Adsense или других рекламных площадок</strong>, вам необходимо будет отредактировать файл functions.php в папке с вашей темой.</p>
<p>Добавим в код вашего файла (можно в конец файла) следующую функцию:</p>
<pre class="brush: php; title: Код:; notranslate">function prefix_insert_after_paragraph( $insertion, $paragraph_id, $content ) {
	$closing_p = '&lt;/p&gt;';
	$paragraphs = explode( $closing_p, $content ); // разбиваем текст статьи по параграфам
	foreach ($paragraphs as $index =&gt; $paragraph) { // пробегаемся по параграфам
		if ( trim( $paragraph ) ) {
			$paragraphs[$index] .= $closing_p; // добавляем вырезанные на 3 строке закрывающие теги параграфа
		}
		if ( $paragraph_id == $index + 1 ) { // если номер текущего параграфа = номеру требуемого - добавляем код блока
			$paragraphs[$index] .= $insertion;
		}
	}

	return implode( '', $paragraphs ); // совмещаем все параграфы вместе и отдаем
}</pre>
<p>Данная функция позволяет разбивать текст (<em>$content</em>) ваших записей/постов блога на блоки по параграфам и вставляет после определенного номера (<em>$paragraph_id</em>) параграфа код, передаваемый в функцию в переменной <em>$insertion</em>.</p>
<p>Далее нам необходимо вызвать эту функцию при обращении к нашей записи. Для этого нам необходимо добавить строку с добавлением фильтра и функцию:</p>
<pre class="brush: php; title: Код:; notranslate">add_filter( 'the_content', 'prefix_insert_post_ads' ); // Добавляем обработку текста статьи
function prefix_insert_post_ads( $content ) { // В функцию передаем текст статьи
	$ad_code = 'Тут код вашего рекламного блока'; // Указываем код рекламного блока для вставки
	if ( is_single() &amp;&amp; ! is_admin() ) { // вызываем функцию для одиночной записи и не вызываем функцию если мы в администраторской панели
		return prefix_insert_after_paragraph( $ad_code, 2, $content ); // Если были соблюдены все правила возвращаем обработанный функцией исходный код статьи уже с кодом рекламного блока
		// передаются параметры: код рекламного блока, номер параграфа, после которого будет блок размещен, контент
	}
	return $content; // в противном случае возвращаем просто текст статьи
}
</pre>
<p>Вы можете настроить данный скрипт так как вам угодно, например вы можете скомпоновать все действия в одну функцию (мне кажется так будет удобнее и корректнее, зачем плодить функции?) таким образом:</p>
<pre class="brush: php; title: Код:; notranslate">
add_filter( 'the_content', 'prefix_insert_post_ads' );
function prefix_insert_post_ads( $content ) {
	$ad_code = 'Тут код вашего рекламного блока';
	if ( is_single() &amp;&amp; ! is_admin() ) {
		$closing_p = '&lt;/p&gt;';
		$paragraphs = explode( $closing_p, $content );
		foreach ($paragraphs as $index =&gt; $paragraph) {
			if ( trim( $paragraph ) ) {
				$paragraphs[$index] .= $closing_p;
			}
			if ( X == ($index + 1) ) { // X = номер параграфа
				$paragraphs[$index] .= $ad_code;
			}
		}
		return implode( '', $paragraphs ); // совмещаем все параграфы вместе и отдаем
	}
	return $content;
}
</pre>
<p>Если вы хотите <strong>добавить несколько рекламных баннеров в текст вашей статьи</strong>, то вам необходимо добавить просто еще одно условие, например такое:</p>
<pre class="brush: php; title: Код:; notranslate">
add_filter( 'the_content', 'prefix_insert_post_ads' );
function prefix_insert_post_ads( $content ) {
	$ad_code = 'Тут код вашего рекламного блока';
	/* Добавляем второй рекламный блок */
	$ad_code = 'Тут код вашего второго рекламного блока';
	/* Добавили второй рекламный блок */
	if ( is_single() &amp;&amp; ! is_admin() ) {
		$closing_p = '&lt;/p&gt;';
		$paragraphs = explode( $closing_p, $content );
		foreach ($paragraphs as $index =&gt; $paragraph) {
			if ( trim( $paragraph ) ) {
				$paragraphs[$index] .= $closing_p;
			}
			if ( X == ($index + 1) ) { // X = номер параграфа
				$paragraphs[$index] .= $ad_code;
			}
			/* Добавляем второе условие */
			if ( X2 == ($index + 1) ) { // X2 = номер второго параграфа
				$paragraphs[$index] .= $another_ad_code;
			}
			/* Добавили второе условие */
		}
		return implode( '', $paragraphs ); // совмещаем все параграфы вместе и отдаем
	}
	return $content;
}
</pre>
<p>А если вы хотите <strong>добавить рекламный блок в конец записи на сайте на WordPress</strong>, то просто добавьте условие:</p>
<pre class="brush: php; title: Код:; notranslate">
add_filter( 'the_content', 'prefix_insert_post_ads' );
function prefix_insert_post_ads( $content ) {
	$ad_code = 'Тут код вашего рекламного блока';
	if ( is_single() &amp;&amp; ! is_admin() ) {
		$closing_p = '&lt;/p&gt;';
		$paragraphs = explode( $closing_p, $content );
		$count_p = count($paragraphs);
		foreach ($paragraphs as $index =&gt; $paragraph) {
			if ( trim( $paragraph ) ) {
				$paragraphs[$index] .= $closing_p;
			}
			if ( $count_p == ($index + 1) ) {
				$paragraphs[$index] .= $ad_code;
			}
		}
		return implode( '', $paragraphs );
	}
	return $content;
}
</pre>
<p>Таким же образом вы можете <strong>добавить блок рекламных объявлений к любым</strong> другим тегам, которые вы используете при размете ваших <strong>записей на вашем сайте на CMS WordPress</strong>, которые у вас встречаются в тексте записи.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nikita-sp.com.ua/2015/02/dobavit-adsense-v-seredinu-zapisi-wordpress.html/feed</wfw:commentRss>
			<slash:comments>10</slash:comments>
		
		
			</item>
		<item>
		<title>Создание сайтов на  WordPress: иерархия шаблонов</title>
		<link>https://nikita-sp.com.ua/2014/12/sozdanie-saytov-na-wordpress-ierarhiya-shablon.html</link>
					<comments>https://nikita-sp.com.ua/2014/12/sozdanie-saytov-na-wordpress-ierarhiya-shablon.html#disqus_thread</comments>
		
		<dc:creator><![CDATA[Nikita_Sp]]></dc:creator>
		<pubDate>Thu, 25 Dec 2014 21:18:49 +0000</pubDate>
				<category><![CDATA[Создание сайтов]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[создание сайтов]]></category>
		<guid isPermaLink="false">http://nikita-sp.com.ua/?p=1849</guid>

					<description><![CDATA[При создании сайтов необходимо грамотно прорабатывать структуру вашего проекта. В случае использования CMS, в создании сайта, необходимо дорабатывать необходимый вам функционал согласно структуре системы, дабы избежать &#171;грязного&#187; кода. Это позволит в дальнейшем вам, или разработчику, который примет на доработку сайт, понять как был реализован тот или иной функционал. В процессе создания сайта на WordPress также необходимо продумать правильную структуру, создать [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>При создании сайтов необходимо грамотно прорабатывать структуру вашего проекта. В случае использования CMS, в создании сайта, необходимо дорабатывать необходимый вам функционал согласно структуре системы, дабы избежать &#171;грязного&#187; кода. Это позволит в дальнейшем вам, или разработчику, который примет на доработку сайт, понять как был реализован тот или иной функционал.</p>
<p><img loading="lazy" decoding="async" width="499" height="115" itemprop="image" class="aligncenter size-full wp-image-1853" src="http://nikita-sp.com.ua/wp-content/uploads/2014/12/wp-template-hierarchy-logo.png" alt="Иерархия шаблонов WordPress" srcset="https://nikita-sp.com.ua/wp-content/uploads/2014/12/wp-template-hierarchy-logo.png 499w, https://nikita-sp.com.ua/wp-content/uploads/2014/12/wp-template-hierarchy-logo-150x35.png 150w" sizes="auto, (max-width: 499px) 100vw, 499px" /></p>
<p>В процессе создания сайта на WordPress также необходимо продумать правильную структуру, создать необходимые типы записей, таксономии (таксономии &#8212; это категории и теги) и правильно разработать шаблон.</p>
<p><span id="more-1849"></span></p>
<p>Для разработки шаблона, достаточно знать иерархию шаблонов WordPress. Она позволяет вам создать нужные вам файлы шаблона, реализовать разные шаблоны для разных страниц, категорий, типов записей и прочего. Это азы создания сайтов на WordPress.</p>
<p>На сайте WordPress существует достаточно документации, чтобы создать любой сайт на основе данной CMS. Кодекс WordPress, о котором шла речь в <a title="Создание сайтов на WordPress: как правильно создать сайт" href="http://nikita-sp.com.ua/2014/12/sozdanie-saytov-na-wordpress-kak-sozdat-sajt.html" target="_blank" data-wpel-link="internal">предыдущей статье</a>, расписывает абсолютно все функции, доступные разработчику при создании шаблона или плагина.</p>
<p>Однако для понимания лучшим, с моей точки зрения, является графическое представление информации. Наткнувшись в интернете на схему иерархии шаблонов WordPress я не мог не сохранить ее себе, и не русифицировать для вас.</p>
<p><a href="http://nikita-sp.com.ua/wp-content/uploads/2014/12/wp-template-hierarchy.jpg" rel="lightbox[1849]" data-wpel-link="internal"><img decoding="async" itemprop="image" class="aligncenter wp-image-1851 size-medium" src="http://nikita-sp.com.ua/wp-content/uploads/2014/12/wp-template-hierarchy-600x375.jpg" alt="WordPress template hierarchy" width="600" srcset="https://nikita-sp.com.ua/wp-content/uploads/2014/12/wp-template-hierarchy-600x375.jpg 600w, https://nikita-sp.com.ua/wp-content/uploads/2014/12/wp-template-hierarchy-960x600.jpg 960w, https://nikita-sp.com.ua/wp-content/uploads/2014/12/wp-template-hierarchy-150x94.jpg 150w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>
<p>Она наглядно показывает как работает шаблон WordPress. Какие файлы являются основными, а какие подключаются под определенные типы записей, что позволяет кастомизировать шаблон буквально под каждую страницу вашего сайта!</p>
<p>Не знаю на сколько актуальна будет моя русифицированная версия данной схемы, однако полагаю что для начинающих она будет очень полезна. Создавайте свои шаблоны! Не используйте чужие, в которых вы плохо разбираетесь!</p>
<p><a href="http://nikita-sp.com.ua/wp-content/uploads/2014/12/wp-template-hierarchy-rus.jpg" rel="lightbox[1849]" data-wpel-link="internal"><img decoding="async" itemprop="image" class="aligncenter wp-image-1850 size-medium" src="http://nikita-sp.com.ua/wp-content/uploads/2014/12/wp-template-hierarchy-rus-600x375.jpg" alt="Иерархия шаблонов WordPress" width="600" srcset="https://nikita-sp.com.ua/wp-content/uploads/2014/12/wp-template-hierarchy-rus-600x375.jpg 600w, https://nikita-sp.com.ua/wp-content/uploads/2014/12/wp-template-hierarchy-rus-960x600.jpg 960w, https://nikita-sp.com.ua/wp-content/uploads/2014/12/wp-template-hierarchy-rus-150x94.jpg 150w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>
<p>В последнее время ко мне обратилось достаточно много людей, в том числе и разработчиков, которые использовали при создании сайта очень крутую, но <span style="text-decoration: underline;">чужую</span> тему для WordPress и как следствие все путаются в сложных чужих функциях и алгоритмах.</p>
<p>Удачной разработки шаблона под CMS WordPress! <img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://nikita-sp.com.ua/2014/12/sozdanie-saytov-na-wordpress-ierarhiya-shablon.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Создание сайтов на WordPress: как правильно создать сайт</title>
		<link>https://nikita-sp.com.ua/2014/12/sozdanie-saytov-na-wordpress-kak-sozdat-sajt.html</link>
					<comments>https://nikita-sp.com.ua/2014/12/sozdanie-saytov-na-wordpress-kak-sozdat-sajt.html#disqus_thread</comments>
		
		<dc:creator><![CDATA[Nikita_Sp]]></dc:creator>
		<pubDate>Thu, 04 Dec 2014 21:25:39 +0000</pubDate>
				<category><![CDATA[Создание сайтов]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[создание сайтов]]></category>
		<guid isPermaLink="false">http://nikita-sp.com.ua/?p=1785</guid>

					<description><![CDATA[WordPress &#8212; очень мощный и просто на первый взгляд движек для создания сайтов. В первую очередь WP позиционируется как движек для создания блогов, однако благодаря знанию Кодекса WP (документация по WordPress) из данного каркаса можно создать сайт любой сложности. Я встречал достаточно разработчиков сайтов, как они себя позиционируют, которые создавали сайты на WordPress и реализация [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>WordPress &#8212; очень мощный и просто на первый взгляд движек для создания сайтов. В первую очередь WP позиционируется как движек для создания блогов, однако благодаря знанию Кодекса WP (документация по WordPress) из данного каркаса можно создать сайт любой сложности.<br />
<img loading="lazy" decoding="async" width="600" height="352" itemprop="image" class="aligncenter size-medium wp-image-1788" src="http://nikita-sp.com.ua/wp-content/uploads/2014/12/wordpress-logo-680x400-600x352.png" alt="Создание сайтов на WordPress" srcset="https://nikita-sp.com.ua/wp-content/uploads/2014/12/wordpress-logo-680x400-600x352.png 600w, https://nikita-sp.com.ua/wp-content/uploads/2014/12/wordpress-logo-680x400-150x88.png 150w, https://nikita-sp.com.ua/wp-content/uploads/2014/12/wordpress-logo-680x400.png 680w" sizes="auto, (max-width: 600px) 100vw, 600px" /><br />
Я встречал достаточно разработчиков сайтов, как они себя позиционируют, которые создавали сайты на WordPress и реализация была ужасна, не рациональна, с отсутствием возможности добавлять новый функционал, для того чтобы прийти к решению что данному посту быть. Возможно именно эта статья поможет вам разобраться в основах WordPress и разрабатывать &#171;правильные сайты&#187;.<span id="more-1785"></span></p>
<h2>Типы записей (сущности/объекты)</h2>
<p>В CMS WordPress по-умолчанию существует два типа записи &#8212; это &#171;<em>Записи</em>&#187; и &#171;<em>Страницы</em>&#171;, остальные пока не будем рассматривать. <em>Записи</em> (<em>posts</em>) &#8212; стандартный тип записи используемый для блогов, выводятся от новых к более поздним записям. <em>Страницы</em> (<em>pages</em>) &#8212; обычные страницы сайта, которые находятся отдельно от записей блога и по-умолчанию, страницы невозможно организовать по категориям и тегам. Однако они могут иметь вложенность &#8212; страница может быть дочерней к другой странице.</p>
<p>Из этого следует, что для реализации блогов или портфолио, интернет-магазинов и других типов каталогов где есть определенный список записей, разделенных на категории и подкатегории, необходимо использовать именно &#171;<em>Записи</em>&#171;, для прочих страниц, например, &#171;<em>Контакты</em>&#187; или &#171;<em>О нас</em>&#187; &#8212; мы используем &#171;<em>Страницы</em>&#171;.</p>
<p>Для продвинутых пользователей можно воспользоваться &#171;Пользовательскими типами записей&#187; и создать свой тип записи. Для начинающих пользователей, которые не очень дружат с кодом, рекомендовал бы использование плагина Magic Fields или Magic Fields 2.0.</p>
<p>При создании своего типа записи вы можете указать параметры из стандартных (заголовок, краткая запись, полная запись, таксономия/использование категорий, тегов, миниатюры записи), а также добавить свои пользовательские поля, например с загрузкой изображения/файла, поле input, или любое другое. Подробнее почитать можете в кодексе WordPress (<a href="http://codex.wordpress.org/Post_Types" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="ext-link wpel-icon-right">http://codex.wordpress.org/Post_Types<span class="wpel-icon wpel-image wpel-icon-6"></span></a>)</p>
<h2>Таксономия &#8212; что это такое и с чем едят</h2>
<p>Понятие &#171;таксономия&#187; в WordPress подразумевает возможность классификации записей (постов) по категориям (или тегам). По-умолчанию в WordPress есть два типа таксономии: Категории (Рубрики) и Теги. Они практически идентичны, каждая таксономия имеет свой префикс (Рубрики &#8212; category, Теги &#8212; tag), SEO-урл и название.</p>
<p>Основным отличием Тегов от Рубрик является отсутствие иерархии. При создании таксономии вы можете указать имеют ли элементы таксономии иерархию или нет. Это означает что Тег-1 не может быть дочерним или родительским к Тегу-2, а вот в категориях иерархия разрешена и из них можно построить дерево категорий.</p>
<p>Таксономию удобно использовать при создании каталогов, фильтров или любых других классификаций. Обратите внимание: никогда не создавайте категории или разделы из страниц! Для этого предназначена таксономия! Подробнее про таксономии можно прочитать в Кодексе (<a href="http://codex.wordpress.org/Taxonomies" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="ext-link wpel-icon-right">http://codex.wordpress.org/Taxonomies<span class="wpel-icon wpel-image wpel-icon-6"></span></a>)</p>
<h2>Вывод</h2>
<p>При создании сайта на WordPress используйте записи и рубрики для создания разделов сайта, а страницы для обычных информационных страниц. В случае если вам необходимы дополнительные поля &#8212; используйте плагины, или добавляйте все в ручную в коде.</p>
<p>Если данная статья была вам интересна, возможно вас бы интересовали другие вопросы относительно работы с WP &#8212; пишите в комментариях и я буду публиковать новые статьи на проблемные тематики. Спасибо.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nikita-sp.com.ua/2014/12/sozdanie-saytov-na-wordpress-kak-sozdat-sajt.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Fatal error: Call to undefined function wpcf7_add_shortcode()</title>
		<link>https://nikita-sp.com.ua/2014/09/fatal-error-call-to-undefined-function-wpcf7_add_shortcode.html</link>
					<comments>https://nikita-sp.com.ua/2014/09/fatal-error-call-to-undefined-function-wpcf7_add_shortcode.html#disqus_thread</comments>
		
		<dc:creator><![CDATA[Nikita_Sp]]></dc:creator>
		<pubDate>Wed, 03 Sep 2014 21:59:40 +0000</pubDate>
				<category><![CDATA[Статьи о php]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[модули и плагины]]></category>
		<guid isPermaLink="false">http://nikita-sp.com.ua/?p=1570</guid>

					<description><![CDATA[После очередного обновления небезызвестного плагина WordPress Contact Form 7 вылетела ошибка Fatal error: Call to undefined function wpcf7_add_shortcode(). В поисках решения этой проблемы я обратился к поисковым системам, но к сожалению, ни коим образом информация, найденная на официальном форуме WordPress мне не помогла. Как же все таки предотвратить эту ошибку? Решение более чем простое и предельно [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>После очередного обновления небезызвестного плагина <strong>WordPress Contact Form 7</strong> вылетела ошибка <strong>Fatal error: Call to undefined function wpcf7_add_shortcode()</strong>. В поисках решения этой проблемы я обратился к поисковым системам, но к сожалению, ни коим образом информация, найденная на официальном форуме WordPress мне не помогла. Как же все таки предотвратить эту ошибку?</p>
<p><span id="more-1570"></span></p>
<p>Решение более чем простое и предельно ясное. При обновлении плагина он сначала отключается, скачиваются новые файлы, и потом он заново активируется. И если у вас в каком-то файле темы без специальной проверки присутствует функция, существующая в файлах плагина, то естественно в случае отключения плагина она не будет доступна &#8212; имеем ошибку, и плагин не может заново активироваться после обновления.</p>
<p>Что же делать? Все просто! Найдите строку с вызовом данной функции (файл и строка указаны в тексте ошибки), и добавьте дополнительную проверку на существование функции:</p>
<pre class="brush: php; title: Код:; notranslate">if(function_exists(&quot;wpcf7_add_shortcode&quot;)){
wpcf7_add_shortcode('hidden', 'hidden', true);
}</pre>
<p>В этом случае, если плагин деактивирован, функция function_exists() вернет false и скрипт будет работать дальше, а если активирован &#8212; вызовет данную функцию с указанными параметрами.</p>
<p>Не знаю, возможно кому-то данная статья покажется ненужной или же слишком простой, но если она вам помогла, буду рад узнать об этом увидев инкремент счетчика лайков <img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://nikita-sp.com.ua/2014/09/fatal-error-call-to-undefined-function-wpcf7_add_shortcode.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Создать скрытые поля для Contact Form 7</title>
		<link>https://nikita-sp.com.ua/2014/08/sozdat-skryityie-polya-dlya-contact-form-7.html</link>
					<comments>https://nikita-sp.com.ua/2014/08/sozdat-skryityie-polya-dlya-contact-form-7.html#disqus_thread</comments>
		
		<dc:creator><![CDATA[Nikita_Sp]]></dc:creator>
		<pubDate>Sat, 09 Aug 2014 01:58:08 +0000</pubDate>
				<category><![CDATA[Статьи о php]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">http://nikita-sp.com.ua/?p=1318</guid>

					<description><![CDATA[Плагин Contact Form 7 является одним из самых популярных модулей для WordPress для создания формы обратной связи. Тут просто создаются и редактируются поля, настраивается формат письма и многое другое. НО! К сожалению, не знаю почему, разработчики решили не добавлять скрытый тип поля (&#60;input type=&#187;hidden&#187; &#8230;&#62;). Для чего он нужен? Ну например чтобы передавать данные о [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Плагин <strong>Contact Form 7</strong> является одним из самых популярных модулей для <strong>WordPress</strong> для создания формы обратной связи. Тут просто создаются и редактируются поля, настраивается формат письма и многое другое. НО! К сожалению, не знаю почему, разработчики решили не добавлять скрытый тип поля (<em>&lt;input type=&#187;hidden&#187; &#8230;&gt;</em>).</p>
<p>Для чего он нужен? Ну например чтобы передавать данные о пользователе (IP, браузер и т.п.), данные о странице откуда отправили форму, или откуда перешли чтобы отправить форму (какая страница поспособствовала переходу в раздел контактов) и еще куча возможных применений!</p>
<p>Все это вы можете себе позволить, написав просто обработку нового <em>shortcode</em> (тега, шорт кода) в шаблоне контактной формы. По-умолчанию существуют такие теги как <em>text</em>, <em>email</em>, <em>textarea</em>, которые также сопровождаются параметрами: обязательное или не обязательное поле и многое другое.<span id="more-1318"></span></p>
<p>Теперь мы создадим новый тег <em>hidden</em> и в шаблоне добавим его как обычный тег с именем <em>[hidden inputName]</em>. Само имя тега <em>inputName</em> мы внесем в тело нашего сообщения. И остается только в файле functions.php прописать следующий код для обработки <strong>shortcode</strong>&#8216;а:</p>
<pre class="brush: php; title: Код:; notranslate">
// Register new shortcode for getting pages where contact form was send
function hidden($tag) {
    if ( ! is_array( $tag ) )
        return '';

if($tag['name'] == &quot;referer&quot;){
    $pageURL = 'http';
    if ($_SERVER[&quot;HTTPS&quot;] == &quot;on&quot;) {
        $pageURL .= &quot;s&quot;;
    }
    $pageURL .= &quot;://&quot;;
    if ($_SERVER[&quot;SERVER_PORT&quot;] != &quot;80&quot;) {
        $pageURL .= $_SERVER[&quot;SERVER_NAME&quot;].&quot;:&quot;.$_SERVER[&quot;SERVER_PORT&quot;].$_SERVER[&quot;REQUEST_URI&quot;];
    } else {
        $pageURL .= $_SERVER[&quot;SERVER_NAME&quot;].$_SERVER[&quot;REQUEST_URI&quot;];
    }
    $html = '&lt;input type=&quot;'.$tag['basetype'].'&quot; name=&quot;' . $tag['name'] . '&quot; value=&quot;'.$pageURL.'&quot; /&gt;';
}else{
    $html = '&lt;input type=&quot;'.$tag['basetype'].'&quot; name=&quot;' . $tag['name'] . '&quot; value=&quot;&quot; /&gt;';
}
    return $html;
}
if(function_exists(&quot;wpcf7_add_shortcode&quot;)){
    wpcf7_add_shortcode('hidden', 'hidden', true);
}</pre>
<p>В данном примере функции рассмотрен вариант отправки адреса страницы, откуда была отправлена форма, в случае если поле называется <em>referer</em>, в противном случае будет выводиться пустое скрытое поле, таким образом вы можете подвязать для себя по названию несколько скрытых полей.</p>
<p>На этом вроде все, если возникают вопросы &#8212; пишите в раздел вопросов и ответов, пишите комментарии, ставьте лайки!<br />
Удачного коддинга!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nikita-sp.com.ua/2014/08/sozdat-skryityie-polya-dlya-contact-form-7.html/feed</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title>Get dropdown options для Magic Fields 2</title>
		<link>https://nikita-sp.com.ua/2014/08/get-dropdown-options-dlya-magic-fields-2.html</link>
					<comments>https://nikita-sp.com.ua/2014/08/get-dropdown-options-dlya-magic-fields-2.html#disqus_thread</comments>
		
		<dc:creator><![CDATA[Nikita_Sp]]></dc:creator>
		<pubDate>Sat, 09 Aug 2014 01:31:37 +0000</pubDate>
				<category><![CDATA[Статьи о php]]></category>
		<category><![CDATA[Magic Fieds]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[модули и плагины]]></category>
		<guid isPermaLink="false">http://nikita-sp.com.ua/?p=1314</guid>

					<description><![CDATA[Плагин Magic Fields является достаточно популярным плагином для WordPress. Этот плагин позволяет создавать разные типы записей (custom post types) и дополнительные поля к ним. Популярен этот плагин ввиду своей простоты и гибкости. Зачастую Magic Fields применяется для создания каталогов записей определенного типа. Это может быть портфолио, каталог товаров, каталог заведений, чего угодно. Как и в [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Плагин <strong>Magic Fields</strong> является достаточно популярным плагином для <strong>WordPress</strong>. Этот плагин позволяет создавать разные типы записей (<em>custom post types</em>) и дополнительные поля к ним. Популярен этот плагин ввиду своей простоты и гибкости.</p>
<p>Зачастую <strong>Magic Fields</strong> применяется для создания каталогов записей определенного типа. Это может быть портфолио, каталог товаров, каталог заведений, чего угодно. Как и в любом каталоге пользователю было бы удобнее найти требуемую ему единицу благодаря поиску или фильтру по параметрам этих записей. Для этого нужно вывести фильтр &#8212; вывести все варианты значений, которые могут принимать параметры, для того чтобы с ними работал посетитель. Для полей типа input конечно варианты значений в фильтр не выводят, а вот для <strong>select</strong> (<strong>dropdown list</strong>) вывести их необходимо, но к сожалению, нативными средствами плагина <strong>Magic Fields 2</strong> тут не обойдешься.<span id="more-1314"></span></p>
<p>В своем старом посте <a title="Реализуем поиск для Magic Fields 2" href="http://nikita-sp.com.ua/2012/02/realizuem-poisk-dlya-magic-fields-2.html" data-wpel-link="internal">Реализуем поиск для Magic Fields 2</a> я рассматривал вариант SQL запроса прямо в шаблоне, но так делать не красиво, и вот, спустя время был обнаружен еще один способ!</p>
<p>Для того чтобы <strong>получить опции выпадающего списка дополнительного поля Magic Fields</strong> достаточно просто в файле <strong>functions.php</strong> создать нужную функцию и к ней обращаться в любом месте шаблона. Вот собственно и сама функция:</p>
<pre class="brush: php; title: Код:; notranslate">

// Magic Field get dropdown options
function get_field_options( $field, $post_type = NULL ) {
global $wpdb, $post;
static $field_options_cache = array();

if ( !$post_type ) { $post_type = get_post_type( $post-&gt;ID ); }

if ( !array_key_exists( $post_type, $field_options_cache ) ) {
$field_options_cache[$post_type] = array();

$sql = sprintf(
&quot;SELECT name, options FROM %s WHERE post_type = '%s'&quot;,
MF_TABLE_CUSTOM_FIELDS, $post_type );

$results = $wpdb-&gt;get_results( $sql, ARRAY_A );
foreach ( $results as $result ) {
$field_options_cache[$post_type][$result['name']] = unserialize( $result['options'] );
}
}

return $field_options_cache[$post_type][$field];
}

</pre>
<p>Вот таким нехитрым способом мы можем получить список опций для данного дополнительного поля, где среди прочих настроек будет хранится строка с опциями выпадающего списка разделенных через <em>\n</em> &#8212; т.е. новой строкой, как вы вводите эти данные в админке при создании поля.</p>
<p>На этом все. Удачного вам коддинга!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nikita-sp.com.ua/2014/08/get-dropdown-options-dlya-magic-fields-2.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
