<?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/tag/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>[Review] Plugin Google Site Kit: Esencial para WordPress</title>
		<link>https://kadai.com.mx/google-site-kit-herramienta-esencial-para-wordpress/</link>
					<comments>https://kadai.com.mx/google-site-kit-herramienta-esencial-para-wordpress/#respond</comments>
		
		<dc:creator><![CDATA[Kadai Crosshansen]]></dc:creator>
		<pubDate>Tue, 05 Nov 2019 04:57:31 +0000</pubDate>
				<category><![CDATA[Marketing]]></category>
		<category><![CDATA[adsense]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[search console]]></category>
		<category><![CDATA[site kit]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://kadai.com.mx/?p=1571</guid>

					<description><![CDATA[<p>Google Site Kit es una prácticamente esencial en WordPress. En especial si usas soluciones de Google como la Search Console o Google Analytics. Hoy en día, ¿Quién no usa usa las herramientas que Google ofrece? Por eso le hecho un vistazo. ¿Qué es Google Site Kit? Se trata básicamente de un plugin de WordPress, pero [&#8230;]</p>
<p>The post <a href="https://kadai.com.mx/google-site-kit-herramienta-esencial-para-wordpress/">[Review] Plugin Google Site Kit: Esencial para WordPress</a> appeared first on <a href="https://kadai.com.mx">Endless Manifesto</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Google Site Kit es una prácticamente esencial en WordPress. En especial si usas soluciones de Google como la Search Console o Google Analytics.</p>



<p>Hoy en día, ¿Quién no usa usa las herramientas que Google ofrece? Por eso le hecho un vistazo.</p>



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



<h3 class="wp-block-heading">¿Qué es Google Site Kit?</h3>



<p>Se trata básicamente de un plugin de WordPress, pero desarrollado por la propia Google con la cual implementa sus servicios.</p>



<p>De esta forma, puedes tener fácilmente en un solo lugar los datos de la Search Console, Google Analytics, PageSpeed Insights, AdSense y demás servicios.</p>



<p>En pocas palabras, en una solución robusta. Aún si no llegas a usar todo su potencial.</p>



<p>Veamos un poco de lo que nos ofrece.</p>



<h3 class="wp-block-heading">Lo destacable del plugin de WordPress </h3>



<p>Una de las grandes ventajas, que no está de más decirlo, es que trae toda la información que tiene Google hasta el Escritorio de WordPress.</p>



<p>Con este, es muy fácil el visualizar la información que se genera por la Search Console y Analytics de una forma condensada y fácil de entender.</p>



<p>Si bien no cuenta con todo el poder de dichas plataformas, nos permite ver los detalles más importantes.</p>



<p>Por ejemplo, en el panel principal del plugin, esta es la forma en la cual vemos como adquirimos tráfico:</p>



<figure class="wp-block-image"><img fetchpriority="high" decoding="async" width="1024" height="392" src="https://kadai.com.mx/wp-content/uploads/2019/11/google-site-kit-002-1024x392.png" alt="Google Site Kit - Adquisición de tráfico por Google Analytics" class="wp-image-1572" srcset="https://kadai.com.mx/wp-content/uploads/2019/11/google-site-kit-002-1024x392.png 1024w, https://kadai.com.mx/wp-content/uploads/2019/11/google-site-kit-002-980x376.png 980w, https://kadai.com.mx/wp-content/uploads/2019/11/google-site-kit-002-480x184.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /><figcaption>Una muestra de datos, desde Google Analytics.</figcaption></figure>



<p>Pero en esa misma página vemos inmediatamente como se está desempeñando el mismo sitio web en el buscador:</p>



<figure class="wp-block-image"><img decoding="async" width="1024" height="366" src="https://kadai.com.mx/wp-content/uploads/2019/11/google-site-kit-003-1024x366.png" alt="Google Site Kit - Una combinación de datos entre Google Search Console y Analytics" class="wp-image-1573" srcset="https://kadai.com.mx/wp-content/uploads/2019/11/google-site-kit-003-1024x366.png 1024w, https://kadai.com.mx/wp-content/uploads/2019/11/google-site-kit-003-980x350.png 980w, https://kadai.com.mx/wp-content/uploads/2019/11/google-site-kit-003-480x172.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /><figcaption>Los datos de la Search Console y Analytics combinados.</figcaption></figure>



<p>Es de esta forma que podemos obtener una imagen más clara del desempeño de un sitio web. Pero no es todo.</p>



<p>Ya que en la misma página principal podemos ver incluso cuales son las páginas más visitadas y las palabras clave más importantes que se usan para encontrarnos.</p>



<p>Junto a toda esa información, el plugin también nos permite ver información crucial para cada página o entrada.</p>



<p>Cuando vemos la entrada de forma individual, podemos encontrar una <strong><em>G</em></strong> en la parte superior y es que nos muestra lo siguiente:</p>



<figure class="wp-block-image"><img decoding="async" width="1024" height="249" src="https://kadai.com.mx/wp-content/uploads/2019/11/google-site-kit-006-1024x249.png" alt="Google Site Kit - Información de la Search Console en cada Entrada" class="wp-image-1576" srcset="https://kadai.com.mx/wp-content/uploads/2019/11/google-site-kit-006-1024x249.png 1024w, https://kadai.com.mx/wp-content/uploads/2019/11/google-site-kit-006-980x238.png 980w, https://kadai.com.mx/wp-content/uploads/2019/11/google-site-kit-006-480x117.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /><figcaption>Información básica directo en la entrada.</figcaption></figure>



<p>Pero cuando hacemos clic en <em>More details</em>, es cuando las cosas se vuelven realmente interesantes. Ya que podemos ver la forma en la cual las personas encuentran dicha entrada.</p>



<p>Sobre todo, que palabras clave usan en especial. Ello permite saber, junto con otras herramientas como Yoast SEO, el saber si la estrategia está funcionando de forma correcta para una página en especifico.</p>



<p>Y eso es solo la superficie de lo que nos ofrece este plugin.</p>



<h3 class="wp-block-heading">Lo menos atractivo del plugin</h3>



<p>En lo personal, una de las cosas que no me han gustado mucho del Google Site Kit es la forma en la cual integra <a href="https://developers.google.com/speed/pagespeed/insights/">PageSpeed Insights</a>.</p>



<p>Si bien tenemos un vistazo del desempeño del sitio web en la página principal del plugin, el mismo no nos da un reporte para cada página individual del sitio.</p>



<p>Solamente podemos ver el reporte de velocidad para la página principal.</p>



<figure class="wp-block-image"><img decoding="async" width="1024" height="302" src="https://kadai.com.mx/wp-content/uploads/2019/11/google-site-kit-004-1024x302.png" alt="Resultados del PageSpeed Insights en la página principal" class="wp-image-1574" srcset="https://kadai.com.mx/wp-content/uploads/2019/11/google-site-kit-004-1024x302.png 1024w, https://kadai.com.mx/wp-content/uploads/2019/11/google-site-kit-004-980x289.png 980w, https://kadai.com.mx/wp-content/uploads/2019/11/google-site-kit-004-480x142.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /><figcaption>La prueba de PageSpeed en el plugin</figcaption></figure>



<p>Nunca he sido un gran fan de este servicio, pero siento que es una oportunidad desperdiciada el solo mostrar el reporte para la página principal.</p>



<p>Obviamente nosotros podemos, en todo caso, usar un enlace directo a cada entrada o página y hacer la prueba directamente. ¿Pero no sería mejor tenerlo ya listo en un solo lugar?</p>



<p>Otro los detalles que encontré es que no es fácil desconectar algunos servicios incluidos. La única opción en esos casos es desconectar todo.</p>



<p>¿No quieres que se hagan pruebas de PageSpeed una vez activado? Mala suerte, el plugin no te permite desactivar la opción.</p>



<p>Lo cual, invariablemente, puede significar que verás un incremento de visitas a tu página de inicio por parte de Google.</p>



<p>Nada más que si se puede desconectar de forma individual a AdSense y Analytics, por lo menos.</p>



<p>Tampoco hay forma de configurar muchas opciones desde WordPress. Aunque en parte se entiende, ya que la mayoría de las opciones las controla directamente Google.</p>



<h3 class="wp-block-heading">Problemas al conectar Google Site Kit con AdSense</h3>



<p>Otro de los detalles que me llamó la atención es que, cuando quieres conectar Adsenses al Site Kit, a veces suceden problemas con este.</p>



<p>Por ejemplo, al momento de conectar el servicio, a veces veremos algo como lo siguiente:</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="718" height="453" src="https://kadai.com.mx/wp-content/uploads/2019/11/google-site-kit-008.png" alt="Google Site Kit - No se detecta la cuenta de AdSense aún si esta existe" class="wp-image-1582" srcset="https://kadai.com.mx/wp-content/uploads/2019/11/google-site-kit-008.png 718w, https://kadai.com.mx/wp-content/uploads/2019/11/google-site-kit-008-480x303.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 718px, 100vw" /><figcaption>Site Kit nos pide crear una cuenta, por un error</figcaption></figure>



<p>Esto, a pesar de ya contar con una cuenta creada.</p>



<p>Una pequeña investigación reveló que este es de hecho un problema del lado de Google. Esto debido a que su propia API <a rel="noreferrer noopener" aria-label="regresa un error (opens in a new tab)" href="https://github.com/google/site-kit-wp/issues/766" target="_blank">regresa un error</a> y esto impide que se puedan obtener las cuentas.</p>



<p>Además hay que comentar que <a href="https://wordpress.org/support/topic/cannot-connect-adsense/" target="_blank" rel="noreferrer noopener" aria-label="más de uno ha tenido este problema (opens in a new tab)">más de uno ha tenido este problema</a>. Esto a pesar de que indican de que ya está resuelto.</p>



<p>Es posible que, debido a que se verifican las cuentas de AdSense de forma constante, la propia cuenta asignada para esto simplemente se vea saturada.</p>



<p>Tras varios intentos, finalmente me mostró lo siguiente:</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="698" height="335" src="https://kadai.com.mx/wp-content/uploads/2019/11/google-site-kit-009.png" alt="Cuando se detecta correctamente la cuenta de AdSense" class="wp-image-1581" srcset="https://kadai.com.mx/wp-content/uploads/2019/11/google-site-kit-009.png 698w, https://kadai.com.mx/wp-content/uploads/2019/11/google-site-kit-009-480x230.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 698px, 100vw" /><figcaption>Cuando la cuenta es correctamente detectada</figcaption></figure>



<p>Con lo cual ya sabemos que ha identificado la cuenta y es cuestión de tiempo para que sea validada.</p>



<p>Sin embargo, hay que tener en cuenta que es posible que nos siga mostrando el error en otro momento. Ya que, como mencione antes, se consulta la API de Google de forma constante.</p>



<p>Solo es cuestión de tener paciencia.</p>



<h3 class="wp-block-heading">Conclusiones sobre Google Site Kit</h3>



<p>Hay una cosa que es cierta, este plugin de Google es lo que muchas personas querían ver. El poder tener acceso a datos importantes de forma fácil.</p>



<p>Si bien el mismo apenas acaba de salir de su fase beta, es evidente que se encuentra prácticamente listo en sus funcionalidades básicas.</p>



<p>En lo poco que he podido usarlo, he quedado más que satisfecho. Y en el futuro se espera que la gente de Google agregue nuevas funcionalidades.</p>



<p>Podemos seguir el desarrollo del plugin directamente <a rel="noreferrer noopener" aria-label="GitHub (opens in a new tab)" href="https://github.com/google/site-kit-wp" target="_blank">GitHub</a>. En donde se menciona esto y podemos ver incluso la solución de problemas que aún tiene el software.</p>



<p>Personalmente, tras lo que me <a rel="noreferrer noopener" aria-label="sucedió con tumblr (opens in a new tab)" href="https://kadai.com.mx/2019/04/07/tumblr-con-subdominio-propio-google-problemas/" target="_blank">sucedió con tumblr</a>, estoy más que contento del poder contar con esta herramienta. Para saber, aún más rápido, de que es lo que sucede con un sitio web.</p>



<p>Y, por lo menos para mi, este se volverá en un plugin imprescindible. Y posiblemente para muchos más.</p>
<p>The post <a href="https://kadai.com.mx/google-site-kit-herramienta-esencial-para-wordpress/">[Review] Plugin Google Site Kit: Esencial para WordPress</a> appeared first on <a href="https://kadai.com.mx">Endless Manifesto</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kadai.com.mx/google-site-kit-herramienta-esencial-para-wordpress/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1571</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 loading="lazy" 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 loading="lazy" 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 loading="lazy" 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 loading="lazy" 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>Virtualmin en Digital Ocean: Experiencias</title>
		<link>https://kadai.com.mx/virtualmin-digital-ocean-experiencias/</link>
					<comments>https://kadai.com.mx/virtualmin-digital-ocean-experiencias/#respond</comments>
		
		<dc:creator><![CDATA[Kadai Crosshansen]]></dc:creator>
		<pubDate>Sun, 15 Apr 2018 15:11:28 +0000</pubDate>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[digital ocean]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[vestacp]]></category>
		<category><![CDATA[virtualmin]]></category>
		<category><![CDATA[vps]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://kadai.com.mx/?p=1322</guid>

					<description><![CDATA[<p>Virtualmin es un panel de control que permite administrar un servidor. Tener uno que fuera eficiente era importante, ya que era parte del plan al moverse a Digital Ocean. Así es como me fue en esta odisea. Cambiar de servicio de hospedaje, para mi, era muy importante. Como parte de crecer y de aprendizaje. En [&#8230;]</p>
<p>The post <a href="https://kadai.com.mx/virtualmin-digital-ocean-experiencias/">Virtualmin en Digital Ocean: Experiencias</a> appeared first on <a href="https://kadai.com.mx">Endless Manifesto</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Virtualmin es un panel de control que permite administrar un servidor. Tener uno que fuera eficiente era importante, ya que era parte del plan al moverse a Digital Ocean. Así es como me fue en esta odisea.</p>
<p><span id="more-1322"></span></p>
<p>Cambiar de servicio de hospedaje, para mi, era muy importante. Como parte de crecer y de aprendizaje. En especial por que tenia muy en claro lo que necesitaba. Además de que necesitaba mayor poder de procesamiento.</p>
<p>Es por ello que un VPS (Virtual Private Server) era la solución correcta. Pero es implicaba el ensuciarse las manos un poco. ¿Por qué? Porque en la mayoría de los casos, solo se nos entrega el esqueleto sobre el cual trabajaremos.</p>
<p>El resto de software corre por nuestra cuenta. Igual la seguridad. Es por ello que administrar un Servidor Privado no es para cualquiera. Tienes que saber exactamente lo que estás haciendo.</p>
<h2>¿32bits o 64bits para Virtualmin?</h2>
<p>Antes que nada, quiero decir que primero probé Virtualmin con Ubuntu 16.04 a 64bits en una VPS con 2GB. <em>No lo hagan</em>. En especial si van a instalar la suite completa.</p>
<p>¿Por qué? Bien, un sistema de 64bits solo se necesita si van a tener un servidor con 4GB de ram o más.</p>
<p>Si tienen uno de 3GB o menos, con una distribución de 32bits tienen más que suficiente. En especial en lo que respecta al uso de memoria.</p>
<p>Las aplicaciones de 64bits usan mucha más memoria. En mi caso, llegue a observar que tanto MySQL y Virtualmin competían por los recursos después de algunas horas. Esto causaba que se necesitara reiniciar el servidor cada que sucedía.</p>
<p>Esto a pesar de tratar de reducir la memoria al mínimo. De todas las aplicaciones.</p>
<p>De entrada, en un sistema 64bits, MySQL usa cerca de 1GB de ram (con el caché incluido). Claro, esto con varios programas y sitios instalados. Contra los 508MB con la misma configuración en un sistema 32bits.</p>
<p>Vaya que hay una diferencia notable. Incluso en los procesos de apache y php.</p>
<p>Igualmente, en el <a href="https://www.virtualmin.com/documentation/system/low-memory" target="_blank" rel="noopener nofollow">sitio oficial recomiendan 32bits</a> para cuando hay memoria limitada. Cuando es 3GB o menos. Hay que hacer caso.</p>
<h2>Instalación de Virtualmin y configuración</h2>
<p>El panel lo puedes instalar tan fácilmente como ejecutar esto en la consola de un servidor nuevo:</p>
<p><code># wget http://software.virtualmin.com/gpl/scripts/install.sh</code><br />
<code># sudo /bin/sh install.sh</code></p>
<p>Por supuesto, nosotros podemos seleccionar entre otras opciones como instalar una configuración LEMP (nginx) en vez de <a href="https://kadai.com.mx/2017/05/29/give-xampp-try-using-wordpress/" target="_blank" rel="noopener">LAMP</a> (apache). O un servidor con características mínimas.</p>
<p>Pero el LAMP es mejor, en especial si necesitamos correr aplicaciones como WordPress. Aunque todavía, quizá en un futuro, pueda tener un proxy inverso con nginx y apache.</p>
<p>Pero ya veremos.</p>
<p>Regresando a la instalación. La misma es prácticamente automática. Como lo es la de <a href="https://vestacp.com/" target="_blank" rel="noopener nofollow">VestaCP</a>. Otro panel que pude probar. Pero a diferencia de Vesta, prácticamente todas las funcionalidades funcionaban <em>out-of-the-box</em>. Lo cual ahorra mucho más tiempo.</p>
<p>En cuanto a la configuración, hay poco que hacerle. Pero quizá lo más importante es el cambiar el modo por defecto de la ejecución delos scripts PHP por apache.</p>
<p>Por ejemplo, la configuración por defecto usa FCGId como modo de ejecución para PHP-FPM. Pero si instalas los paquetes necesarios, puedes usar el modo FPM. Aunque después de estar realizando muchas pruebas&#8230; tal parece que el modo por defecto, el FCGId, funciona sin comerse tanta memoria. Lo cual es una buena ventaja en servidores con poca memoria.</p>
<p>Se pueden hacer ajustes finos. Como los que se mencionan en <a href="https://linode.com/docs/web-servers/apache-tips-and-tricks/tuning-your-apache-server/" target="_blank" rel="noopener nofollow">esta página de Linode</a>. Aunque no los he probado, hasta el momento el servidor que he montado ha soportado la carga.</p>
<p>Al menos ya no me muestra la multitud de errores 525, 503 y 520 de antes. Eso ya es ganancia. Junto con la velocidad general adquirida.</p>
<h3>Conclusiones sobre Virtualmin y Digital Ocean</h3>
<p>Si bien apenas llevo poco tiempo usando Virtualmin, este ha sido un panel que es realmente maravilloso para administrar un servidor. Te permite instalar servidor de correo con un cliente. Servidor LAMP, firewall, administrador de archivos, administrador de base de datos, entre otras cosas.</p>
<p>Esta muy completo.</p>
<p>Esto si, la curva de aprendizaje esta muy <em>empinada</em>. Uno puede tardarse mucho tiempo en conocer todo lo que puede hacer el panel.</p>
<p>No es muy amigable con el usuario. Pero eso no quita que sea muy poderosa.</p>
<p>Otra de las desventajas es que no cuenta con todas las opciones posibles en el frontend. Por lo cual muchas veces necesitarás editar los archivos directamente en el servidor desde la consola.</p>
<p>No es una queja, pero cuando te acostumbras&#8230; suele ser más rápido editar las configuraciones directamente en al consola. En vez de estarla buscando entre un mar de opciones.</p>
<p>Pero eso no quita el hecho de que sigo más que satisfecho y recomiendo este panel.</p>
<p>The post <a href="https://kadai.com.mx/virtualmin-digital-ocean-experiencias/">Virtualmin en Digital Ocean: Experiencias</a> appeared first on <a href="https://kadai.com.mx">Endless Manifesto</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kadai.com.mx/virtualmin-digital-ocean-experiencias/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1322</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>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>
	</channel>
</rss>
