SlideShare une entreprise Scribd logo
1  sur  29
Télécharger pour lire hors ligne
Taller WPO

Carga condicional de plugins
Fernando Puente
@fpuenteonline
BIO
@fpuenteonline - Informático de vocación y de profesión, formador
ocasional y beginner de comer y beber.

Desde 1996 trabajando en TI, los últimos 12 en medios de
comunicación online y comercio electrónico

•  Consultor Enterprise en SiteGround
•  Consultor Desarrollo de Negocio en YITH
•  CTO de Exprime Viajes y Dormir de Chollo
•  Formador en Fundación COPE
•  Consultor freelance especializado en performance
WPO y WordPress
La carga condicional
Recordatorio
WPO no es velocidad
Estrategia para reducir…
•  El tiempo de respuesta al navegador: menor TTFB
•  La carga innecesaria de código: mejor rendimiento del servidor
•  El número de recursos necesarios por la página: carga total de
página más rápida
La magia, crearla antes de la carga de plugins, en un MU-plugin:
add_filter( 'option_active_plugins', callable $function_to_add, 1);
Notas finales
•  Técnica MUY peligrosa, necesario conocer en detalle el sitio y el
funcionamiento de los plugins objetivo y del tema activo
•  Crear condiciones programáticas para cada caso concreto que
deseemos controlar
•  A medida de cada proyecto web, no existe un estándar
¡Vamos al taller!
Esquema de trabajo
Creación de un MU Plugin para la gestión de la carga condicional
de los plugins activos en el sitio:
•  Sobre la instalación de WordPress, crear si no existe el
directorio wp-content/mu-plugins
•  Crear un fichero php, fichero de nuestro plugin, sobre ese
directorio para ser ejecutado antes de los plugins activos
•  Los plugins MU (must-use) se ejecutan alfabéticamente, por lo
que se recomienda utilizar un nombre de fichero adecuado 
El objetivo es “engañar” a WordPress para que cargue menos
plugins de los que realmente están activos en el sitio
Ejemplos y usos
<?php	
//Uso:	mostrar	la	carga	de	WP	hasta	el	MU-Plugin	y	listado	de	plugins	activos	en	BD	
	
add_filter(	'option_active_plugins',	'WCZGZ_option_active_plugins',	1);	
function	WCZGZ_option_active_plugins(	$plugin_list	){	
				print_r($plugin_list);	
				debug_print_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);	
				exit;	
}
<?php	
//Ejemplo:	no	cargar	el	plugin	AMP	(sin	condición)	
	
add_filter(	'option_active_plugins',	'WCZGZ_option_active_plugins',	1);	
function	WCZGZ_option_active_plugins(	$plugin_list	){	
	
				unset(	$plugin_list[array_search(	'amp/amp.php',	$plugin_list)]);	
				return	$plugin_list;	
}
<?php	
//Uso:	cómo	habilitar	el	filtro	sólo	para	el	front-end	
	
if(!is_admin())	
				add_filter(	'option_active_plugins',	'WCZGZ_option_active_plugins',	1);	
	
function	WCZGZ_option_active_plugins(	$plugin_list	){	
				print_r($plugin_list);	
				debug_print_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);	
				exit;	
}
<?php	
//Uso:	medir	el	impacto	de	una	URL	sin	ningún	plugin	activo	
//http://example.com/url-2-test/?sinplugins	
	
if(!is_admin())	
				add_filter(	'option_active_plugins',	'WCZGZ_option_active_plugins',	1);	
	
function	WCZGZ_option_active_plugins(	$plugin_list	){	
				if(isset($_GET['sinplugins']))	
								return	array();	
				else	
								return	$plugin_list;	
}
<?php	
//Uso:	medir	el	impacto	de	una	URL	sin	un	plugin	concreto	(según	el	índice	del	listado	de	activos)	
//http://example.com/url-2-test/?sinplugins=1	
	
if(!is_admin())	
				add_filter(	'option_active_plugins',	'WCZGZ_option_active_plugins',	1);	
	
function	WCZGZ_option_active_plugins(	$plugin_list	){	
				if(isset($_GET['sinplugins']))	
	unset(	$plugin_list[$_GET['sinplugins']]	);	
				return	$plugin_list;	
}
<?php	
//ERROR:	no	podemos	utilizar	condiciones	is_single()	o	similares	
	
if(!is_admin())	
				add_filter(	'option_active_plugins',	'WCZGZ_option_active_plugins',	1);	
	
function	WCZGZ_option_active_plugins(	$plugin_list	){	
				if(!is_single())	
								unset(	$plugin_list[array_search(	'amp/amp.php',	$plugin_list)]);	
				return	$plugin_list;	
}
<?php	
//Ejemplo:	no	cargar	en	la	home	los	plugins	no	necesarios	
//Condiciones	por	URL	solicitada	
	
if(!is_admin())	
				add_filter(	'option_active_plugins',	'WCZGZ_option_active_plugins',	1);	
	
function	WCZGZ_option_active_plugins(	$plugin_list	){	
$request_uri	=	parse_url($_SERVER['REQUEST_URI'],	PHP_URL_PATH);	
				if	($request_uri	===	'/')	
				{	
								unset(	$plugin_list[array_search(	'mailchimp-for-woocommerce/mailchimp-woocommerce.php',	
$plugin_list)]);	
								unset(	$plugin_list[array_search(	'woo-gutenberg-products-block/woocommerce-gutenberg-
products-block.php',	$plugin_list)]);	
								unset(	$plugin_list[array_search(	'woocommerce-gateway-paypal-express-checkout/woocommerce-
gateway-paypal-express-checkout.php',	$plugin_list)]);	
								unset(	$plugin_list[array_search(	'woocommerce-gateway-stripe/woocommerce-gateway-
stripe.php',	$plugin_list)]);	
								unset(	$plugin_list[array_search(	'woocommerce/woocommerce.php',	$plugin_list)]);	
				}	
				return	$plugin_list;	
}
<?php	
//Ejemplo:	no	cargar	en	el	front-end	los	plugins	que	son	sólo	de	uso	en	el	back-end	
	
if(!is_admin())	
				add_filter(	'option_active_plugins',	'WCZGZ_option_active_plugins',	1);	
	
function	WCZGZ_option_active_plugins(	$plugin_list	){	
	
				unset(	$plugin_list[array_search(	'broken-link-checker/broken-link-checker.php',	
$plugin_list)]);	
				unset(	$plugin_list[array_search(	'classic-editor/classic-editor.php',	$plugin_list)]);	
				unset(	$plugin_list[array_search(	'duplicate-post/duplicate-post.php',	$plugin_list)]);	
				unset(	$plugin_list[array_search(	'updraftplus/updraftplus.php',	$plugin_list)]);	
				unset(	$plugin_list[array_search(	'wp-smushit/wp-smush.php',	$plugin_list)]);	
	
				return	$plugin_list;	
}
<?php	
//Ejemplo:	carga	condicional	del	plugin	CF7	sólo	para	una	URL	concreta	
//ERROR:	el	plugin	usa	otra	URL	para	enviar	los	datos	del	formulario	
	
if(!is_admin())	
				add_filter(	'option_active_plugins',	'WCZGZ_option_active_plugins',	1);	
	
function	WCZGZ_option_active_plugins(	$plugin_list	){	
$request_uri	=	parse_url($_SERVER['REQUEST_URI'],	PHP_URL_PATH);	
				if	($request_uri	!=	'/contacto/')	
				{	
								unset(	$plugin_list[array_search(	'contact-form-7/wp-contact-form-7.php',	$plugin_list)]);	
				}	
				return	$plugin_list;	
}
<?php	
//Ejemplo:	carga	condicional	del	plugin	CF7	sólo	para	una	URL	concreta	
//CORREGIDO:	incluidas	las	URL	necesarias	para	el	plugin	
	
if(!is_admin())	
				add_filter(	'option_active_plugins',	'WCZGZ_option_active_plugins',	1);	
	
function	WCZGZ_option_active_plugins(	$plugin_list	){	
				$request_uri	=	parse_url($_SERVER['REQUEST_URI'],	PHP_URL_PATH);	
				$is_cf7_needed	=	($request_uri	===	'/contacto/'	||	strpos(	$request_uri,	'/wp-json/contact-
form-7/v1/contact-forms/')	!==	false);	
				if	(!$is_cf7_needed)	
				{	
								unset(	$plugin_list[array_search(	'contact-form-7/wp-contact-form-7.php',	$plugin_list)]);	
				}	
				return	$plugin_list;	
}
<?php	
//Ejemplo:	carga	condicional	de	plugins	por	entorno	de	ejecución	
	
if(!is_admin())	
				add_filter(	'option_active_plugins',	'WCZGZ_option_active_plugins',	1);	
	
function	WCZGZ_option_active_plugins(	$plugin_list	){	
				if(	$_SERVER['HTTP_HOST']	===	'localhost'	)	
				{	
								$plugins_to_disable	=	array(	
																				'updraftplus/updraftplus.php',	
												 	 	'wordpress-seo/wp-seo.php',	
												 	 	'wp-smushit/wp-smush.php',	
																												'wps-hide-login/wps-hide-login.php');	
								$plugin_list	=	array_diff(	$plugin_list,	$plugins_to_disable	);	
				}	
				return	$plugin_list;	
}
<?php	
//Ejemplo:	carga	condicional	de	plugin	para	usuarios	conectados	
	
if(!is_admin())	
				add_filter(	'option_active_plugins',	'WCZGZ_option_active_plugins',	1);	
	
function	WCZGZ_option_active_plugins(	$plugin_list	){	
				require	(ABSPATH	.	WPINC	.	'/pluggable.php');	
				if	(	is_user_logged_in()	)	
				{	
								unset(	$plugin_list[array_search(	'cookie-law-info/cookie-law-info.php',	$plugin_list)]);	
				}	
				return	$plugin_list;	
}
<?php	
//Ejemplo:	carga	condicional	de	plugins	cuando	se	ejecuta	wp-cron	
	
if(!is_admin())	
				add_filter(	'option_active_plugins',	'WCZGZ_option_active_plugins',	1);	
	
function	WCZGZ_option_active_plugins(	$plugin_list	){	
				$request_uri	=	parse_url($_SERVER['REQUEST_URI'],	PHP_URL_PATH);	
				if	($request_uri	===	'/wp-cron.php'	)	
				{	
								$plugins_to_disable	=	array(	
	 													'advanced-custom-fields/acf.php',	
												 	 	'classic-editor/classic-editor.php',	
	 	 	'duplicate-post/duplicate-post.php',	
																					'wps-hide-login/wps-hide-login.php');	
								$plugin_list	=	array_diff(	$plugin_list,	$plugins_to_disable	);	
}	
				return	$plugin_list;	
}
<?php	
//Ejemplo:	carga	condicional	de	plugin	por	horas	cuando	se	ejecuta	wp-cron	
	
if(!is_admin())	
				add_filter(	'option_active_plugins',	'WCZGZ_option_active_plugins',	1);	
	
function	WCZGZ_option_active_plugins(	$plugin_list	){	
				$request_uri	=	parse_url($_SERVER['REQUEST_URI'],	PHP_URL_PATH);	
				if	($request_uri	===	'/wp-cron.php'	)	
				{	
								//Habilitar	Broken	link	checker	sólo	por	la	noche	
								if(current_time('H')	>=	7	&&	current_time('H')	<=23	)	
												unset(	$plugin_list[array_search(	'broken-link-checker/broken-link-checker.php',	
$plugin_list)]);	
				}	
				return	$plugin_list;	
}
<?php	
//Uso:	mejorar	la	carga	de	las	llamadas	AJAX	en	back-end	
	
add_filter(	'option_active_plugins',	'WCZGZ_option_active_plugins',	1);	
function	WCZGZ_option_active_plugins(	$plugin_list	){	
				if	(	wp_doing_ajax()	)	
				{	
								if($_POST['action']	===	'blc_work'	||	$_GET['action']	===	'blc_dashboard_status')	
												return	array('broken-link-checker/broken-link-checker.php');	
								if($_POST['action']	===	'gadwp_backend_item_reports')	
												return	array('google-analytics-dashboard-for-wp/gadwp.php');	
								if($_POST['action']	===	'sucuriscan_ajax')	
												return	array('sucuri-scanner/sucuri.php');	
								if($_POST['action']	===	'heartbeat')	
												return	array();	
				}	
				return	$plugin_list;	
}
<?php	
//Ejemplo:	carga	condicional	del	plugin	AMP	para	un	sitio	concreto	dentro	de	una	instalación	
multisite	
	
add_filter(	'option_active_plugins',	'WCZGZ_option_active_plugins',	1);	
add_filter(	'site_option_active_sitewide_plugins',	'WCZGZ_option_active_plugins',	1);	
	
function	WCZGZ_option_active_plugins(	$plugin_list	){	
				global	$current_blog;	
	
				if(	$current_blog->blog_id	==	2	)	{	
								unset(	$plugin_list[array_search(	'amp/amp.php',	$plugin_list)]);	
				}	
				return	$plugin_list;	
}
Ya conoces la estrategia de
carga condicional para WPO,
¡creatividad al poder!
"Let's be careful out there“
Fernando Puente
@fpuenteonline
Muchas gracias

Contenu connexe

Tendances

E-learning Identification of ions and gases
E-learning Identification of ions and gasesE-learning Identification of ions and gases
E-learning Identification of ions and gases
eiknarf1986
 
Vulcanizacao teoria metodos
Vulcanizacao teoria metodosVulcanizacao teoria metodos
Vulcanizacao teoria metodos
Borrachas
 
არაორგანული ქიმიის საგამოცდო ტესტის იმიტაცია
არაორგანული ქიმიის საგამოცდო ტესტის იმიტაციაარაორგანული ქიმიის საგამოცდო ტესტის იმიტაცია
არაორგანული ქიმიის საგამოცდო ტესტის იმიტაცია
lika_86
 
Relatório prática do manganês química
Relatório  prática do manganês químicaRelatório  prática do manganês química
Relatório prática do manganês química
Paula Spera
 
Oxidação e redução
Oxidação e reduçãoOxidação e redução
Oxidação e redução
Aline Andrade
 

Tendances (20)

Química Geral Lista 03
Química Geral Lista 03Química Geral Lista 03
Química Geral Lista 03
 
Relatório práticas inorgânicas
Relatório práticas inorgânicas Relatório práticas inorgânicas
Relatório práticas inorgânicas
 
E-learning Identification of ions and gases
E-learning Identification of ions and gasesE-learning Identification of ions and gases
E-learning Identification of ions and gases
 
Vulcanizacao teoria metodos
Vulcanizacao teoria metodosVulcanizacao teoria metodos
Vulcanizacao teoria metodos
 
Relatorio Óxidos
Relatorio ÓxidosRelatorio Óxidos
Relatorio Óxidos
 
არაორგანული ქიმიის საგამოცდო ტესტის იმიტაცია
არაორგანული ქიმიის საგამოცდო ტესტის იმიტაციაარაორგანული ქიმიის საგამოცდო ტესტის იმიტაცია
არაორგანული ქიმიის საგამოცდო ტესტის იმიტაცია
 
Manual quimica-ricardo feltre-2
Manual quimica-ricardo feltre-2Manual quimica-ricardo feltre-2
Manual quimica-ricardo feltre-2
 
Relatório prática do manganês química
Relatório  prática do manganês químicaRelatório  prática do manganês química
Relatório prática do manganês química
 
Cap5orolixi
Cap5orolixiCap5orolixi
Cap5orolixi
 
4 3 група
4 3 група4 3 група
4 3 група
 
електрохімія I
електрохімія Iелектрохімія I
електрохімія I
 
გაკვეთილი № 15
გაკვეთილი № 15გაკვეთილი № 15
გაკვეთილი № 15
 
HALOGÊNIOS - FAMÍLIA 7A - Características Gerais
HALOGÊNIOS - FAMÍLIA 7A - Características Gerais HALOGÊNIOS - FAMÍLIA 7A - Características Gerais
HALOGÊNIOS - FAMÍLIA 7A - Características Gerais
 
137392367 106465486-cap-1-quimica-ambiental-colin-baird
137392367 106465486-cap-1-quimica-ambiental-colin-baird137392367 106465486-cap-1-quimica-ambiental-colin-baird
137392367 106465486-cap-1-quimica-ambiental-colin-baird
 
BORO.pptx
BORO.pptxBORO.pptx
BORO.pptx
 
Vi nomenclature of inorganic compounds
Vi nomenclature of inorganic compoundsVi nomenclature of inorganic compounds
Vi nomenclature of inorganic compounds
 
8.3 preparation of salts
8.3 preparation of salts8.3 preparation of salts
8.3 preparation of salts
 
Conceito de ácidos e bases
Conceito de ácidos e basesConceito de ácidos e bases
Conceito de ácidos e bases
 
Ana nery termodinamica quimica
Ana nery   termodinamica quimicaAna nery   termodinamica quimica
Ana nery termodinamica quimica
 
Oxidação e redução
Oxidação e reduçãoOxidação e redução
Oxidação e redução
 

Similaire à Taller WPO - Carga condicional de plugins

Similaire à Taller WPO - Carga condicional de plugins (20)

Fernando puente WPO para todos
Fernando puente   WPO para todosFernando puente   WPO para todos
Fernando puente WPO para todos
 
Qué es y para que sirve la carga condicional
Qué es y para que sirve la carga condicionalQué es y para que sirve la carga condicional
Qué es y para que sirve la carga condicional
 
WPO para proyectos WooComerce
WPO para proyectos WooComerceWPO para proyectos WooComerce
WPO para proyectos WooComerce
 
Lock in, como alma que lleva el diablo-semanawp2018
Lock in, como alma que lleva el diablo-semanawp2018Lock in, como alma que lleva el diablo-semanawp2018
Lock in, como alma que lleva el diablo-semanawp2018
 
Básicos para medir tu web - Taller de iniciación
Básicos para medir tu web - Taller de iniciaciónBásicos para medir tu web - Taller de iniciación
Básicos para medir tu web - Taller de iniciación
 
Lock in, como alma que lleva el diablo-word camp-las-palmas-2018-16-9
Lock in, como alma que lleva el diablo-word camp-las-palmas-2018-16-9Lock in, como alma que lleva el diablo-word camp-las-palmas-2018-16-9
Lock in, como alma que lleva el diablo-word camp-las-palmas-2018-16-9
 
¿Tu empresa necesita una plataforma de tecnología personalizada?
¿Tu empresa necesita una plataforma de tecnología personalizada?¿Tu empresa necesita una plataforma de tecnología personalizada?
¿Tu empresa necesita una plataforma de tecnología personalizada?
 
El editor clásico como ejemplo de deuda tecnológica - WordCamp Granada 2019
El editor clásico como ejemplo de deuda tecnológica - WordCamp Granada 2019El editor clásico como ejemplo de deuda tecnológica - WordCamp Granada 2019
El editor clásico como ejemplo de deuda tecnológica - WordCamp Granada 2019
 
De Cero a Wordpress
De Cero a WordpressDe Cero a Wordpress
De Cero a Wordpress
 
Optimiza tus webs a bajo costo - WCVenezuela2021
Optimiza tus webs a bajo costo - WCVenezuela2021Optimiza tus webs a bajo costo - WCVenezuela2021
Optimiza tus webs a bajo costo - WCVenezuela2021
 
Optimización WPO WordPress - Meetup WP Valencia - 26/09/2015
Optimización WPO WordPress - Meetup WP Valencia - 26/09/2015Optimización WPO WordPress - Meetup WP Valencia - 26/09/2015
Optimización WPO WordPress - Meetup WP Valencia - 26/09/2015
 
Desarrollo web el mejor aliado del Marketing Digital
Desarrollo web el mejor aliado del Marketing DigitalDesarrollo web el mejor aliado del Marketing Digital
Desarrollo web el mejor aliado del Marketing Digital
 
Tu posicionamiento mejora con la velocidad de tu web ¡WPO para todos!
Tu posicionamiento mejora con la velocidad de tu web ¡WPO para todos!Tu posicionamiento mejora con la velocidad de tu web ¡WPO para todos!
Tu posicionamiento mejora con la velocidad de tu web ¡WPO para todos!
 
Seminario De Informatica julio_agosto_septiembre 2009
Seminario De Informatica julio_agosto_septiembre 2009Seminario De Informatica julio_agosto_septiembre 2009
Seminario De Informatica julio_agosto_septiembre 2009
 
Primeros pasos con WPO: aprende a analizar tu web - Taller
Primeros pasos con WPO: aprende a analizar tu web - TallerPrimeros pasos con WPO: aprende a analizar tu web - Taller
Primeros pasos con WPO: aprende a analizar tu web - Taller
 
Antonio Torres - WPO Wordpress - EN@E Digital Meeting
Antonio Torres - WPO Wordpress - EN@E Digital MeetingAntonio Torres - WPO Wordpress - EN@E Digital Meeting
Antonio Torres - WPO Wordpress - EN@E Digital Meeting
 
Mi web como eje principal de mi estrategia digital (Sanlucar la Mayor)
Mi web como eje principal de mi estrategia digital (Sanlucar la Mayor)Mi web como eje principal de mi estrategia digital (Sanlucar la Mayor)
Mi web como eje principal de mi estrategia digital (Sanlucar la Mayor)
 
SEO Low Cost para pequeñas empresas
SEO Low Cost para pequeñas empresasSEO Low Cost para pequeñas empresas
SEO Low Cost para pequeñas empresas
 
SEO y Analítica web con Wordpress (Meetup Wordpress Tarragona)
SEO y Analítica web con Wordpress (Meetup Wordpress Tarragona)SEO y Analítica web con Wordpress (Meetup Wordpress Tarragona)
SEO y Analítica web con Wordpress (Meetup Wordpress Tarragona)
 
Webinar Flumotion - How to integrate online video into your marketing strategy
Webinar Flumotion - How to integrate online video into your marketing strategyWebinar Flumotion - How to integrate online video into your marketing strategy
Webinar Flumotion - How to integrate online video into your marketing strategy
 

Plus de Fernando Puente

Plus de Fernando Puente (20)

¿Te preocupa el rendimiento de tu web? No deberías estar haciendo esto…
¿Te preocupa el rendimiento de tu web? No deberías estar haciendo esto…¿Te preocupa el rendimiento de tu web? No deberías estar haciendo esto…
¿Te preocupa el rendimiento de tu web? No deberías estar haciendo esto…
 
Protege a tu rey. Defiende tu contenido de amenazas, scraping, IA o malos act...
Protege a tu rey. Defiende tu contenido de amenazas, scraping, IA o malos act...Protege a tu rey. Defiende tu contenido de amenazas, scraping, IA o malos act...
Protege a tu rey. Defiende tu contenido de amenazas, scraping, IA o malos act...
 
WordPress. Modelos de negocio
WordPress. Modelos de negocioWordPress. Modelos de negocio
WordPress. Modelos de negocio
 
WordPress y cómo llegar al 50% de Internet
WordPress y cómo llegar al 50% de InternetWordPress y cómo llegar al 50% de Internet
WordPress y cómo llegar al 50% de Internet
 
Mitos y realidades sobre el WPO en WordPress
Mitos y realidades sobre el WPO en WordPressMitos y realidades sobre el WPO en WordPress
Mitos y realidades sobre el WPO en WordPress
 
HTTP/3, PHP 7.4 y otras novedades en WPO para WordPress
HTTP/3, PHP 7.4 y otras novedades en WPO para WordPressHTTP/3, PHP 7.4 y otras novedades en WPO para WordPress
HTTP/3, PHP 7.4 y otras novedades en WPO para WordPress
 
Tipologías de migración - WordCamp Valencia 2019
Tipologías de migración - WordCamp Valencia 2019Tipologías de migración - WordCamp Valencia 2019
Tipologías de migración - WordCamp Valencia 2019
 
WordPress de la A a la Z. Guía de todos los términos que debes conocer y que ...
WordPress de la A a la Z. Guía de todos los términos que debes conocer y que ...WordPress de la A a la Z. Guía de todos los términos que debes conocer y que ...
WordPress de la A a la Z. Guía de todos los términos que debes conocer y que ...
 
La analítica nos hace mejores
La analítica nos hace mejoresLa analítica nos hace mejores
La analítica nos hace mejores
 
Retos de WordPress para llegar al 50% de Internet
Retos de WordPress para llegar al 50% de Internet Retos de WordPress para llegar al 50% de Internet
Retos de WordPress para llegar al 50% de Internet
 
WP-Cron: ni contigo, ni sin ti
WP-Cron: ni contigo, ni sin tiWP-Cron: ni contigo, ni sin ti
WP-Cron: ni contigo, ni sin ti
 
Extender la funcionalidad de WordPress
Extender la funcionalidad de WordPressExtender la funcionalidad de WordPress
Extender la funcionalidad de WordPress
 
Niveles de escalado para WordPress
Niveles de escalado para WordPressNiveles de escalado para WordPress
Niveles de escalado para WordPress
 
WordPress - Oportunidades laborales
WordPress - Oportunidades laboralesWordPress - Oportunidades laborales
WordPress - Oportunidades laborales
 
Caché y WordPress
Caché y WordPressCaché y WordPress
Caché y WordPress
 
Técnicas para monetizar un sitio WordPress
Técnicas para monetizar un sitio WordPressTécnicas para monetizar un sitio WordPress
Técnicas para monetizar un sitio WordPress
 
Gutenberg, ¿la revolución de WordPress?
Gutenberg, ¿la revolución de WordPress?Gutenberg, ¿la revolución de WordPress?
Gutenberg, ¿la revolución de WordPress?
 
Adapta tu tema a Gutenberg - WordCamp Sevilla 2018
Adapta tu tema a Gutenberg - WordCamp Sevilla 2018Adapta tu tema a Gutenberg - WordCamp Sevilla 2018
Adapta tu tema a Gutenberg - WordCamp Sevilla 2018
 
Gutenberg revoluciona WordPress - Congreso Web 2018
Gutenberg revoluciona WordPress - Congreso Web 2018Gutenberg revoluciona WordPress - Congreso Web 2018
Gutenberg revoluciona WordPress - Congreso Web 2018
 
Freelance WordPress: cómo tener éxito profesional
Freelance WordPress: cómo tener éxito profesionalFreelance WordPress: cómo tener éxito profesional
Freelance WordPress: cómo tener éxito profesional
 

Taller WPO - Carga condicional de plugins