<?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 WordPress &#187; Endless Manifesto</title>
	<atom:link href="https://kadai.com.mx/category/wordpress/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>Sun, 26 Apr 2020 07:54:42 +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 WordPress &#187; Endless Manifesto</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">126519727</site>	<item>
		<title>[Guía] 4 formas de bloquear por país en WordPress</title>
		<link>https://kadai.com.mx/guia-4-formas-de-bloquear-por-pais-en-wordpress/</link>
					<comments>https://kadai.com.mx/guia-4-formas-de-bloquear-por-pais-en-wordpress/#respond</comments>
		
		<dc:creator><![CDATA[Kadai Crosshansen]]></dc:creator>
		<pubDate>Tue, 21 Apr 2020 00:29:00 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[abuseipdb]]></category>
		<category><![CDATA[código]]></category>
		<category><![CDATA[geoip2]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[servidor]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://kadai.com.mx/?p=1704</guid>

					<description><![CDATA[<p>A veces es necesario el bloquear por país a los visitantes que llegan a un sitio web. Si tenemos acceso a las herramientas necesarias, podemos hacerlo fácilmente. Ya sea usando un plugin o mediante código. ¿Por qué bloquear por país? Una de las razones más importantes para bloquear países es para evitar ataques de bots. [&#8230;]</p>
<p>The post <a href="https://kadai.com.mx/guia-4-formas-de-bloquear-por-pais-en-wordpress/">[Guía] 4 formas de bloquear por país en WordPress</a> appeared first on <a href="https://kadai.com.mx">Endless Manifesto</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>A veces es necesario el bloquear por país a los visitantes que llegan a un sitio web. Si tenemos acceso a las herramientas necesarias, podemos hacerlo fácilmente.</p>



<p>Ya sea usando un plugin o mediante código.</p>



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



<h3 class="wp-block-heading">¿Por qué bloquear por país?</h3>



<p>Una de las razones más importantes para bloquear países es <strong>para evitar ataques de bots</strong>.</p>



<p>Los bots intentan abusar de vulnerabilidades. Buscan por software que no ha sido actualizado. Buscan de cualquier agujero que exista para poder <strong>tomar control de un sitio web</strong>. Por lo cual bloquear ciertos países puede ayudar a <a href="https://dtorrer.com/como-mejorar-la-seguridad-de-wordpress/">mejorar la seguridad</a>.</p>



<p>Pero a la vez, también se puede bloquear por país debido a <strong>cuestiones legales</strong>. O simplemente por que no queremos que <strong>nadie de dicho país pueda acceder a ciertos recursos</strong>, como la zona de administración de WordPress.</p>



<p>Todas estas son razones válidas. Pero, ¿cómo lo podemos lograr?</p>



<h3 class="wp-block-heading">1. Mediante un plugin</h3>



<p>Una de las formas mas sencillas de bloquear por país en WordPress es usando una solución ya desarrollada como un plugin.</p>



<p>Existen multiples soluciones como <a href="http://wordpress.org/plugins/iq-block-country/">iQ Block Country</a> o <a href="https://wordpress.org/plugins/ip2location-country-blocker/">IP2Location Country Blocker</a>. En ambos casos, usan bases de datos que provienen de servicios y que hay que descargar.</p>



<p>Con ambas soluciones, solo necesitas obtener una cuenta en los servicios que usan y descargar la base de datos apropiada. O en su defecto pagar para acceder a los servicios en línea.</p>



<p>Ambos son muy útiles si no existe inconveniente económico. O si no se desea hacer muchos cambios.</p>



<p>Sin embargo, existen otras formas de bloquear por país en WordPress.</p>



<h3 class="wp-block-heading">2. Con un CDN como Cloudflare</h3>



<p>Si el sitio web en WordPress se encuentra detrás de un CDN como CloudFlare, puedes <strong>fácilmente limitar el acceso a ciertos países</strong> solo agregando un pequeño código al archivo<code> functions.php</code> que usa tu tema o con un plugin a medida.</p>



<p>Así, por ejemplo, se puede usar esa característica usando el siguiente código:</p>


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


<p>Con ese pequeño código, se bloquearán todos los clientes que visiten páginas dinámicas y que sean de los<strong> países en la lista «negra»</strong>.</p>



<p>Algo muy importante que hay que indicar, es que las soluciones de plugins o de código como el mostrado no funcionarán siempre si hay un <strong>plugin de cache activado</strong>.</p>



<p>Esto se debe a que los plugins de cache, en la mayoría de los casos, crean páginas estáticas para enviar en vez de las páginas dinámicas.</p>



<p>Debido a esto, el código no se ejecutará. Pero si ese mismo usuario <strong>intenta acceder a la página de login</strong>, entonces sí será bloqueado.</p>



<h3 class="wp-block-heading">3. Mediante una consulta a AbuseIPDB</h3>



<p>En una entrada anterior hablé de como agregar la<a href="https://kadai.com.mx/como-agregar-la-lista-negra-de-abuseipdb-al-firewall/"> lista negra de AbuseIPDB</a> a un servidor. Pero dicho servicio ofrece <strong>mucho más que solo la lista negra</strong>.</p>



<p>Cuando se consulta una dirección IP a su <a href="https://docs.abuseipdb.com/#check-endpoint">check endpoint</a>, nosotros obtenemos toda una <strong>serie de información del cliente</strong>.</p>



<p>Esta información incluye datos como <strong>país de origen</strong> e incluso una calificación de cual probable es que <strong>trate de abusar de algún recurso</strong>.</p>



<p>Toda esta información es útil para evitar ataques o incluso fraudes para las tiendas en línea.</p>



<p>Así, con el siguiente script, nosotros podemos bloquear a un visitante tanto por su país como por su puntuación (si esta es mayor a 50):</p>


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


<p>Igualmente, para evitar realizar consultas de forma constante, guarda los resultados en un <a href="https://kadai.com.mx/hooks-y-transients-en-wordpress/">transient de WordPress</a>. Así le generamos la menor molestia a los usuarios legitimos.</p>



<p>Pero, como se menciono antes, esto <strong>solo funciona en las páginas dinámicas</strong>. Aquellas que se encuentran servidas por el caché aún pueden ser visitadas por personas de los países bloqueados.</p>



<h3 class="wp-block-heading">4. Bloquear por país usando la base de datos de GeoIP2</h3>



<p>MaxMind ofrece la base de datos GeoIP2 Lite de forma gratuita. La cual se puede <a href="https://dev.maxmind.com/geoip/geoip2/geolite2/">descargar desde su sitio web</a> con tan solo registrarse.</p>



<p>Igualmente, ellos proporcionan un paquete con el cual se puede acceder a su <a href="https://github.com/maxmind/GeoIP2-php">base de datos usando PHP</a>. Con la cual se vuelve muy sencillo el acceder a los datos.</p>



<p>Solo hace falta descargar el <a href="https://github.com/maxmind/GeoIP2-php/releases">archivo phar</a> o usar composer para agregar el proyecto a un plugin. Tras lo cual se puede agregar y usar de la siguiente manera:</p>


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


<p>De esta forma, estaríamos usando entonces ya usando la base de datos para bloquear a los visitantes de los países deseados.</p>



<h3 class="wp-block-heading">Plugin de WordPress con GeoIP2</h3>



<p>He desarrollado un plugin sencillo, el cual usa la base de datos de GeoIP2 para bloquear a los visitantes de los países seleccionados:</p>



<div class="wp-block-file"><a href="https://kadai.com.mx/wp-content/uploads/2020/04/simple-country-block.zip">simple-country-block</a><a href="https://kadai.com.mx/wp-content/uploads/2020/04/simple-country-block.zip" class="wp-block-file__button" download>Download</a></div>



<p>Su uso es extremadamente sencillo y viene tanto en español (España y México) como en ingles.</p>



<p>Para usarlo, solo hace falta instalarlo e ir a <strong>Herramientas > Bloquear por país</strong>. Solo debes de tener cuidado de no seleccionar el país en el cual te encuentras, o el sistema podría evitar que ingreses.</p>



<p>En caso de encuentres algún problema, puedes ponerte conmigo en contacto.</p>



<h3 class="wp-block-heading">Conclusiones sobre como bloquear por país</h3>



<p>Bloquear por país a un visitantes es relativamente sencillo. Aunque se <strong>necesita de herramientas adicionales</strong> para poder obtener la información necesaria para hacerlo.</p>



<p>La dirección IP por si misma no aporta esa información. Pero es fácil obtener detalles adicionales si se <strong>cuenta con los recursos necesarios</strong>.</p>



<p>Hoy en día prácticamente todo está a un API o Base de Datos de distancia.</p>
<p>The post <a href="https://kadai.com.mx/guia-4-formas-de-bloquear-por-pais-en-wordpress/">[Guía] 4 formas de bloquear por país en WordPress</a> appeared first on <a href="https://kadai.com.mx">Endless Manifesto</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kadai.com.mx/guia-4-formas-de-bloquear-por-pais-en-wordpress/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1704</post-id>	</item>
		<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>
		<item>
		<title>Swift Performance Lite: Acelera tu Sitio Web</title>
		<link>https://kadai.com.mx/swift-performance-lite-acelera-tu-sitio-web/</link>
					<comments>https://kadai.com.mx/swift-performance-lite-acelera-tu-sitio-web/#respond</comments>
		
		<dc:creator><![CDATA[Kadai Crosshansen]]></dc:creator>
		<pubDate>Wed, 31 Oct 2018 18:59:24 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[sitio web]]></category>
		<category><![CDATA[swift performance]]></category>
		<category><![CDATA[w3 total cache]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wp super cache]]></category>
		<guid isPermaLink="false">https://kadai.com.mx/?p=1456</guid>

					<description><![CDATA[<p>Swift Performance es un plugin de WordPress relativamente nuevo, del cual me tope por recomendaciones en la red. Tras probarlo por algún algún tiempo, me ha dejado sorprendido. Recientemente escribí sobre la migración que realice de W3 Total Cache a WP Super Cache. En el cual explique algunos problemas que tuve con W3 Total Cache. [&#8230;]</p>
<p>The post <a href="https://kadai.com.mx/swift-performance-lite-acelera-tu-sitio-web/">Swift Performance Lite: Acelera tu Sitio Web</a> appeared first on <a href="https://kadai.com.mx">Endless Manifesto</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Swift Performance es un plugin de WordPress relativamente nuevo, del cual me tope por recomendaciones en la red. Tras probarlo por algún algún tiempo, me ha dejado sorprendido.</p>



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



<p>Recientemente escribí sobre la migración que realice de <a href="https://kadai.com.mx/2018/07/15/adios-w3-total-cache-hola-wp-super-cache/" target="_blank" rel="noreferrer noopener">W3 Total Cache a WP Super Cache</a>. En el cual explique algunos problemas que tuve con W3 Total Cache.</p>



<p>Sin embargo, la solución de <em>WP Super Cache + Autoptimize</em> no me tenia del todo contento. Las cosas se podían mejorar. En especial, el rendimiento de ambos plugins. Ya que no era de mi completo agrado.</p>



<p>Es ahí que escuche de <a href="https://wordpress.org/plugins/swift-performance-lite/" target="_blank" rel="noreferrer noopener">Swift Performance Lite</a> y decidí probarlo.</p>



<h3 class="wp-block-heading">Instalando y probando Swift Performance</h3>



<p>Tras instalar Swift Performance Lite, una de las cosas que debemos de hacer primero es el ejecutar su Wizard de instalación.</p>



<p>La gran ventaja es que prácticamente todo esta automatizado. El plugin detecta correctamente muchas de las opciones del entorno. Además de que mostrará cualquier problema que tenga el servidor.</p>



<p>Con lo cual sabemos que debemos cambiar o instalar para mejorar el desempeño en general.</p>



<p>En el Wizard de Instalación podemos incluso elegir muchas de las opciones más importantes. Como la forma en la cual controlaremos cuando se expira el cache. O si queremos incluso purgar el cache de Cloudflare, si usamos esa solución.</p>



<div class="wp-block-image"><figure class="aligncenter"><img fetchpriority="high" decoding="async" width="760" height="873" src="https://kadai.com.mx/wp-content/uploads/2018/10/002-swift-performance-lite-wizard.png" alt="Imagen de las opciones del Wizard de Instalación de Swift Performance Lite." class="wp-image-1458" srcset="https://kadai.com.mx/wp-content/uploads/2018/10/002-swift-performance-lite-wizard.png 760w, https://kadai.com.mx/wp-content/uploads/2018/10/002-swift-performance-lite-wizard-480x551.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 760px, 100vw" /></figure></div>



<p>Además incluye un minificador de código Javascript y CSS. Que si bien ya no es tan extremadamente necesario, siempre es bueno tener esas opciones.</p>



<p>Con la configuración detectada por Swift Performance Lite, se tiene una base sólida sobre la cual trabajar.<br></p>



<p>Dependiendo de las condiciones de tu servidor, el desempeño se puede sentir incluso mejor que con W3 Total Cache o WP Super Cache.</p>



<p>Personalmente, he encontrado que el desempeño puede ser mejor que con los plugins antes mencionados.</p>



<h3 class="wp-block-heading">Afinando Swift Performance Lite</h3>



<p>Sin embargo, en algunos casos, se necesita de realizar algunos cambios a la configuración. En especial si usamos software adicional o si observamos comportamientos erráticos.</p>



<p>En mi caso, me gusta combinar Javascript y CSS externo. Con lo cual están disponibles aunque el medio original tenga problemas.</p>



<p>Para activarlo, debemos de ir a <strong><em>Settings » Optimization » Scripts</em></strong> y asegurarnos de la opción de <strong><em>Exclude 3rd Party Scripts</em></strong> este desactivada.</p>



<p>Ahí mismo, debemos de indicarle a Swift Performance que recursos queremos omitir a la hora de combinar scripts. En mi caso, declaro los siguientes:<br></p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" width="785" height="139" src="https://kadai.com.mx/wp-content/uploads/2018/10/003-swift-performance-lite-excluir-scripts.png" alt="Excluyendo scripts en Swift Performance Lite" class="wp-image-1459" srcset="https://kadai.com.mx/wp-content/uploads/2018/10/003-swift-performance-lite-excluir-scripts.png 785w, https://kadai.com.mx/wp-content/uploads/2018/10/003-swift-performance-lite-excluir-scripts-480x85.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 785px, 100vw" /></figure></div>



<p>Como se puede ver, es relativamente sencillo el decirle que recursos no se han de combinar. Esto es realmente útil si encontramos problemas o si el cache crece demasiado rápido.</p>



<p>Otra de las opciones que ofrece Swift Performance es la posibilidad de usar el Lazyload de imágenes. Esta característica se encuentra bajo <em><strong>Settings » Media » Images</strong></em>.</p>



<p>Ahí podemos decidir si queremos usar esta opción y que condiciones causarán que se cargue la imagen completa.</p>



<h3 class="wp-block-heading">Páginas 404, Archivos y Autores: ¿Agregarlas al Cache?</h3>



<p>Otra de las opciones que permite Swift Performance Lite es la posibilidad de almacenar en el cache las páginas de error HTTP 404 (no encontrado), las páginas de los archivos o de los perfiles.</p>



<p>Si bien el guardar en cache estás páginas suena tentador, es algo que se debe de analizar profundamente.</p>



<p>Personalmente decidí no permitir que se agreguen estas páginas al cache, ya que pueden interferir con las re-direcciones o registros de apache.</p>



<p>Sin embargo, puedes encontrar esta opción en <em><strong>Settings » Caching » General</strong></em>.</p>



<p>Igualmente Swift Performance nos permite decidir si queremos guardar en el cache ciertas páginas como son end-points del REST API, Feeds, etc.</p>



<p>En <strong><em>Settings » Caching » Exceptions</em></strong> encontrarás estas opciones.</p>



<p>Si consideras que te será útil, puedes desactivar los casilleros. Pero personalmente he encontrado que pueden generar que el tamaño del cache crezca mucho.</p>



<p>Dependerá de cada caso si se ha de activar o no.</p>



<h3 class="wp-block-heading">Otras opciones de Swift Performance Lite</h3>



<p>Además de encargarse del cache, Swift Performance también nos permite realizar otras tareas. Como lo es el realizar un mantenimiento a nuestra Base de Datos de WordPress.</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" width="468" height="184" src="https://kadai.com.mx/wp-content/uploads/2018/10/004-swift-performance-lite-optimize-database-e1540949230425.png" alt="" class="wp-image-1460" srcset="https://kadai.com.mx/wp-content/uploads/2018/10/004-swift-performance-lite-optimize-database-e1540949230425.png 468w, https://kadai.com.mx/wp-content/uploads/2018/10/004-swift-performance-lite-optimize-database-e1540949230425-300x118.png 300w, https://kadai.com.mx/wp-content/uploads/2018/10/004-swift-performance-lite-optimize-database-e1540949230425-20x8.png 20w" sizes="(max-width: 468px) 100vw, 468px" /></figure></div>



<p>Si bien el tipo de herramientas que ofrece son básicas, como es <em>Reindexar</em> u <em>Optimizar la Base de Datos</em>, <em>Eliminar Transients</em>, <em>Revisiones</em>, <em>Comentarios </em>o <em>Usuarios</em>; estas son generalmente las que más se usarán para obtener una pequeña mejora en el desempeño. Especialmente notorio si la Base de Datos es grande.<br></p>



<p>Una opción, relacionada al mantenimiento, que es realmente bienvenida y que nos ahorra el tener que depender de otra herramienta adicional.<br></p>



<p>Finalmente, otra de las opciones adicionales en Swift Performante Lite, es la del Plugin Organizer.</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" width="325" height="184" src="https://kadai.com.mx/wp-content/uploads/2018/10/005-swift-performance-lite-plugin-organizer.png" alt="" class="wp-image-1461" srcset="https://kadai.com.mx/wp-content/uploads/2018/10/005-swift-performance-lite-plugin-organizer.png 325w, https://kadai.com.mx/wp-content/uploads/2018/10/005-swift-performance-lite-plugin-organizer-300x170.png 300w, https://kadai.com.mx/wp-content/uploads/2018/10/005-swift-performance-lite-plugin-organizer-20x11.png 20w, https://kadai.com.mx/wp-content/uploads/2018/10/005-swift-performance-lite-plugin-organizer-150x85.png 150w" sizes="(max-width: 325px) 100vw, 325px" /></figure></div>



<p>Con esta, nosotros podemos indicar en que circunstancias se deben de desactivar ciertos plugins. Ya sea si se visita una página en especifico, si el usuario actual tiene un determinado nivel, si se está ejecutando en contexto AJAX, etc.</p>



<p>Esta opción, si es configurada correctamente, puede ayudar a mejorar el rendimiento del sitio web en ciertos escenarios. En especial es útil si se quieren optimizar los recursos en un entorno limitado o con alta demanda.</p>



<h2 class="wp-block-heading">Problemas con Swift Performance Lite</h2>



<p>Por desgracia, no todo es miel sobre hojuelas. Algo que en verdad ha de esperarse cuando se prueba un plugin nuevo.</p>



<p>Sin embargo estos problemas pueden ser solucionados relativamente fácil, ya que solo hace falta aplicar pequeños parches de código. He visto buen potencial en este plugin que he decidido seguir adelante con este a pesar de esos pequeños detalles.</p>



<p>Esto son algunos de los problemas que he encontrado y como puedes solucionarlos:</p>



<h4 class="wp-block-heading">1. Swift Performance guarda en cache páginas de error</h4>



<p>Si tienes soluciones de seguridad para WordPress como <a href="https://wordpress.org/plugins/wordfence/" target="_blank" rel="noreferrer noopener">Wordfence</a>, es muy posible que en algunos escenarios te encuentres con problemas si usas Swift Performance Lite.</p>



<p>Además de Wordfence, yo también cuento con soluciones de seguridad adicionales creadas a medida.</p>



<p>En ambos casos, observe que los errores 503 de Wordfence y los 403 de mi solución eran guardados en el cache de Swift Performance Lite.</p>



<p>Peor aún, las páginas de error generadas y guardadas en el cache le eran mostradas a los visitantes como si fuera la correcta.</p>



<p>En casos como este, normalmente buscarías los códigos de error en el Log de Apache. Pero estos no aparecian por ningún lado. Resulto que estaban en el registro con códigos HTTP 200.<br></p>



<p>Eventualmente encontré el origen del problema en Swift Performance y tras revisar su código también la forma de solucionar ese tipo de problemas:</p>



View the code on <a href="https://gist.github.com/kadai/5afeb2356e628d788577d1f70e2eb5dc">Gist</a>.



<p>En este ejemplo, usamos el filtro <code>swift_performance_is_cacheable</code> junto con la función <code>http_response_code</code> para obtener el estado actual de la petición y saber si se debe de permitir que se almacene en el cache.</p>



<p>En este caso, use una lista predeterminada de códigos de error típicos, pero se puede comparar solamente contra el código HTTP 200:</p>



View the code on <a href="https://gist.github.com/kadai/5afeb2356e628d788577d1f70e2eb5dc">Gist</a>.



<p>Sin embargo, en este caso en especifico, se requerirá realizar pruebas para saber si genera los resultados deseados.</p>



<h4 class="wp-block-heading">2. Swift Performance agrega páginas inesperadas al warmup</h4>



<p>Otro mal hábito de Swift Performance Lite es el hecho de que agrega a su tabla de warmup recursos como el <em>robots.txt</em> e incluso end-points del REST API, sitemaps, entre otros.<br></p>



<p>Además, cuando algún bot intenta acceder a un recurso vulnerable, también se agrega esa página a la tabla de warmup de Swift. Esto si se regresó un error diferente al de no encontrado.</p>



<p>Si queremos evitar que Swift haga esto, podemos definir que clase de urls se deben de excluir desde el back-end de WordPress.</p>



<p>Pero también lo podemos hacer usando un poco de código:</p>



View the code on <a href="https://gist.github.com/kadai/5afeb2356e628d788577d1f70e2eb5dc">Gist</a>.



<p>En este caso, se usó de nueva cuenta el filtro <code>swift_performance_is_cacheable</code> para filtrar si Swift Performance deberá de guardar la página en el cache.<br></p>



<p>Entonces se compara la variable <code>$_SERVER['REQUEST_URI']</code> contra un array pre-definido.</p>



<p>La ventaja de este método es que la lista no puede ser modificada desde el plugin, con lo cual prevenimos que la lista sea eliminada si se restauran los valores por defecto de Swift Performance.<br></p>



<p>Otra alternativa a esta solución es el usar la propiedad <var>$wp-&gt;request</var> que ofrece WordPress. Sin embargo, esto solo funcionará en el front-end.</p>



<p>Una limitación que puede ser problemática, en especial si queremos filtrar resultados que incluyan páginas del back-end.</p>



<p>Finalmente, también puedes obtener el valor original usando&nbsp; <code>filter_input(INPUT_SERVER, 'REQUEST_URI')</code>. En especial si sospechas que otro plugin manipula esta variable global.<br></p>



<h4 class="wp-block-heading">3. No se eliminan algunos de los archivos del Cache de Swift Performance Lite</h4>



<p>Otro de los problemas de Swift Performance, e incluso de W3 Total Cache, es que una vez que ha expirado un elemento del cache, este no siempre se elimina.</p>



<p>Estos archivos pueden permanecer guardados ahí por tiempo indefinido.</p>



<p>Si tenemos muchos visitantes o múltiples páginas, esto puede hacer que el cache crezca muy rápido a un tamaño excesivo.</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="539" height="127" src="https://kadai.com.mx/wp-content/uploads/2018/10/006-swift-performance-lite-cache-size.png" alt="Ejemplo del tamaño de cache generado por Swift Performance Lite." class="wp-image-1464" srcset="https://kadai.com.mx/wp-content/uploads/2018/10/006-swift-performance-lite-cache-size.png 539w, https://kadai.com.mx/wp-content/uploads/2018/10/006-swift-performance-lite-cache-size-480x113.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 539px, 100vw" /></figure></div>



<p>En este caso, el cache llego a ser de casi 2GB. Lo cual claramente muestra un problema por que solo se tienen 79 páginas en la tabla de warmup.</p>



<p>¿De donde ha salido todo los demás?<br></p>



<p>Una solución rápida es simplemente limpiar el cache manualmente a intervalos regulares. Pero puede ser tedioso después de un tiempo o si se tienen múltiples sitios web que administrar.</p>



<p>Una solución más práctica es el definir un Cron Job de WordPress y que este haga el trabajo por nosotros:</p>



View the code on <a href="https://gist.github.com/kadai/5afeb2356e628d788577d1f70e2eb5dc">Gist</a>.



<p>En este caso, se están usando las propias clases de Swift Performance para saber el tamaño actual del cache, calcular cual debería de ser su tamaño y eventualmente limpiarlo si es necesario.<br></p>



<p>Adicionalmente, también se puede limpiar el cache una vez al día. En ese caso, se define un cron job el cual solamente haría lo siguiente:</p>



View the code on <a href="https://gist.github.com/kadai/5afeb2356e628d788577d1f70e2eb5dc">Gist</a>.



<p>Hay que tener en mente que, debido a que es un trabajo cron de WordPress, es posible que no siempre se ejecute. Esto en especial en sitios web con poco tráfico.</p>



<p>Para esos casos, es posible el crear un script especial y agregarlo a los trabajos cron del servidor. Pero ello está un poco más allá del alcance de esta entrada.<br></p>



<h4 class="wp-block-heading">4. Multiples Hosts en el cache de Swift Performance Lite</h4>



<p>Cuando se cuenta con una instalación de multisitios, es de esperarse que un plugin como Swift genere una carpeta por cada dominio que sirve contenido desde una instalación en especifico de WordPress.</p>



<p>Sin embargo, a veces esto también sucede con las instalaciones regulares, bajo ciertas condiciones.</p>



<p>Por ejemplo, si cuentas con una instalación de WordPress en un VPS y Apache ha definido a ese servidor virtual como el principal&#8230; entonces es posible que te encuentres con una sorpresa.</p>



<p>Swift Performance crea una carpeta en su directorio de cache por cada dominio que accede a la instalación en donde esta presente. Pero cada una de esas carpetas solo se puede acceder desde el dominio que la creo.</p>



<p>Así, si cuentas con una instalación que se puede acceder desde <code>www.ejemplo.com</code>, <code>ejemplo.com</code> y una IP como <code>123.456.789.012</code>, entonces terminarás con 3 carpetas.</p>



<p>Pero para limpiar el cache generado para <code>123.456.789.012</code>, deberás de ingresar directamente en esa dirección. No puedes limpiar ese cache desde <code>www.ejemplo.com</code>. Pero tampoco la de <code>ejemplo.com</code>.<br></p>



<p>Sin embargo, puedes <em>mostrarle </em>a Swift cuales son los hosts y carpetas que puede ver haciendo uso del filtro <code>swift_performance_enabled_hosts</code>:</p>



View the code on <a href="https://gist.github.com/kadai/5afeb2356e628d788577d1f70e2eb5dc">Gist</a>.



<p>En este caso, nosotros obtuvimos todas las carpetas en root del cache de Swift Performance y los regresamos como si fueran nombres de dominio.</p>



<p>De esta forma, el cache generado para otros dominios se puede ver, administrar y purgar desde el back-end. </p>



<p>Hay que tener en cuenta, por supuesto, que en el caso de las instalaciones multisitio; esta solución puede generar problemas. Por lo cual pudiera necesitar validaciones adicionales.<br></p>



<h4 class="wp-block-heading">5. Problemas cuando se corre WP-CLI con Swift Performance</h4>



<p>Una de las herramientas más importantes para administrar WordPress, desde la línea de comandos, es la de WP-CLI.</p>



<p>Con ella podemos hacer una infinidad de tareas para administrar las instalaciones&nbsp; el software. Sin embargo, Swift Performance parece emitir ciertas advertencias cuando es ejecutado en este tipo de entorno.</p>



<p>Por ejemplo, emite un error cuando intenta usar el indice <code>HTTP_HOST</code>. El cual no se define en contexto de línea de comandos.</p>



<p>Por lo cual, para evitar algunos problemas, o que la salida de la consola pierda formato; siempre es bueno desactivarlo con el siguiente parámetro:</p>



<p><code>wp plugin list --skip-plugins=swift-performance-lite</code></p>



<p>Solo con el agregar la opción <code>--skip-plugins</code>, se puede corregir el pequeño problema. Ya que si no se ejecuta Swift Performance Lite en el entorno CLI, entonces este no tratará de optimizar esas salidas.</p>



<h3 class="wp-block-heading">Conclusiones sobre Swift Performance Lite</h3>



<p>Si bien, como cualquier plugin nuevo, todavía tiene mucho que mejorar; Swift Performance me ha dejado sorprendido en muchas áreas.</p>



<p>Por ejemplo, este es uno de los resultados que he obtenido usando este plugin como solución de cache:</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="733" height="301" src="https://kadai.com.mx/wp-content/uploads/2018/10/007-swift-performance-lite-speed-test.png" alt="Prueba de desempeño del sitio web con Swift Performance Lite" class="wp-image-1467" srcset="https://kadai.com.mx/wp-content/uploads/2018/10/007-swift-performance-lite-speed-test.png 733w, https://kadai.com.mx/wp-content/uploads/2018/10/007-swift-performance-lite-speed-test-480x197.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 733px, 100vw" /></figure></div>



<p>Para nada despreciable. Incluso ya por debajo de un segundo de carga. Algo que invariablemente buscaba lograr, pero me era algo elusivo con otras soluciones.</p>



<p>Claro, siempre ayuda mucho el contar con un servidor optimizado.</p>



<p>Vale la pena el tomarse el tiempo probar este plugin, el cual ofrece buenos beneficios por default. Aunque obtienes mucho más de este una vez sabes donde tienes que apuntalar.</p>



<p>¿Ustedes que opinan al respecto?</p>
<p>The post <a href="https://kadai.com.mx/swift-performance-lite-acelera-tu-sitio-web/">Swift Performance Lite: Acelera tu Sitio Web</a> appeared first on <a href="https://kadai.com.mx">Endless Manifesto</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kadai.com.mx/swift-performance-lite-acelera-tu-sitio-web/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1456</post-id>	</item>
		<item>
		<title>Gutenberg: Opinión del nuevo editor de WordPress</title>
		<link>https://kadai.com.mx/gutenberg-opinion-del-nuevo-editor-de-wordpress/</link>
					<comments>https://kadai.com.mx/gutenberg-opinion-del-nuevo-editor-de-wordpress/#respond</comments>
		
		<dc:creator><![CDATA[Kadai Crosshansen]]></dc:creator>
		<pubDate>Mon, 13 Aug 2018 00:10:43 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[beta release]]></category>
		<category><![CDATA[gutenberg]]></category>
		<category><![CDATA[sitio web]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://kadai.com.mx/?p=1440</guid>

					<description><![CDATA[<p>Recientemente, con la nueva versión 4.9.8 de WordPress, se comenzó a invitar a probar el nuevo editor Gutenberg. Esta es mi opinión y experiencia. Antes de continuar, es importante notar que esta entrada la escribo directamente en Gutenberg. Y que no es la primera vez que escribo sobre este editor. Sin embargo, esta vez se [&#8230;]</p>
<p>The post <a href="https://kadai.com.mx/gutenberg-opinion-del-nuevo-editor-de-wordpress/">Gutenberg: Opinión del nuevo editor de WordPress</a> appeared first on <a href="https://kadai.com.mx">Endless Manifesto</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Recientemente, con la nueva versión 4.9.8 de WordPress, se comenzó a invitar a probar el nuevo editor Gutenberg. Esta es mi opinión y experiencia.</p>



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



<p>Antes de continuar, es importante notar que esta entrada la escribo directamente en Gutenberg. Y que <a href="https://kadai.com.mx/2017/05/08/gutenberg-for-wordpress/" target="_blank" rel="noopener">no es la primera vez</a> que escribo sobre este editor.</p>



<p>Sin embargo, esta vez se encuentra mucho más maduro. Aunque todavía le hace falta mucho.</p>



<h3 class="wp-block-heading">Gutenberg: Impresiones de la última versión<br/></h3>



<p>Con relación a lo ultimo que había probado. El cambio es muy significativo.</p>



<p>En especial a lo que respecta a los bloques. A la forma tan natural en la cual se les puede editar, manipular o crear. De todas las posibilidades.</p>



<p>Se siente como un editor visual, pero mucho más ligero. Ofreciendo un set de opciones base para poder crear entradas y páginas visualmente ricas.</p>



<p>Por supuesto, no remplaza a los constructores visuales más completos como DIVI o Visual Composer. Aunque se vuelve una alternativa y comparte algunas cosas de estos.</p>



<p>Por ejemplo, puedes crear bloques reusables e incluso clonarlos. Estas son algunas funcionalidades básicas que es bueno ver en Gutenberg.</p>



<p>Lo cual facilitará la creación.</p>



<p>Lo mejor de todo está en que podemos ver como será nuestro contenido mientras editamos. No hay necesidad usar el botón de Preview constantemente.</p>



<p>Casi no hay diferencias entre lo que vemos y obtenemos. Esto permite enfocarnos más en escribir y menos en solucionar problemas.</p>



<h3 class="wp-block-heading">Detalles a mejorar en Gutenberg</h3>



<p>Sin embargo, no todo es miel sobre hojuelas con el nuevo editor.</p>



<p>Una cosa es muy obvia, y es que cuenta todavía con mucho camino por recorrer para poder remplazar definitivamente a TinyMCE como el editor por defecto.</p>



<p>Por ejemplo, a veces el comportamiento es un poco errático al tratar de agrear bloques. Ya que no aparece el símbolo de «+» en donde debería.</p>



<p>Hay que entender que para agregar un bloque hay que presionar <em>enter</em> al final de un párrafo. O usar un botón que está en la parte superior izquierda.</p>



<p>Pero a veces uno no quiere <em>terminar</em> un bloque de forma arbitraria.</p>



<p>Otros problemas surgen de la integración de otros proyectos, como lo es el <em>Visual Composer</em>. El cual, al menos en los sitios que manejo, muestra los shortcodes en vez del editor.</p>



<p>No hay forma de editar los contenidos cuando Gutenberg está activo, ya que hasta el editor Front-End no funciona de forma adecuada. Puede ser un problema del propio Visual Composer, pero es un ejemplo de lo que puede pasar con otras piezas de software.</p>



<p>DIVI no parece estar tan afectado, ya que muestra una advertencia al querer editar contenido mediante el nuevo editor. Y hay otros como Elementor, Beaver Builder o Page Origin que quizá pruebe después.</p>



<p>Otro problema está a la hora de agregar imágenes.</p>



<p>Por ejemplo, no podemos seleccionar que tamaño queremos que tenga la imagen. Antes podíamos seleccionar un thumbnail, la imagen completa, o otra opción generada por el tema. <em>Eso no está presente cuando se agregan imágenes desde la librería</em>.</p>



<h3 class="wp-block-heading">Detalles con las entradas y sus datos</h3>



<p>Más problemas están a la hora de tratar de cambiar más datos de las entradas. En mi caso, estoy acostumbrado a crear entradas y cambiarles el autor antes de publicar.</p>



<p>Eso no está disponible en Gutenberg. Al menos no por el momento. Ya que tampoco parece estar disponible en algún lado en el editor. Ni se puede activar.</p>



<p>Como sucede con el editor clásico.</p>



<p>Todos son pequeños detalles que muestran que todavía hay camino por recorrer. Que el software no está del todo listo.</p>



<h3 class="wp-block-heading">Conclusiones sobre Gutenberg</h3>



<p>Personalmente, yo creo que el editor tiene mucho potencial.</p>



<p>La experiencia de escribir ha sido placentera. Se siente fluido y en general bastante intuitivo. Mucho más moderno a la hora de generar contenido.</p>



<p>Tiene el potencial de hacer del escribir toda una experiencia. Pero no es un software que esta listo para la mayoría de los sitios web.</p>



<p>Aunque posiblemente para la próxima versión grande de WordPress, ya este listo.</p>



<p>Yo nunca he sido muy fan del editor TinyMCE y de lo rígido que puede ser con el contenido y el HTML. Poder usar un editor liviano para agregar HTML fácilmente y poder moverlo es un gran plus.</p>



<p>Quienes usamos más los elementos de este tipo, lograremos más. Pero como mencione, no es para todos. Ni todos están listos para Gutenberg.</p>



<p>Solo el tiempo dirá si ha sido una buena idea. Pero en especial espero que así sea.</p>



<p>Pero en lo que WordPress 5.0 llega, dale una oportunidad a Gutenberg.<br/></p>
<p>The post <a href="https://kadai.com.mx/gutenberg-opinion-del-nuevo-editor-de-wordpress/">Gutenberg: Opinión del nuevo editor de WordPress</a> appeared first on <a href="https://kadai.com.mx">Endless Manifesto</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kadai.com.mx/gutenberg-opinion-del-nuevo-editor-de-wordpress/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1440</post-id>	</item>
		<item>
		<title>Adiós W3 Total Cache, Hola WP Super Cache</title>
		<link>https://kadai.com.mx/adios-w3-total-cache-hola-wp-super-cache/</link>
					<comments>https://kadai.com.mx/adios-w3-total-cache-hola-wp-super-cache/#respond</comments>
		
		<dc:creator><![CDATA[Kadai Crosshansen]]></dc:creator>
		<pubDate>Mon, 16 Jul 2018 03:20:18 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[w3 total cache]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wp super cache]]></category>
		<guid isPermaLink="false">https://kadai.com.mx/?p=1425</guid>

					<description><![CDATA[<p>Después de unas cuantas experiencias agridulces, finalmente me decidí por moverme definitivamente a WP Super Cache. Para dejar atrás definitivamente a mi solución anterior: W3 Total Cache. Estas son mis razones. Anteriormente había hablado de W3 Total Cache. De como me estaba ayudando mucho mejorando el sitio web. Debo de admitir que este plugin era [&#8230;]</p>
<p>The post <a href="https://kadai.com.mx/adios-w3-total-cache-hola-wp-super-cache/">Adiós W3 Total Cache, Hola WP Super Cache</a> appeared first on <a href="https://kadai.com.mx">Endless Manifesto</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Después de unas cuantas experiencias agridulces, finalmente me decidí por moverme definitivamente a WP Super Cache. Para dejar atrás definitivamente a mi solución anterior: W3 Total Cache.</p>
<p>Estas son mis razones.</p>
<p><span id="more-1425"></span></p>
<p>Anteriormente había hablado de <a href="https://kadai.com.mx/2017/07/10/mejorar-wordpress-con-w3-total-cache/" target="_blank" rel="noopener">W3 Total Cache</a>. De como me estaba ayudando mucho mejorando el sitio web.</p>
<p>Debo de admitir que este plugin era prácticamente mi favorito para realizar la tarea de caching. Algo importante si realmente quieres tener un sitio web rápido, además de que me ahorraba tiempo de procesador.</p>
<p>Sin embargo, recientemente comencé a notar problemas. Mismos que me hicieron mirar a <strong>WP Super Cache</strong> de nueva cuenta.</p>
<h3>Errores en todas partes con W3 Total Cache</h3>
<p>Una de las cosas que más me agradaban de este plugin de WordPress, es que podía configurarse de acuerdo a mis necesidades. El gran número de opciones abría grandes posibilidades de optimizaciones. De mejoras puntuales de acuerdo a mis necesidades.</p>
<p>Sin embargo, siempre hay cosas que salen mal. Y eso es en verdad cierto con software complejo.</p>
<p>El primer síntoma estuvo en las entradas programadas. Comencé a notar que estas arrojaban el error <em>missed schedule</em> con frecuencia. Molesto, pero nada más que eso&#8230; e incluso errores esporádicos que parecían no tener sentido.</p>
<p>Todas las soluciones en la web indicaban que debía de instalar algún plugin.</p>
<p>No. No lo iba a hacer. No tenia sentido que algo así sucediera, ya que el servidor no tenia razón de estar comportándose de forma errática.</p>
<p>Tras investigar un poco, resultó que el <strong>Object Cache</strong> estaba causando problemas en mi back-end. Tras desactivar esa característica, los problemas cesaron&#8230; al menos temporalmente.</p>
<h3>Las cosas se complican todavía más</h3>
<p>El segundo gran problema sucedió con <strong>admin-ajax.php</strong>. Comencé a notar un número inusual de errores 403 sin una explicación clara.</p>
<p>Me arrojaba el error a mi, a visitantes al azar, e incluso a los bots de google. Esto último imperdonable.</p>
<p>Debido a que las instalaciones que manejo contienen más o menos los mismos plugins&#8230; detectar al culpable seria relativamente sencillo. Tras un análisis, solo se limitaba a W3 Total Cache o a uno de seguridad.</p>
<p>Para agravar más la situación, el problema de <em>missed schedule</em> había regresado.</p>
<p>Fue entonces que la opción de WP Super Cache se volvió mucho más viable.</p>
<p>Ya tenia experiencia con él y sabia que podía hacer el trabajo sin contratiempos.</p>
<h3>WP Super Cache entra al relevo</h3>
<p>A diferencia de W3 Total Cache, <strong>WP Super Cache</strong> tiene opciones muy minimalistas. No eres capaz de configurar absolutamente todo. Aunque no falla en su trabajo: Mejora el rendimiento del sitio web. Sin complicaciones.</p>
<p>Pero para tener una solución completa con WP Super Cache, se requiere de un aplicativo que haga minificación. Ahí es en donde entra Autoptimize. Esto para comprimir las hojas de estilo y los scripts de javascript.</p>
<p>Esto lo debemos de hacer si queremos mejorar aún más el rendimiento y experiencia del usuario.</p>
<p>Aunque si contamos con un servidor rápido, la ganancia puede ser marginal. Pero menos consultas por visita siempre es bueno. En especial si sumamos muchas visitas al día.</p>
<h3>El modo experto de WP Super Cache</h3>
<p>Si bien cuenta con muchas menos opciones, hay algunas cosas que si se pueden hacer. En especial en lo que respecta a activar el uso de reglas en el <em>.htaccess</em>. Esto permite que se pueda saltar parcialmente la ejecución de PHP en algunos casos.</p>
<p>Mientras menos veces se tenga que invocar a PHP, mejor.</p>
<p>Activando el modo experto, y asegurándose de activar los casilleros deseados, da un rendimiento que hace que no extrañe W3 Total Cache. Aunque lo único que no hace WP Super Cache es el asignar las cabeceras cache de Apache para los recursos estáticos.</p>
<p>Pero agregar ese tipo de cosas es trivial. Igualmente se puede agregar rápidamente las reglas que trae W3 Por defecto, dependiendo de las configuraciones.</p>
<h3>Conclusiones sobre el regreso a WP Super Cache</h3>
<p>Si bien soy fanático de tener una herramienta con cientos de opciones, es una pena que encontré que ella causaba más problemas que beneficios. Problemas que no parecían tener soluciones fáciles, o que hacían que no valiera la pena la solución.</p>
<p>Por lo cual el contar con una alternativa más <em>sencilla</em> fue la mejor idea.</p>
<p>Hay algunas cosas que todavía tengo que <em>apuntalar</em>, en especial del lado del servidor. Como son las cabeceras&#8230; aunque <a href="https://kadai.com.mx/2018/05/27/problemas-rocket-loader-cloudflare/" target="_blank" rel="noopener">Cloudflare</a> se encarga por mi de eso.</p>
<p>Pero establecerlas manualmente siempre será mejor para proporcionar una experiencia más uniforme.</p>
<p>Esperemos que no suceda nada inusual esta vez.</p>
<p>The post <a href="https://kadai.com.mx/adios-w3-total-cache-hola-wp-super-cache/">Adiós W3 Total Cache, Hola WP Super Cache</a> appeared first on <a href="https://kadai.com.mx">Endless Manifesto</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kadai.com.mx/adios-w3-total-cache-hola-wp-super-cache/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1425</post-id>	</item>
		<item>
		<title>Problemas con Rocket Loader de Cloudflare</title>
		<link>https://kadai.com.mx/problemas-rocket-loader-cloudflare/</link>
					<comments>https://kadai.com.mx/problemas-rocket-loader-cloudflare/#comments</comments>
		
		<dc:creator><![CDATA[Kadai Crosshansen]]></dc:creator>
		<pubDate>Sun, 27 May 2018 23:39:10 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[cloudflare]]></category>
		<category><![CDATA[problemas]]></category>
		<category><![CDATA[rocket loader]]></category>
		<category><![CDATA[servidor]]></category>
		<category><![CDATA[sitio web]]></category>
		<category><![CDATA[wordfence]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://kadai.com.mx/?p=1368</guid>

					<description><![CDATA[<p>Recientemente he detectado problemas con Rocket Loader en uno de mis sitios web. Y es que se supone que Cloudflare debe de protegerlo, pero en ciertos casos, esto puede causar problemas. En pocas palabras, Cloudflare puede causar un ataque DDoS. ¿Qué sucede con Rocket Loader? Rocket Loader es una característica en estado beta de Cloudflare. [&#8230;]</p>
<p>The post <a href="https://kadai.com.mx/problemas-rocket-loader-cloudflare/">Problemas con Rocket Loader de Cloudflare</a> appeared first on <a href="https://kadai.com.mx">Endless Manifesto</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Recientemente he detectado problemas con Rocket Loader en uno de mis sitios web. Y es que se supone que Cloudflare debe de protegerlo, pero en ciertos casos, esto puede causar problemas.</p>
<p>En pocas palabras, Cloudflare puede causar un ataque DDoS.</p>
<p><span id="more-1368"></span></p>
<h3>¿Qué sucede con Rocket Loader?</h3>
<p>Rocket Loader es una característica en estado beta de <a href="https://dtorrer.com/cloudflare-con-wordpress/" target="_blank" rel="noopener">Cloudflare</a>. Su principal objetivo es mejorar la velocidad de un sitio web. Eso lo hace bien.</p>
<p>Sin embargo, recientemente he estado observando problemas con este.</p>
<p>Por ejemplo, cada vez que he enviado datos de formulario, he observado un número inusual de conexiones. Al principio pensé que se trataba de un ataque.</p>
<p>Pero mientras más busque, es que me fui percatando de que había un problema entre el plugin Wordfence y este servicio de Cloudflare.</p>
<h3>¿Qué es lo que sucedía con WordFence?</h3>
<p>Haciendo la historia corta, empece a ver que mis sitios web generaban errores y que el servidor en el cual estoy «colapsara». Al punto de que necesitaba el reiniciarlo a mano.</p>
<p>Algo que no debería de suceder.</p>
<p>Cuando finalmente comencé a ver los registros de apache, comencé a observar un alto número de llamados a un mismo URL con lo siguiente:</p>
<p><code>/?wordfence_lh=1&amp;hid=...</code></p>
<p>Observé que se hacían estos llamados en oleadas de 20 a 50 conexiones por segundo. Algo que este servidor no podía aguantar.</p>
<p>Al menos no con la configuración presente.</p>
<p>Pero al estar indagando es que fui encontrando de que <a href="https://wordpress.org/support/topic/apparent-attacks-and-why-wordfence-is-mention-in-the-logs/" target="_blank" rel="noopener nofollow">no era el único</a> el cual estaba sufriendo de este problema de WordPress con Wordfence y Cloudflare.</p>
<h3>¿Qué fue lo que pasó entre Rocket Loader y WordPress?</h3>
<p>En un <a href="https://community.cloudflare.com/t/rocket-loader-update-is-active-in-wp-admin/17900/3" target="_blank" rel="noopener nofollow">hilo de la comunidad de Cloudflare</a>, se habla de cambios que se están haciendo a Rocket Loader.</p>
<p>Después de todo, se entiende debido a que es software en estado beta.</p>
<p>Sin embargo, en este caso esto significó problemas que causaron la caída de un servidor. Mientras no es grave, si implica que el riesgo existía todavía.</p>
<p>En su momento se menciono que el problema había sido resuelto. Eso era cierto, ya que desde la semana pasado no volví a ver el problema&#8230; hasta ayer.</p>
<h3>¿Como soluciono la caída de WordPress por Rocket Loader?</h3>
<p>La forma más sencilla de evitar este problema es <em>desactivando por completo Rocket Loader</em>. Como característica beta, no debería de ser usada indiscriminadamente.</p>
<p>Menos en entornos de producción.</p>
<p>La ventaja es que esta característica viene desactivada por defecto. Sin embargo, si la han activado por ti, puedes desactivarla así:</p>
<p><em>Ingresa a Cloudflare &gt; Elige el Dominio &gt; Speed &gt; Rocket Loader</em></p>
<p>Ahí podrás apagar esta característica. De esta forma quizá ya no veas problemas en tu servidor.</p>
<h3>Conclusiones sobre Rocket Loader</h3>
<p>Cloudflare no me había dado <a href="https://kadai.com.mx/2017/05/03/connectivity-issues/" target="_blank" rel="noopener">grandes problemas</a> desde que lo uso hace ya más de 5 años, si no es que más.</p>
<p>Sin embargo, esta característica, que promete mucho, me ha hecho tener que vigilar un poco mejor las opciones que tengo activadas en dicho servicio.</p>
<p>Todos queremos que nuestros sitios web sean rápidos&#8230; sin embargo, a veces eso nos hace el usar software en estado beta, como Rocket Loader, cuando no están listos para producción.</p>
<p>Yo ya sentí en carne propia algunos de sus problemas. Quizá la vuelva a activar cuando este más madura o con Page Rules.</p>
<p>Pero ya veremos.</p>
<h4>Actualización sobre Rocket Loader<em><br />
</em></h4>
<p>Recientemente volví a activar Rocket Loader tratar de obtener más datos sobre este problema. Y así poder reportarlo de forma correcta.</p>
<p>Y es que, tras mirar los registros del servidor, ya no encontré las referencias a Wordfence como antes. Pero a <code>admin-ajax.php</code>. Lo cual cambia un poco el panorama.</p>
<p>La última vez que sufrí el problema fue el pasado 27 de mayo.</p>
<p>Mi problema ahora es que no he podido <em>duplicar</em> este bug. No me ha vuelto a suceder. Es plausible de que necesite esperar un tiempo ante de poder reproducirlo. Aunque igualmente es plausible de que haya sido corregido correctamente.</p>
<p>Pero eso lo veremos en los próximos días.</p>
<p>The post <a href="https://kadai.com.mx/problemas-rocket-loader-cloudflare/">Problemas con Rocket Loader de Cloudflare</a> appeared first on <a href="https://kadai.com.mx">Endless Manifesto</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kadai.com.mx/problemas-rocket-loader-cloudflare/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1368</post-id>	</item>
		<item>
		<title>Formas de agregar scripts externos a WordPress</title>
		<link>https://kadai.com.mx/agregar-scripts-externos-a-wordpress/</link>
					<comments>https://kadai.com.mx/agregar-scripts-externos-a-wordpress/#respond</comments>
		
		<dc:creator><![CDATA[Kadai Crosshansen]]></dc:creator>
		<pubDate>Tue, 07 Nov 2017 20:52:01 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://kadai.com.mx/?p=1027</guid>

					<description><![CDATA[<p>En algunas ocasiones deberemos agregar scripts externos a WordPress. Suena sencillo, pero cuando no están diseñados para la plataforma, puede ser un poquito complicado. Agregar un script debería de ser fácil. Y así es en la mayoría de los casos. Sin embargo hay ocasiones en las cuales los desarrolladores nunca tuvieron en mente WordPress u [&#8230;]</p>
<p>The post <a href="https://kadai.com.mx/agregar-scripts-externos-a-wordpress/">Formas de agregar scripts externos a WordPress</a> appeared first on <a href="https://kadai.com.mx">Endless Manifesto</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>En algunas ocasiones deberemos agregar scripts externos a WordPress. Suena sencillo, pero cuando no están diseñados para la plataforma, puede ser un poquito complicado.</p>



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



<p>Agregar un script debería de ser fácil. Y así es en la mayoría de los casos. Sin embargo hay ocasiones en las cuales los desarrolladores nunca tuvieron en mente WordPress u otro CMS.</p>



<p>Es por eso que a veces se requiere de saber que tan compatible es un código.</p>



<p>Por ejemplo, el siguiente es uno que alguien quería incluir en una instalación de WordPress:</p>



<figure class="wp-block-embed"><div class="wp-block-embed__wrapper">
View the code on <a href="https://gist.github.com/kadai/0ef4efc69bbd8e4fa8d60d4593fa06f9">Gist</a>.
</div></figure>



<p>Parece simple, ¿verdad?</p>



<p>Pero al menos hay un problema evidente: Se necesita de jQuery para poder hacerlo, eso nos dice la primera línea.</p>



<p>Antes de siquiera agregar este código, es importante el tener al menos una idea de lo que hace y sus necesidades. Podemos ver tutoriales en la Internet, pero sin tener una idea será difícil el encontrar una solución real.</p>



<p>Si no tenemos dicha noción, no podremos agregar scripts externos a WordPress de una forma rápida y eficiente.</p>



<h2 class="wp-block-heading">Solucionando el problema de agregar scripts externos a WordPress</h2>



<p>Existen muchas formas de agregar un script en WordPress, sin embargo para este ejemplo hay que tomar ciertas consideraciones. Por ejemplo que la versión de jQuery que se usa en <a href="https://digwp.com/2011/09/using-instead-of-jquery-in-wordpress/" target="_blank" rel="nofollow noopener noreferrer">WordPress es diferente</a>.</p>



<p>El jQuery que está instalado viene en modo de compatibilidad. Por lo cual el símbolo “$” no va a funcionar por defecto. Si el código no fue escrito para funcionar bajo dicho modo, es decir cambiando “$” por jQuery, simplemente este arrojará errores.</p>



<p>Es por ello que se necesita modificar una función alrededor del código para hacerlo funcionar. Debería quedar así:</p>



<figure class="wp-block-embed"><div class="wp-block-embed__wrapper">
View the code on <a href="https://gist.github.com/kadai/0ef4efc69bbd8e4fa8d60d4593fa06f9">Gist</a>.
</div></figure>



<p>De esta forma, debería de poder correr en cualquier instalación estándar de WordPress con el jQuery incluido por defecto. Solo se le hicieron algunos pequeños cambios a la función anónima para permitir usar “$” al resto del código dentro de ella.</p>



<p>Este segmento de código puede ser entonces agregado de múltiples formas, dependiendo de las necesidades. En cualquier caso, debe de ser agregado al footer.</p>



<h3 class="wp-block-heading">1. Agregarlo directamente mediante un widget</h3>



<p>Esta puede ser la forma más sencilla de agregar el código, pero con el inminente riesgo de que no funcione. Al menos no a la primera.</p>



<p>Pero eso se puede resolver si le añadimos una función que espere a que el documento esté listo. De esta manera el script se ejecutará una vez que el documento web se haya cargado por completo.</p>



<p>De esta forma, en el widget de HTML se podría poner lo siguiente:</p>



<figure class="wp-block-embed"><div class="wp-block-embed__wrapper">
View the code on <a href="https://gist.github.com/kadai/0ef4efc69bbd8e4fa8d60d4593fa06f9">Gist</a>.
</div></figure>



<p>No parece complicado. Además de que se puede editar directamente desde la interface web.</p>



<h3 class="wp-block-heading">2. Agregarlo mediante un hook y función</h3>



<p>Usando una función y el hook “wp_footer” podemos agregar el código que queramos al final de la página. Este código lo debemos de pegar dentro del functions.php o similar.</p>



<figure class="wp-block-embed"><div class="wp-block-embed__wrapper">
View the code on <a href="https://gist.github.com/kadai/0ef4efc69bbd8e4fa8d60d4593fa06f9">Gist</a>.
</div></figure>



<p>Gracias a esto, el código deberá de aparecer en la zona de pie de página. No es la forma ideal pero debería de funcionar relativamente bien. Aunque imprimir código así no es la forma más elegante de resolverlo.</p>



<h3 class="wp-block-heading">3. Agregarlo correctamente mediante wp_enqueue_script</h3>



<p>Esta es la <a href="https://developer.wordpress.org/reference/functions/wp_enqueue_script/" target="_blank" rel="nofollow noopener noreferrer">forma correcta</a> de agregar un script jQuery, ya que incluso permite que se pueda “optimizar”. Usar correctamente el hook wp_enqueue_scripts permite hacer muchas cosas a la hora de manipular los script a agregarse.</p>



<figure class="wp-block-embed"><div class="wp-block-embed__wrapper">
View the code on <a href="https://gist.github.com/kadai/0ef4efc69bbd8e4fa8d60d4593fa06f9">Gist</a>.
</div></figure>



<p>Así es, esto es todo lo que se tiene que hacer para agregarlo. Con ello el script será incluido en el front-end para los visitantes, además de que podrá ser optimizado por los plugins de caché disponibles.</p>



<p>Pero para que funcione se debe de crear un archivo *.js y almacenarlo en un lugar accesible dentro del servidor web. O en su defecto se puede aportar una dirección URL completa.</p>



<p>Este método también permite convertir el código fácilmente en un plugin. Lo cual puede facilitar la vida a la hora de realizar actualizaciones. Permitiendo así mantener menos código.</p>



<h3 class="wp-block-heading">¿Qué hay de los plugins para agregar scripts a WordPress?</h3>



<p>Otra de las formas para agregar scripts externos a WordPress es el usar un plugin que facilite el trabajo. Hay muchos de ellos en <a href="https://es-mx.wordpress.org/plugins/tags/custom-js/" target="_blank" rel="noopener nofollow noreferrer">el repositorio</a> que permiten hacerlo. La mayoría con diversas opciones diferentes para cada caso.</p>



<p>Sin embargo, los plugins no siempre solucionan el problema. El cual se agrava si no sabemos como es que JavaScript funciona. Y aún más si no se sabe detectar errores.</p>



<p>Un script puede ser agregado mediante un plugin correctamente. Pero a la hora de ejecutarse, puede arrojar errores. Mismos que impiden su correcta ejecución. Estos errores muchas veces van más allá de lo que un plugin puede solucionar.</p>



<p>En esos casos, es importante mirar entonces a la consola del navegador. Muchas veces encontraremos ahí que es lo que está sucediendo. Como por ejemplo el caso de la «$» de jQuery, la cual ya había explicado. O incluso otros errores como contenido mixto o errores en el código.</p>



<p>Esas son cosas que requieren más pericia para ser corregidas.</p>



<h3 class="wp-block-heading">Conclusiones sobre agregar scripts externos a WordPress</h3>



<p>Agregar scripts de jQuery es relativamente sencillo en WordPress. Sin embargo se deben de tener ciertas nociones para evitar problemas.</p>



<p>En el caso de que algo suceda, siempre es bueno mirar la consola que ofrece el navegador web. Siempre nos dará pistas sobre lo que puede estar pasando. Para el desarrollador, la consola será siempre una de las mejores herramientas.</p>



<p>Además hay que recordar que la versión de jQuery que se incluye previene el uso de “$” en las funciones. Por lo cual hay que encapsular el código si nos muestra ese tipo de errores.</p>



<p>Y cuando todo haya fallado. Siempre será buena idea preguntar. Ya que puede haber alguien dispuesto a ayudar.</p>
<p>The post <a href="https://kadai.com.mx/agregar-scripts-externos-a-wordpress/">Formas de agregar scripts externos a WordPress</a> appeared first on <a href="https://kadai.com.mx">Endless Manifesto</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kadai.com.mx/agregar-scripts-externos-a-wordpress/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1027</post-id>	</item>
		<item>
		<title>Mejorar WordPress con W3 Total Cache</title>
		<link>https://kadai.com.mx/mejorar-wordpress-con-w3-total-cache/</link>
					<comments>https://kadai.com.mx/mejorar-wordpress-con-w3-total-cache/#respond</comments>
		
		<dc:creator><![CDATA[Kadai Crosshansen]]></dc:creator>
		<pubDate>Mon, 10 Jul 2017 17:31:05 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[w3 total cache]]></category>
		<category><![CDATA[website]]></category>
		<guid isPermaLink="false">https://kadai.com.mx/?p=667</guid>

					<description><![CDATA[<p>El Mejorar WordPress con W3 Total Cache es una de las cosas que hay que hacer en toda instalación nueva. En este caso, yo elegí este plugin tras probar varios otros. Este fue el que mejor me funciono, debido a la forma en el cual tengo instalado WordPress. Es por ello que comparto ahora parte [&#8230;]</p>
<p>The post <a href="https://kadai.com.mx/mejorar-wordpress-con-w3-total-cache/">Mejorar WordPress con W3 Total Cache</a> appeared first on <a href="https://kadai.com.mx">Endless Manifesto</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;">El Mejorar WordPress con W3 Total Cache es una de las cosas que hay que hacer en toda instalación nueva. En este caso, yo elegí este plugin tras probar varios otros. Este fue el que mejor me funciono, debido a la forma en el cual tengo instalado WordPress. Es por ello que comparto ahora parte de mis configuraciones.</p>
<p><span id="more-667"></span></p>
<p style="text-align: justify;">Además, ofrece un importante número de opciones que se pueden configurar. Dependiendo de tus necesidades u objetivos. En mi caso, era el obtener un mejor rendimiento absoluto en varios frentes. Después de que los resultados en el PageSpeed Insights habían salido terriblemente mal.</p>
<p style="text-align: justify;">Bueno, exagero un poco en ello. Pero al estar en un hospedaje compartido, es natural que ciertas cosas no corran de lo mejor. Yo espero poder migrar a un mejor ambiente en un momento cercano. Pero en lo que sucede, hay que trabajar con lo que se tiene.</p>
<p style="text-align: justify;">Y un plugin de caché era la opción más natural para lograr los objetivos inmediatos.</p>
<h3>¿Por que usar un plugin como W3 Total Cache?</h3>
<p style="text-align: justify;">La razón más sencilla es por que ya hay buenas alternativas que ya están correctamente escritas. De lo contrario, tendrías que reinventar la rueda. Dichos plugins ya toman en cuenta los problemas más comunes y los solucionan rápidamente.</p>
<p style="text-align: justify;">Igualmente han tratado de seguir los lineamientos de Google, y otras plataformas similares, para realizar las mejoras. Esto buscando que los webmasters no tengan que estar instalando otras herramientas.</p>
<p style="text-align: justify;">Por supuesto, esto no implica que sea la solución a todos los problemas. Hay casos en los cuales requerirás escribir tus propias soluciones, pero ese es un tema para otro día.</p>
<p style="text-align: justify;">En mi caso, esta era la forma más viable de hacer las cosas.</p>
<h3>Preámbulo a la optimización</h3>
<p style="text-align: justify;">Ten en cuenta que estas configuraciones funcionan en mi entorno de trabajo (Apache, PHP7, MariaDB). No necesariamente funcionaran en el tuyo. Hay muchas variables que están en juego, por lo cual al final lo que te funcione a ti pudiera ser diferente.</p>
<p style="text-align: justify;">Ante de empezar, coloque el siguiente código en el footer de mi instalación. Con este, podría ver que tan mal estaba.</p>
<p>View the code on <a href="https://gist.github.com/kadai/33a3adaa3399fdde46aec5428fb4525e">Gist</a>.</p>
<p>Ya con ese código, pude ver resultados similares a este:</p>
<p>View the code on <a href="https://gist.github.com/kadai/33a3adaa3399fdde46aec5428fb4525e">Gist</a>.</p>
<p style="text-align: justify;">Ouch, ¿De donde salían tantas consultas? ¿Como era posible que se consumiera tanto tiempo? Esos números indicaban que había un problema el cual tenia que ser solucionado.</p>
<p style="text-align: justify;">Por supuesto, el primer lugar en donde tenia que mirar es en mi servidor e instalación. Eliminar los plugins innecesarios es algo que se tiene que hacer. Posterior, tuve que cambiar de PHP5 a PHP7. Esto debido a que <a href="http://www.zend.com/en/resources/php7_infographic" target="_blank" rel="nofollow noopener">PHP7 es mucho más rápido que PHP5</a>, además de más seguro.</p>
<p style="text-align: justify;">Por fortuna para mí, esto no generó problemas de compatibilidad. Pero es posible que tengas problemas si antes contabas con mensajes de «funciones obsoletas», ya que muchas de ellas fueron eventualmente eliminadas. Puedes solucionar ese tipo de problemas si no te importa ensuciarte un poco las manos con el código fuente.</p>
<p style="text-align: justify;">Una vez limpiada mi instalación, ganando como 0.2 ms, solo quedaba optimizar lo que quedaba. Los plugins que quedaron eran los que consideré que eran de utilidad y necesarios.</p>
<h3>Configuración de W3 Total Cache</h3>
<p style="text-align: justify;">Trataré de ser breve, ya que el compartir una <a href="http://www.onlinemediamasters.com/w3-total-cache-settings/" target="_blank" rel="nofollow noopener">configuración completa de W3 Total Cache puede ser extensivo</a>. Aunque es bueno el tener una idea de todo lo que puedes lograr con dicho plugin. Aún para la versión gratuita.</p>
<p style="text-align: justify;">Pero si haré incapie en aquellas características en las cuales logre observar una mejora.</p>
<p style="text-align: justify;">Si vas a usar W3 Total Cache en una instalación multisite, lo primero que te recomiendo es activar el mismo para toda la red. Una vez que hayas configurado las opciones más comunes, como el Page Cache, Object Cache y Browser Cache; deberás encontrar la siguiente opción bajo <em>Performance </em>&gt;<em> General Settings</em> y desmarcarla:</p>
<p><div id="attachment_670" style="width: 522px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-670" class="wp-image-670 size-full" src="https://kadai.com.mx/wp-content/uploads/2017/07/Screenshot_20170709_195110.png" alt="" width="512" height="50" srcset="https://kadai.com.mx/wp-content/uploads/2017/07/Screenshot_20170709_195110.png 512w, https://kadai.com.mx/wp-content/uploads/2017/07/Screenshot_20170709_195110-480x47.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 512px, 100vw" /><p id="caption-attachment-670" class="wp-caption-text">Esta es la opción que debe estar o mantenerse desmarcada</p></div></p>
<p style="text-align: justify;">Una vez hecho hayas desmarcado «Use single network configuration file for all sites», podrás efectuar cambios «a medida» para cada sitio de tu red. Para ello, deberás de ir a «General Settings» dentro del Escritorio de cada sitio y buscar a la derecha el botón «Use Specific settings». Deberás de hacer clic sobre el mismo para poder editar las características a medida para ese segmento en cada sitio.</p>
<p style="text-align: justify;">Por ejemplo, en mi caso, mi mayor problema fue con las opciones de Minify. Si bien estoy detrás de CloudFlare, el hacer uso de Minify era importante ya que las hojas de estilo CSS y JavaScript no se estaban combinando. Hacerlo eventualmente iba a ayudar mucho.</p>
<p style="text-align: justify;">Pero aquí no había una solución que funcionase en todos los escenarios.</p>
<h3>Peleándose con Minify en W3 Total Cache</h3>
<p style="text-align: justify;">La posibilidad de «minificar» las hojas de estilo CSS y JavaScript es algo muy importante. Pero, el problema de dicha utilidad es que muchas cosas pueden salir terriblemente mal.</p>
<p style="text-align: justify;">Por ejemplo, compactar el HTML me es útil en este sitio web, pero no en otro. Esto debido a que puede romper el tema y sus características.</p>
<p><div id="attachment_671" style="width: 616px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-671" class="size-full wp-image-671" src="https://kadai.com.mx/wp-content/uploads/2017/07/Screenshot_20170710_001942.png" alt="" width="606" height="320" srcset="https://kadai.com.mx/wp-content/uploads/2017/07/Screenshot_20170710_001942.png 606w, https://kadai.com.mx/wp-content/uploads/2017/07/Screenshot_20170710_001942-480x253.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 606px, 100vw" /><p id="caption-attachment-671" class="wp-caption-text">Algunas de las opciones activadas para minificar HTML</p></div></p>
<p style="text-align: justify;">En el caso de Javascript, «defer» para compactar destruye las páginas hechas en Page Origin, mientras que la opción «async» destruye a Slider Revolution. ¿Que lio verdad? Dejarlos a todos con su gusto con una sola configuración es imposible. La tarea de optimizar se vuelve una de «prueba y error» en el mejor de los casos.</p>
<p><div id="attachment_672" style="width: 608px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-672" class="size-full wp-image-672" src="https://kadai.com.mx/wp-content/uploads/2017/07/Screenshot_20170710_001959.png" alt="" width="598" height="376" srcset="https://kadai.com.mx/wp-content/uploads/2017/07/Screenshot_20170710_001959.png 598w, https://kadai.com.mx/wp-content/uploads/2017/07/Screenshot_20170710_001959-480x302.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 598px, 100vw" /><p id="caption-attachment-672" class="wp-caption-text">Las opciones de JavaScript pueden causar algunos problemas</p></div></p>
<p style="text-align: justify;">En el caso de las hojas de estilo, el problema no es tan prominente. En la mayoría de los casos&#8230; las cosas simplemente funcionaron bien y se pudo optimizar sin mayor problema.</p>
<p style="text-align: justify;">El único inconveniente de tener este tipo de configuraciones, es que deberás de «limpiar el cache» siempre que haya cambios. Eso puede ser un poco molesto cuando estás haciendo muchos cambios pequeños, pero se soluciona desactivando la opción de compactar o desactivando este plugin.</p>
<h3>Activando Object Cache</h3>
<p style="text-align: justify;">Esta alternativa en W3 Total Cache es quizá la que mejor me ha resultado, después de la minificación.</p>
<p style="text-align: justify;">Con los cambios antes mencionados y esta, logre tener entonces un tiempo re respuesta similar a este:</p>
<p>View the code on <a href="https://gist.github.com/kadai/33a3adaa3399fdde46aec5428fb4525e">Gist</a>.</p>
<p style="text-align: justify;">Pasar de 101 consultas a 24 es muy bueno. Es decir que ahora se están realizando solo un cuarto de las consultas que se hacían antes. Eso le quite estrés al servidor de base de datos y se accede más rápido.</p>
<p style="text-align: justify;">Para entenderlo mejor, el Object Cache almacena en disco las «consultas más comunes». Algo similar a lo que hace «Page Cache». Esto permite que ciertos valores sean accedidos de una forma mucho más rápida y ágil.</p>
<p style="text-align: justify;">Mientras menos consultas sean realizadas, mejor. Eso siempre ayudará a que el sitio web sea más eficiente a la hora de tener mayor carga. Pero ten en cuenta que, al almacenar el cache en disco, es posible que esto genere muchos archivos adicionales. Eso hay que tenerlo en cuenta en especial si tienes el espacio o los inodes limitados.</p>
<h3>Conclusión</h3>
<p style="text-align: justify;">Si la configuración de W3 Total Cache se hace bien, se pueden tener buenos resultados. En mi caso, pase de tener una respuesta promedio de +2 segundos a ~0.6 mili-segundos. Una mejora sustancial tomando en cuenta que todavía estoy algo limitado en este entorno.</p>
<p style="text-align: justify;">También en este caso, es importante indicar que solo apuntale una parte del problema. El otro es del lado del servidor. Si se tiene acceso a un procesador más poderoso en el hosting, el tiempo de respuesta podrá verse mejorado.</p>
<p style="text-align: justify;">Algunos incluso dirían que tener un VPS es casi una necesidad. Pero yo opino que todo depende de las propias necesidades y objetivos de cada persona. Un VPS es bueno para quien tiene el tiempo y recursos para administrar un servidor. Esa es una bestia completamente diferente. Y más si ponemos en la mezcla un servidor Varnish.</p>
<p style="text-align: justify;">Encontrar el hosting adecuado resuelve una parte del problema. Con suficientes recursos se puede rentar un buen servidor, pero sin alguien que sepa como optimizar los programas que corren&#8230; pues, serán recursos desperdiciados.</p>
<p style="text-align: justify;">Hay que tener un buen balance entre ambos, pero por ahora W3 Total Cache me ha sacado del apuro.</p>
<p>The post <a href="https://kadai.com.mx/mejorar-wordpress-con-w3-total-cache/">Mejorar WordPress con W3 Total Cache</a> appeared first on <a href="https://kadai.com.mx">Endless Manifesto</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kadai.com.mx/mejorar-wordpress-con-w3-total-cache/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">667</post-id>	</item>
		<item>
		<title>Hooks y Transients en WordPress</title>
		<link>https://kadai.com.mx/hooks-y-transients-en-wordpress/</link>
					<comments>https://kadai.com.mx/hooks-y-transients-en-wordpress/#respond</comments>
		
		<dc:creator><![CDATA[Kadai Crosshansen]]></dc:creator>
		<pubDate>Sat, 01 Jul 2017 09:14:59 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[hook]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[transient]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://kadai.com.mx/?p=640</guid>

					<description><![CDATA[<p>Los hooks y transients en WordPress son fáciles. Una vez que tienes una idea de donde mirar. De lo contrario estarás dando vueltas sin parar tratando de saber que son y que hacen. Saber PHP es algo que invariablemente te va a ayudar. Igualmente mirar el Codex de WordPress… pero al final del día, muchas [&#8230;]</p>
<p>The post <a href="https://kadai.com.mx/hooks-y-transients-en-wordpress/">Hooks y Transients en WordPress</a> appeared first on <a href="https://kadai.com.mx">Endless Manifesto</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;">Los hooks y transients en WordPress son fáciles. Una vez que tienes una idea de donde mirar. De lo contrario estarás dando vueltas sin parar tratando de saber que son y que hacen.</p>
<p style="text-align: justify;">Saber PHP es algo que invariablemente te va a ayudar. Igualmente mirar el <a href="https://codex.wordpress.org/Plugin_API/Hooks" target="_blank" rel="noopener">Codex de WordPress</a>… pero al final del día, muchas cosas se condensan en una sola frase: Mira el código fuente.</p>
<p><span id="more-640"></span></p>
<h3>Entendiendo los Hooks y Transients en WordPress</h3>
<p style="text-align: justify;">Hay quienes han hecho un <a href="http://rachievee.com/the-wordpress-hooks-firing-sequence/" target="_blank" rel="noopener">esfuerzo para documentar</a> que hooks se usan y en que momento. Incluso puedes encontrar <a href="http://www.wpbeginner.com/wp-tutorials/how-wordpress-actually-works-behind-the-scenes-infographic/?display=wide" target="_blank" rel="noopener">infografías muy buenas</a> que te dan una guía visual. Eso da mucha luz, pero siempre quedará la duda en algunos casos.</p>
<h3 class="western">¿Qué es un hook o gancho?</h3>
<p style="text-align: justify;">Para ponerlo en palabras simples, es un punto en el cual vamos a “adjuntar el código que queramos”. ¿Eh? Sí. Básicamente llegamos y pegamos el código que queremos en el lugar al cual queremos.</p>
<p style="text-align: justify;">Existen dos formas de hacerlo: Como filtro o como acción. Pero no te enredes con los términos, ya que su diferencia es prácticamente semántica. ¿Por qué? Porque la función para agregar acciones es un <a href="https://developer.wordpress.org/reference/functions/add_action/" target="_blank" rel="noopener">alias de la misma para agregar filtros</a>.</p>
<p style="text-align: justify;">Pero eso no significa que debas intercambiarlas a placer. Si cambias información, usa “add_filter”. Si cambias el comportamiento usa “add_action”. A la larga tu código se entenderá mejor.</p>
<h4>Un ejemplo</h4>
<p style="text-align: justify;">Por ejemplo, la forma más fácil “pegar” código es con un tema y una función. Digamos que tenemos el archivo functions.php y que queremos probar los hooks. Por ejemplo, iniciaríamos con esto:</p>
<p>View the code on <a href="https://gist.github.com/kadai/b313e77a46c72be6b569bab3e72ff51c">Gist</a>.</p>
<p style="text-align: justify;">Una vez que tengamos la función, la magia empieza cuando agregamos “add_filter”:</p>
<p>View the code on <a href="https://gist.github.com/kadai/b313e77a46c72be6b569bab3e72ff51c">Gist</a>.</p>
<p style="text-align: justify;">Con ella, le decimos a WordPress que ejecute nuestra función (agregada como filtro) cuando le toque al hook indicado. En este caso, use uno arbitrario. Es muy probable que no funcione para nada.</p>
<p style="text-align: justify;">Hasta ahí todo bien con el ejemplo. ¿Entonces como saber donde debo agregarla para que se ejecute? Aquí es donde las cosas se complican un montón y es importante mirar el código.</p>
<p style="text-align: justify;">Como mencione en una <a href="https://kadai.com.mx/2017/06/26/modificando-top-posts-de-jetpack/" target="_blank" rel="noopener">entrada anterior</a>, tuve que mirar el código para darme una idea. En ese caso, estuve buscando la función “do_action”. ¿Por qué? Porque ella es la que da la pauta de donde se van a realizar los cambios.</p>
<p style="text-align: justify;">De esa forma sabemos exactamente en donde se va a “pegar” el código que queremos. Pero ten en cuenta que no podrás cambiar nada antes de ese punto (ni después, a menos que haya otro hook que te lo permita).</p>
<p style="text-align: justify;">El ejemplo simple quedaría así para que funcione:</p>
<p>View the code on <a href="https://gist.github.com/kadai/b313e77a46c72be6b569bab3e72ff51c">Gist</a>.</p>
<p style="text-align: justify;">Igualmente buscando y mirando el uso de “<a href="https://developer.wordpress.org/reference/functions/do_action/" target="_blank" rel="noopener">do_action</a>” y “<a href="https://developer.wordpress.org/reference/functions/apply_filters/" target="_blank" rel="noopener">apply_filters</a>”, obtendrás el nombre del hook el cual tienes que usar y que “variables” le pasará. Con ello tendrás el 90% del trabajo hecho.</p>
<p style="text-align: justify;">Aunque google será tu amigo por un buen rato.</p>
<p style="text-align: justify;">Recuerda, podemos agregar cuantas funciones queramos a un hook. Por ejemplo, con varios “add_filter” en diferentes momentos con diferentes funciones. Incluso podemos indicar en que orden se ejecutarán.</p>
<h3 class="western">¿Qué hay de los transients?</h3>
<p style="text-align: justify;">Para hacer la historia corta con ellos, se <a href="https://codex.wordpress.org/Transients_API" target="_blank" rel="noopener">trata básicamente</a> de “variables”. Imagina que son como “cookies” o “sesiones”. Pero en vez de afectar a un solo usuario, podemos usar su contenido para todo el sitio. Son usadas especialmente para guardar consultas complejas.</p>
<p>Por ejemplo, aquí tengo el siguiente ejemplo:</p>
<p>View the code on <a href="https://gist.github.com/kadai/b313e77a46c72be6b569bab3e72ff51c">Gist</a>.</p>
<p style="text-align: justify;">Eso se lo agregué a un tema para hacer “algo” una vez al día.</p>
<p style="text-align: justify;">La gran ventaja, es que podemos recuperar el valor de un transitent fácilmente con “<a href="https://codex.wordpress.org/Function_Reference/get_transient" target="_blank" rel="noopener">get_transient</a>”. Solo necesitas el nombre y listo. Pero ojo, si este ya se encuentra expirado no regresará valor alguno. Esa es su naturaleza, temporal. No es buena idea usarlos para información permanente.</p>
<p style="text-align: justify;">¿Por que expiran? Bueno, es una de sus características. Cuando asignamos su valor con “<a href="https://codex.wordpress.org/Function_Reference/set_transient" target="_blank" rel="noopener">set_transient</a>”, debemos de definir un tiempo tras el cual expirará (ok, podemos asignar “0” o no asignar nada para que jamás expiren, pero esa es otra historia… no deben de ser usados para almacenar información permanente).</p>
<p style="text-align: justify;">Igualmente pueden ser fácilmente borrados con “<a href="https://codex.wordpress.org/Function_Reference/delete_transient" target="_blank" rel="noopener">delete_transient</a>”, si queremos deshacernos de ellos antes de que expiren.</p>
<p style="text-align: justify;">Estos son más fáciles de usar, pero abren un nuevo universo de posibilidades.</p>
<h3 class="western">Conclusión sobre los Hooks y Transients en WordPress</h3>
<p style="text-align: justify;">He estado invirtiendo el tiempo que puedo para poder entender de fondo todas las características que tiene WordPress.</p>
<p style="text-align: justify;">PHP me ha ayudado mucho, aunque me he topado con muchas entradas en blogs que dan por sentado que ya sabes como funciona lo expuesto aquí. Eso puede frustrar un poco, ya que a veces no se entiende el contexto.</p>
<p style="text-align: justify;">Quizá sea idea tomar un curso que me facilite el camino. Solo es cuestión de hacerme del tiempo.</p>
<p>The post <a href="https://kadai.com.mx/hooks-y-transients-en-wordpress/">Hooks y Transients en WordPress</a> appeared first on <a href="https://kadai.com.mx">Endless Manifesto</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kadai.com.mx/hooks-y-transients-en-wordpress/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">640</post-id>	</item>
		<item>
		<title>Give XAMPP a try&#8230; if using WordPress</title>
		<link>https://kadai.com.mx/give-xampp-try-using-wordpress/</link>
					<comments>https://kadai.com.mx/give-xampp-try-using-wordpress/#respond</comments>
		
		<dc:creator><![CDATA[Kadai Crosshansen]]></dc:creator>
		<pubDate>Tue, 30 May 2017 01:57:41 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[easyphp]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[problem]]></category>
		<category><![CDATA[solution]]></category>
		<category><![CDATA[stack]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[xampp]]></category>
		<guid isPermaLink="false">https://kadai.com.mx/?p=456</guid>

					<description><![CDATA[<p>I used to be loyal to EasyPHP, but that changed once I come across XAMPP. And all of that because I wanted to run WordPress locally. This, because I would need more computing power than I could get from a regular hosting account. The Origin of the Problem I have been using EasyPHP since earlier [&#8230;]</p>
<p>The post <a href="https://kadai.com.mx/give-xampp-try-using-wordpress/">Give XAMPP a try&#8230; if using WordPress</a> appeared first on <a href="https://kadai.com.mx">Endless Manifesto</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;">I used to be loyal to EasyPHP, but that changed once I come across XAMPP.</p>
<p style="text-align: justify;">And all of that because I wanted to run WordPress locally. This, because I would need more computing power than I could get from a regular hosting account.</p>
<p><span id="more-456"></span></p>
<h3>The Origin of the Problem</h3>
<p style="text-align: justify;">I have been using EasyPHP since earlier this decade. Found it to be quite easy to install, move and play with. I just copied over the whole «install» folder to an USB pen drive and I had a portable server.</p>
<p style="text-align: justify;">Easy so far there.</p>
<p style="text-align: justify;">Even deployed it into a very special project made for Quintana Roo&#8217;s state government, that has given some interesting results.</p>
<p style="text-align: justify;">I trusted it because it could resist all sort of problems and because messing with it was very easy. At least for self-developed solutions.</p>
<p style="text-align: justify;">Before giving it a new shot into windows, I installed a LAMP stack into my Kubuntu install. Loaded WordPress into it, and gave it a go.</p>
<p style="text-align: justify;">Eventually, I found some problems like that I needed to change users for the folders (like setting «www-data» as the owner) and other issues.</p>
<p style="text-align: justify;">Everything worked as it should. Even preventing me from doing silly unsafe things, but that meant also that I would need to spend extra time I did not have.</p>
<p style="text-align: justify;">The solution? Go back to windows and use a solution I had there.</p>
<p style="text-align: justify;">Updated EasyPHP and got it running as usual. Installed WordPress and when come to download the first plugins&#8230; oh problems.</p>
<p style="text-align: justify;">Long history short: WordPress did not saw any transport. Activating cURL or SSH did not help. Neither FTP. Neither some voodoo magic I had at hand.</p>
<h3 style="text-align: justify;">Aim for a solution</h3>
<p style="text-align: justify;">Spend a fair time of weekend searching for another solution to my problem. As I had spent already a lot on it.</p>
<p style="text-align: justify;">Giving up was not an option at this point.</p>
<p style="text-align: justify;">After some reading, apparently, I also needed an FTP server to be running in Windows to make stuff work.</p>
<p style="text-align: justify;">In Linux, I just had used the <a href="http://www.hongkiat.com/blog/update-wordpress-without-ftp/" target="_blank" rel="noopener noreferrer">FS_METHOD «direct»</a> to make it work with no issues at sight. In windows, it just did not work. WordPress complained that there was no «transport available».</p>
<p style="text-align: justify;">That is why then I needed to search for an alternative. There are plenty there.</p>
<h4 style="text-align: justify;">XAMPP is found</h4>
<p style="text-align: justify;">After a couple of searches just came across <a href="https://www.apachefriends.org/index.html" target="_blank" rel="noopener noreferrer">XAMPP</a>. And I almost did jump aboard when seeing what it does come bundled with.</p>
<p style="text-align: justify;">Like any stack, it comes with Apache, MySQL/MariaSQL and PHP&#8230; and Perl and FTP! This last one is what made me jump on as it was bundled.</p>
<p style="text-align: justify;">I am not going to bother explaining the steps on how to get yourself rolling into a local <a href="http://www.wpbeginner.com/wp-tutorials/how-to-create-a-local-wordpress-site-using-xampp/" target="_blank" rel="noopener noreferrer">WordPress install</a>, as there are plenty <a href="http://www.wikihow.com/Install-Wordpress-on-XAMPP" target="_blank" rel="noopener noreferrer">examples out there</a> already. And because I installed it almost on automatic.</p>
<p><div id="attachment_457" style="width: 692px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-457" class="wp-image-457 size-full" src="https://kadai.com.mx/wp-content/uploads/2017/05/xampp-control.jpg" alt="" width="682" height="440" srcset="https://kadai.com.mx/wp-content/uploads/2017/05/xampp-control.jpg 682w, https://kadai.com.mx/wp-content/uploads/2017/05/xampp-control-480x310.jpg 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 682px, 100vw" /><p id="caption-attachment-457" class="wp-caption-text">The control panel, with some of its options</p></div></p>
<p style="text-align: justify;">Of course, I do not recommend to get the bitnami WordPress add-on. While installing WordPress is easy and is tempting to run another installer to do the work for you&#8230; the results are not always&#8230; nice.</p>
<h3 style="text-align: justify;">Closing it</h3>
<p style="text-align: justify;">Being able to do certain things locally will always be nice. And much faster than reliying in a remote server to process our requests.</p>
<p style="text-align: justify;">It is a great way to rush development, try new things and of course&#8230; have the whole potential of your computer in case you need extra power while testing.</p>
<p style="text-align: justify;">I have done one of the first steps needed&#8230; now, let&#8217;s see how far I can start to go when things start to fall on its place.</p>
<p>The post <a href="https://kadai.com.mx/give-xampp-try-using-wordpress/">Give XAMPP a try&#8230; if using WordPress</a> appeared first on <a href="https://kadai.com.mx">Endless Manifesto</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kadai.com.mx/give-xampp-try-using-wordpress/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">456</post-id>	</item>
	</channel>
</rss>
