<?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>Archivos de extender &#187; Endless Manifesto</title>
	<atom:link href="https://kadai.com.mx/tag/extender/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>Un blog personal sobre muchas cosas, en especial videojuegos, descubrimientos y escritos al azar.</description>
	<lastBuildDate>Thu, 28 Feb 2019 04:59:30 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>

<image>
	<url>https://kadai.com.mx/wp-content/uploads/2017/08/new-favicon-88x88.png</url>
	<title>Archivos de extender &#187; Endless Manifesto</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">126519727</site>	<item>
		<title>Filtros y acciones: Como extender WordPress</title>
		<link>https://kadai.com.mx/como-extender-wordpress-filtros-acciones/</link>
					<comments>https://kadai.com.mx/como-extender-wordpress-filtros-acciones/#respond</comments>
		
		<dc:creator><![CDATA[Kadai Crosshansen]]></dc:creator>
		<pubDate>Thu, 28 Feb 2019 16:57:56 +0000</pubDate>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[actions]]></category>
		<category><![CDATA[extender]]></category>
		<category><![CDATA[filters]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://kadai.com.mx/?p=1489</guid>

					<description><![CDATA[<p>Extender WordPress usando filtros y acciones es muy fácil. En esta entrada te muestro algunas de las formas de como hacerlo.</p>
<p>The post <a href="https://kadai.com.mx/como-extender-wordpress-filtros-acciones/">Filtros y acciones: Como extender WordPress</a> appeared first on <a href="https://kadai.com.mx">Endless Manifesto</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p style="text-align:center"><em>(Después de un par de años de estar probando y desarrollando para WordPress, he decidido el volver a <a rel="noreferrer noopener" aria-label="re-escribir el tema de una entrada anterior (opens in a new tab)" href="https://kadai.com.mx/2017/07/01/hooks-y-transients-en-wordpress/" target="_blank">re-escribir sobre un tema de una entrada anterior</a>.)</em></p>



<p>Ampliar las funcionalidades de WordPress es realmente sencillo. Como todo framework, aprender como extenderlo puede ser intimidante. Pero una vez que se entiende su funcionamiento, todo se abre paso.</p>



<p>Entonces, desarrollar plugins o extender temas en WordPress se vuelve mucho más fácil.</p>



<span id="more-1489"></span>



<h3 class="wp-block-heading">Extender WordPress: Los filtros y acciones son tus amigos</h3>



<p>La forma en la cual nosotros podemos agregar nuevas funcionalidades a WordPress es, normalmente, usando los llamados <em>filtros y acciones</em>.</p>



<p>Estos también son llamados <em>hooks</em>, o ganchos en español.</p>



<p>Los filtros y las acciones son, en esencia, lo mismo. Pero cambian en un aspecto fundamental: <em>Que los filtros regresan datos y que las acciones nos permiten alterar el comportamiento.</em></p>



<p>Cada uno de estos <em>hooks</em> posee un nombre único, el cual describe de forma general en donde se encuentra, en que momento se ejecuta o el tipo de datos los cuales puedes cambiar.</p>



<p>Para poder usar un filtro o acción, nosotros debemos primero <em>pegarnos</em> a dicho hook. Esto se logra usando las funciones <em><a rel="noreferrer noopener" aria-label=" (opens in a new tab)" href="https://developer.wordpress.org/reference/functions/add_filter/" target="_blank">add_filter</a></em> o <em><a rel="noreferrer noopener" aria-label="add_action (opens in a new tab)" href="https://developer.wordpress.org/reference/functions/add_action/" target="_blank">add_action</a></em> de WordPress.</p>



<p>Debemos usar <em>add_filter</em> si nos vamos a adjuntar a un filtro y <em>add_action</em> si se trata de una acción.</p>



<p>Con esas funciones, nosotros podemos declarar a cual hook queremos unirnos y cual será el código que queremos que se ejecute.</p>



<p>Esta es la forma en la cual lo hacemos:</p>



			<div class="github-gist-container">
				<script type="text/javascript" class="script-github-gist" src="https://gist.github.com/kadai/2499ddc6bff7e0907051b4eff19267c1.js?file=filtro-001.php"></script>
			</div>
		


<p>En este ejemplo, adjuntamos una función a los filtros <em>script_loader_src</em> y <em>style_loader_src</em>. Cuando estos filtros se ejecuten, van a pasar un valor que tomará la función como la variable <em>$cadena</em>. La cual a su vez regresará un valor ya modificado.</p>



<p>De esta forma, podemos hacer prácticamente cualquier cosa con los datos que reciba nuestro código.</p>



<p>Hay que recordar que un filtro normalmente espera que se regrese algún dato. Por lo cual, de no hacerlo, es posible que suceda un comportamiento no esperado.</p>



<h3 class="wp-block-heading">¿Que hay de las acciones?</h3>



<p>En el caso de las acciones, las cosas son un poco diferentes.</p>



<p>Normalmente, las acciones se usan para agregar un comportamiento dentro de WordPress o un plugin.</p>



<p>Las acciones normalmente las usamos para imprimir HTML, agregar estilos o javascript, agregar páginas administrativas, entre otras tareas que no requieran regresar datos.</p>



<p>Un ejemplo de esto es la acción <em>wp_enqueue_scripts</em>, con la cual normalmente se agrega todo el Javascript y el CSS que se usará en el Front-end.</p>



			<div class="github-gist-container">
				<script type="text/javascript" class="script-github-gist" src="https://gist.github.com/kadai/2499ddc6bff7e0907051b4eff19267c1.js?file=accion-001.php"></script>
			</div>
		


<p>Pero incluso podemos ir más allá al extender WordPress.</p>



<p>Por ejemplo, podemos usar la acción <em>admin_menu</em> para crear páginas nuevas dentro del back-end de WordPress con la función <em>add_submenu_page</em>.</p>



			<div class="github-gist-container">
				<script type="text/javascript" class="script-github-gist" src="https://gist.github.com/kadai/2499ddc6bff7e0907051b4eff19267c1.js?file=accion-002.php"></script>
			</div>
		


<h3 class="wp-block-heading">¿Qué hay de las funciones anonimas y clases?</h3>



<p>Normalmente el código que nosotros adjuntaremos a los filtros o acciones, para extender WordPress, estarán dentro de una función.</p>



<p>Lo que normalmente implica que se deberá de crear una función dedicada totalmente a dicho filtro o acción. Misma que estará disponible para el resto de la aplicación.</p>



<p>Una forma de solucionar esto es <em>declarando</em> la función de callback de manera anónima al momento de pegarnos al filtro o acción.</p>



<p>Por ejemplo, podemos hacer lo siguiente:</p>



			<div class="github-gist-container">
				<script type="text/javascript" class="script-github-gist" src="https://gist.github.com/kadai/2499ddc6bff7e0907051b4eff19267c1.js?file=annon-001.php"></script>
			</div>
		


<p>De esta forma, la función estará solamente disponible para el filtro la cual la invocó.</p>



<p>Sin embargo, esto también implica que nuestro código se vuelve poco flexible.</p>



<p>Por ejemplo, una ventaja de usar el método tradicional, es que podemos usar <a rel="noreferrer noopener" aria-label="remove_filter (opens in a new tab)" href="https://developer.wordpress.org/reference/functions/remove_filter/" target="_blank"><em>remove_filter</em></a> para quitar código que ya este adjuntado. Algo que no es posible con las funciones anónimas.</p>



<p>En el caso de las <em>clases</em>, nosotros debemos de <em>dedicar</em> el método <em>__construct</em> para definir las acciones y filtros que usaremos.</p>



<p>Recordando que, al momento de agregar los filtros o acciones, deberemos referenciar la propia clase:</p>



			<div class="github-gist-container">
				<script type="text/javascript" class="script-github-gist" src="https://gist.github.com/kadai/2499ddc6bff7e0907051b4eff19267c1.js?file=class-001.php"></script>
			</div>
		


<h3 class="wp-block-heading">Extiende tus temas o plugins con filtros y acciones</h3>



<p>Los filtros y las acciones no son exclusivas del núcleo principal de WordPress, si no que estos pueden ser implementados tanto en temas como en plugins.</p>



<p>Con esas definiciones, nosotros podemos saber que datos podemos cambiar de otro software desarrollado para WordPress.</p>



<p>Incluso podemos indicarle a otros programadores donde pueden adjuntar funciones para extender la funcionalidad de nuestro software.</p>



<p>Por ejemplo, para agregar un filtro a un tema o plugin, solo hace falta agregar algo como esto:</p>



			<div class="github-gist-container">
				<script type="text/javascript" class="script-github-gist" src="https://gist.github.com/kadai/2499ddc6bff7e0907051b4eff19267c1.js?file=applyfilters-001.php"></script>
			</div>
		


<p>En este caso se creo un filtro de nombre <em>filtrar_valor</em> con <a rel="noreferrer noopener" aria-label="apply_filters (opens in a new tab)" href="https://developer.wordpress.org/reference/functions/apply_filters/" target="_blank"><em>apply_filters</em></a> al cual se pueden adjuntar otras piezas de software usando la función <em>add_filter</em>.</p>



<p>Debido a que se trata de un filtro, debemos asegurarnos de que el resultado sea asignado a una variable. Preferentemente la propia variable filtrada.</p>



<p>Pero eso cambia cuando se usa la función <em><a rel="noreferrer noopener" aria-label="do_action (opens in a new tab)" href="https://developer.wordpress.org/reference/functions/do_action/" target="_blank">do_action</a></em>, con la cual definimos acciones. En ese caso no hace falta asignar ningún valor.</p>



			<div class="github-gist-container">
				<script type="text/javascript" class="script-github-gist" src="https://gist.github.com/kadai/2499ddc6bff7e0907051b4eff19267c1.js?file=actions-001.php"></script>
			</div>
		


<h3 class="wp-block-heading">Extender WordPress y plugins: Encuentra esos filtros y acciones</h3>



<p>Otra de las cosas que puedes hacer con las funciones <em>apply_filters</em> y <em>do_action</em> es el encontrar donde podemos extender el software.</p>



<p><em>¿Quieres cambiar algo de un plugin pero no sabes donde se puede? ¿Quieres hacer algo pero solo se te ocurre el modificar el original?</em></p>



<p>La solución está en buscar por las funciones <em>apply_filters</em> y <em>do_action</em> en el código fuente.</p>



<p>Muchos desarrolladores agregan filtros y acciones a sus plugins o temas para permitirle a otros hacer más. Un buen ejemplo de esto es el caso que tuve con <a rel="noreferrer noopener" aria-label="Swift Performance (opens in a new tab)" href="https://kadai.com.mx/2018/10/31/swift-performance-lite-acelera-tu-sitio-web/" target="_blank">Swift Performance</a>.</p>



<p>No siempre encontrarás documentación sobre estos hooks, pero ver la función en el contexto de la aplicación te ayudará a entender que es lo que sucede.</p>



			<div class="github-gist-container">
				<script type="text/javascript" class="script-github-gist" src="https://gist.github.com/kadai/2499ddc6bff7e0907051b4eff19267c1.js?file=swift-context.php"></script>
			</div>
		


<p>A veces, solo hace falta encontrar el hook correcto en el código para hacer las cosas.</p>



<h3 class="wp-block-heading">Aprende a usar las prioridades y argumentos</h3>



<p>Otra de las claves para extender WordPress correctamente es el saber en que momento debemos de ejecutar nuestro código.</p>



<p>Tanto <em>add_filter</em> como <em>add_action</em> tienen un parámetro de prioridad, el cual es muy importante para definir correctamente el orden de ejecución.</p>



<p>La prioridad está representada en un número, el cual mientras sea más bajo, más tarde se ejecutará el código que queremos. El default es 10.</p>



<p>Esta prioridad es de gran ayuda en casos en los cuales queremos hacer algo antes que los demás plugins, por ejemplo.</p>



<p>Con una prioridad de 5, podríamos entonces cargar nuestros scripts con la acción <em>wp_enqueue_scripts</em> antes de que otras librerías lo hagan.</p>



			<div class="github-gist-container">
				<script type="text/javascript" class="script-github-gist" src="https://gist.github.com/kadai/2499ddc6bff7e0907051b4eff19267c1.js?file=earlier-001.php"></script>
			</div>
		


<p>Pero con una prioridad de 999, nos aseguramos de que todo lo demás ya haya terminado. Por si queremos filtrar los datos que otro plugin cambió, o asegurarnos de que una dependencia ya exista.</p>



<p>Finalmente, el último parametro de <em>add_filter</em> o <em>add_action</em> nos permite definir hasta cuantos parametros de entrada vamos a aceptar desde el filtro o acción.</p>



<p>Normalmente solo se pasa un parametro. Pero en algunas ocaciones, se pasan más datos desde las funciones <em>apply_filters</em> o <em>do_action</em>.</p>



<p>Cuando es así, y queremos usar esos datos, podemos indicarle a WordPress que queremos esos datos:</p>



			<div class="github-gist-container">
				<script type="text/javascript" class="script-github-gist" src="https://gist.github.com/kadai/2499ddc6bff7e0907051b4eff19267c1.js?file=arguments-001.php"></script>
			</div>
		


<h3 class="wp-block-heading">Para cerrar</h3>



<p>Como se puede apreciar, el extender WordPress es ralmente sencillo. En especial cuando aprendes a usar y encontrar los puntos en los cuales puedes adjuntar tu propio código.</p>



<p>Personalmente, las acciones son las que más oportunidades ofrecen a la hora de personalizar las funciones. En especial por que se disparan en momentos clave.</p>



<p>Sin embargo, nosotros podemos personalizar practicamente todo. Solo hace falta ver la <a rel="noreferrer noopener" aria-label="lista de acciones (opens in a new tab)" href="https://codex.wordpress.org/Plugin_API/Action_Reference" target="_blank">lista de acciones</a> y de <a rel="noreferrer noopener" aria-label="filtros (opens in a new tab)" href="https://codex.wordpress.org/Plugin_API/Filter_Reference" target="_blank">filtros</a> disponibles en WordPress.</p>



<p>Solo es cuestión de invertir suficiente tiempo en leer el suficiente código e ir probando cual filtro o acción se ajusta  alo que necesitamos.</p>
<p>The post <a href="https://kadai.com.mx/como-extender-wordpress-filtros-acciones/">Filtros y acciones: Como extender WordPress</a> appeared first on <a href="https://kadai.com.mx">Endless Manifesto</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kadai.com.mx/como-extender-wordpress-filtros-acciones/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1489</post-id>	</item>
	</channel>
</rss>
