<?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>add_action() &#8212; ploshadka.net</title>
	<atom:link href="https://ploshadka.net/tag/add_action/feed/" rel="self" type="application/rss+xml" />
	<link>https://ploshadka.net</link>
	<description>Мир интернет технологий</description>
	<lastBuildDate>Tue, 21 Aug 2018 10:50:16 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.1</generator>
	<item>
		<title>WordPress функция add_action</title>
		<link>https://ploshadka.net/wordpress-funkcija-add_action/</link>
					<comments>https://ploshadka.net/wordpress-funkcija-add_action/#comments</comments>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Sat, 15 Dec 2018 08:00:49 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[add_action()]]></category>
		<guid isPermaLink="false">https://ploshadka.net/?p=4399</guid>

					<description><![CDATA[Функция add_action используется ядром WordPress. При использовании хука (зацепки) она запускает другую указанную функцию (callback). Функция имеет вид: add_action( string $tag, callable $function_to_add, int $priority = 10, int $accepted_args = 1 ) $tag &#8212; название действия, из-за которого будет вызвана функция, указанная в следующем параметре. $function_to_add &#8212; название вызываемой функции. callable &#8212;...]]></description>
										<content:encoded><![CDATA[<p>Функция <strong>add_action</strong> используется ядром <strong>WordPress</strong>. При использовании <strong>хука (зацепки)</strong> она запускает другую указанную функцию (<strong>callback</strong>). <span id="more-4399"></span></p>
<p>Функция имеет вид:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">add_action( string $tag, callable $function_to_add, int $priority = 10, int $accepted_args = 1 )</div></div>
<p><strong>$tag</strong> &#8212; название действия, из-за которого будет вызвана функция, указанная в следующем параметре.</p>
<p><strong>$function_to_add</strong> &#8212; название вызываемой функции.</p>
<p><strong>callable</strong> &#8212; специальная отметка, которая означает, какая функцию сработает (будет &#171;возвращаться&#187;) в результате активации действия (<strong>$tag</strong>).</p>
<h2>add_action на примере подключения aJax действия</h2>
<p>Подключаем ajax – вешаем функцию <strong>php</strong> на действие (название указанное в ajax):</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">add_action('wp_ajax_nameFanction', 'functionReturn');</div></div>
<p>Если ссылаемся на аякс внутри класса:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">add_action('wp_ajax_nameFanction', [mainFunctions::class, 'functionReturn']);</div></div>
]]></content:encoded>
					
					<wfw:commentRss>https://ploshadka.net/wordpress-funkcija-add_action/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>WordPress – add_action и save_post</title>
		<link>https://ploshadka.net/wordpress-add_action-save_post/</link>
					<comments>https://ploshadka.net/wordpress-add_action-save_post/#respond</comments>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Mon, 15 Oct 2018 08:00:39 +0000</pubDate>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[add_action()]]></category>
		<category><![CDATA[add_filter()]]></category>
		<category><![CDATA[post_content]]></category>
		<category><![CDATA[sanitize_text_field()]]></category>
		<category><![CDATA[save_post]]></category>
		<category><![CDATA[str_replace]]></category>
		<category><![CDATA[update_post_meta]]></category>
		<category><![CDATA[wp_get_post_terms()]]></category>
		<category><![CDATA[wp_insert_post_data()]]></category>
		<category><![CDATA[wp_update_post()]]></category>
		<category><![CDATA[Основательные труды]]></category>
		<category><![CDATA[Произвольные поля]]></category>
		<category><![CDATA[Произвольный тип записи]]></category>
		<guid isPermaLink="false">https://ploshadka.net/?p=4184</guid>

					<description><![CDATA[Примеры автоматического внесения изменений в базу данных WordPress при сохранении записи черновика или публикации. Для изменения содержимого без внесения в базу данных читайте другую инструкцию. Для того, чтобы запустить какую-нибудь функцию при сохранении поста, нужно воспользоваться хуком: add_action('save_post', '', );...]]></description>
										<content:encoded><![CDATA[<p>Примеры автоматического внесения изменений в базу данных WordPress при сохранении записи черновика или публикации. <span id="more-4184"></span></p>
<p>Для изменения содержимого без внесения в базу данных <a href="https://ploshadka.net/wordpress-change-content/">читайте другую инструкцию</a>.</p>
<p>Для того, чтобы запустить какую-нибудь функцию при сохранении поста, нужно воспользоваться хуком:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">add_action('save_post', '', );</div></div>
<p>Более подробно об этом ниже.</p>
<h2>1. save_post для основного контента поста</h2>
<p>Меняем данные в основной записи поста <strong>(post_content)</strong>. К примеру, перед отправлением данных, скрипт поменяет в контенте одну букву на другую, а затем сохранит содержимое в базе данных.</p>
<h3>Функция меняющая контент в WordPress</h3>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">function replaceLetters()<br />
{<br />
&nbsp; &nbsp; global $post;<br />
<br />
&nbsp; &nbsp; $search = ['Ё', 'ё'];<br />
&nbsp; &nbsp; $replace = ['Е', 'е'];<br />
<br />
&nbsp; &nbsp; $getContent = get_post($post-&gt;ID);<br />
&nbsp; &nbsp; $postContent = $getContent-&gt;post_content;<br />
&nbsp; &nbsp; $modifyContent['post_content'] = str_replace($search, $replace, $postContent);<br />
<br />
&nbsp; &nbsp; $newPost = array();<br />
&nbsp; &nbsp; $newPost['ID'] = $post-&gt;ID;<br />
&nbsp; &nbsp; $newPost['post_content'] = $modifyContent['post_content'];<br />
&nbsp; &nbsp; wp_update_post( $newPost );<br />
}</div></div>
<h3>Запуск функции</h3>
<p>При сочетании <strong>wp_update_post</strong> и <strong>save_post</strong>, нужна конструкция, которая сначала удаляет action <strong>(remove_action)</strong>, а затем добавляет его. Это необходимо, чтобы избежать бесконечный цикл, который повесит страницу.</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">function runReplaceLetters()<br />
{<br />
&nbsp; &nbsp; global $post;<br />
&nbsp; &nbsp; if ( ! wp_is_post_revision($post-&gt;ID) )<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; remove_action('save_post', 'runReplaceLetters', 99);<br />
&nbsp; &nbsp; &nbsp; &nbsp; replaceLetters();<br />
&nbsp; &nbsp; &nbsp; &nbsp; add_action('save_post', 'runReplaceLetters', 99);<br />
&nbsp; &nbsp; }<br />
}<br />
add_action('save_post', 'runReplaceLetters', 99);</div></div>
<h2>2. save_post для произвольных полей</h2>
<p>Та же самая функция, но которую будем использовать для произвольных полей. </p>
<h3>Функция меняющая контент</h3>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">function replaceLettersCustomPostMeta($key = &quot;&quot;)<br />
{<br />
&nbsp; &nbsp; global $post;<br />
<br />
&nbsp; &nbsp; $search = ['Ё', 'ё'];<br />
&nbsp; &nbsp; $replace = ['Е', 'е'];<br />
<br />
&nbsp; &nbsp; $getKeyData = get_post_meta($post-&gt;ID, $key, true);<br />
&nbsp; &nbsp; $change = str_replace($search, $replace, $getKeyData);<br />
&nbsp; &nbsp; update_post_meta($post-&gt;ID, $key, $change);<br />
}</div></div>
<h3>Запуск функции</h3>
<p>В отличии от предыдущего примера, здесь не нужно удалять <strong>action</strong>.</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">function runReplaceLettersCustomPostMeta()<br />
{<br />
&nbsp; &nbsp; replaceLettersCustomPostMeta('ploshadka.net');<br />
&nbsp; &nbsp; replaceLettersCustomPostMeta('ploshadka-net');<br />
}<br />
add_action('save_post', 'runReplaceLettersCustomPostMeta', 99);</div></div>
<h2>3. Сохраняем данные через wp_insert_post_data</h2>
<p>Сохраним изменения в контенте записи через функцию <strong>wp_insert_post_data</strong>.</p>
<div class="highlight">Надо быть внимательным при сочетании функций <strong>add_filter -> wp_insert_post_data</strong> и <strong>add_action -> save_post</strong>. При неправильных приоритетах что-то может не работать.</div>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">function replaceLetters( $data )<br />
{<br />
&nbsp; &nbsp; if ( defined('DOING_AUTOSAVE') &amp;&amp; DOING_AUTOSAVE ) return $data; // Exclude Autosave<br />
&nbsp; &nbsp; if ( ! current_user_can('edit_post') ) return $data;<br />
<br />
&nbsp; &nbsp; if (!empty($data['post_content'])) {<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; $search = ['Ё', 'ё'];<br />
&nbsp; &nbsp; &nbsp; &nbsp; $replace = ['Е', 'е'];<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; $modifyContent['post_content'] = str_replace($search, $replace, $data['post_content']);<br />
<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; return $modifyContent;<br />
}<br />
add_filter( 'wp_insert_post_data' , 'replaceLetters', 99 );</div></div>
<h2>4. Создадим title записи для WordPress по шаблону</h2>
<p>Заголовок будет автоматически формироваться при каждом сохранении записи из атрибутов, которые мы для него подготовим.</p>
<h3>Функция создающая title</h3>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">function generateTitle() {<br />
&nbsp; &nbsp; global $post;<br />
<br />
&nbsp; &nbsp; $string = get_post_meta($post-&gt;ID, 'ploshadka.net', true);<br />
<br />
&nbsp; &nbsp; $newsTag = wp_get_post_terms($post-&gt;ID, 'news');<br />
&nbsp; &nbsp; foreach ($newsTag as $tag) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; $tag = ' - ' .$tag-&gt;name;<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; $date = get_post_time();<br />
<br />
&nbsp; &nbsp; $newTitle = sanitize_text_field(sprintf('%s %s %s', $string, $tag, $date));<br />
<br />
// &nbsp; &nbsp; &nbsp;Иногда возможен такой вариант:<br />
// &nbsp; &nbsp; &nbsp;wp_update_post(array($post-&gt;ID, 'post_title' =&gt; $newTitle ));<br />
// &nbsp; &nbsp; &nbsp;Но с ним может перестать сохраняться post_content.<br />
<br />
&nbsp; &nbsp; $newPost = array();<br />
&nbsp; &nbsp; $newPost['ID'] = $post-&gt;ID;<br />
&nbsp; &nbsp; $newPost['post_title'] = $newTitle;<br />
&nbsp; &nbsp; wp_update_post( $newPost );<br />
}</div></div>
<h3>Запуск функции для Custom Post Types</h3>
<p>Функцию выше запустим для произвольных типов записей. Для этого к save_post прибавим название такой записи. В данном случае <strong>news</strong>.</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">function runGenerateTitle()<br />
{<br />
&nbsp; &nbsp; global $post;<br />
&nbsp; &nbsp; if ( ! wp_is_post_revision($post-&gt;ID) )<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; remove_action('save_post_news', 'runGenerateTitle', 10);<br />
&nbsp; &nbsp; &nbsp; &nbsp; generateTitle();<br />
&nbsp; &nbsp; &nbsp; &nbsp; add_action('save_post_news', 'runGenerateTitle', 10);<br />
&nbsp; &nbsp; }<br />
}<br />
add_action('save_post_news', 'runGenerateTitle', 10);</div></div>
]]></content:encoded>
					
					<wfw:commentRss>https://ploshadka.net/wordpress-add_action-save_post/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
