Estoy haciendo un complemento de WordPress. ¿Cuáles son las cosas típicas que debo incluir en la función de desinstalación?
Por ejemplo, ¿debería eliminar las tablas que creé en la función de instalación?
¿Limpio mis entradas de opciones?
¿Algo más?
plugins
activation
uninstallation
deactivation
conservador rojo
fuente
fuente
Respuestas:
Hay tres ganchos diferentes . Se disparan en los siguientes casos:
Cómo activar funciones de forma segura durante los escenarios
A continuación se muestran las formas correctas de enganchar de forma segura las funciones de devolución de llamada que se activan durante las acciones mencionadas.
Como podría usar este código en un complemento que usa
Le mostraré tres complementos de demostración diferentes que puede inspeccionar y luego implementará el código en sus propios complementos.
Nota importante por adelantado!
Como este tema es extremadamente difícil y muy detallado y tiene una docena de casos extremos, esta respuesta nunca será perfecta. Seguiré mejorando con el tiempo, así que vuelve a consultar de forma regular.
(1) Activar / Desactivar / Desinstalar complementos.
Las devoluciones de llamada de configuración del complemento son activadas por core y usted no tiene influencia sobre cómo lo hace core. Hay algunas cosas a tener en cuenta:
echo/print
nada (!) Durante las devoluciones de llamada de configuración. Esto conducirá a unheaders already sent
mensaje y Core recomendará desactivar y eliminar su complemento ... no pregunte: Lo sé ...exit()
declaraciones a todas las devoluciones de llamada diferentes para que pueda obtener algunas ideas sobre lo que realmente está sucediendo. Simplemente descomente para ver las cosas funcionando.__FILE__ != WP_PLUGIN_INSTALL
y (si no: ¡abortar!) Para ver si realmente está desinstalando el complemento. Recomiendo simplemente activar lason_deactivation()
devoluciones de llamada durante el desarrollo, para que se ahorre el tiempo que necesitaría para recuperar todo. Al menos esto es lo que hago.defined( 'ABSPATH' ) OR exit;
wp_die()
pantalla que solicita los permisos adecuados (y si desea volver a intentarlo ... sí, claro ), cuando obtiene un error. Esto sucede cuando el núcleo lo redirige, establece la corriente$GLOBALS['wp_list_table']->current_action();
enerror_scrape
y luego verifica el referente para sabercheck_admin_referer('plugin-activation-error_' . $plugin);
dónde$plugin
está$_REQUEST['plugin']
. Por lo tanto, la redirección ocurre a la mitad de la carga de la página y obtienes esta barra de desplazamiento con cable y la pantalla del troquel muestra el cuadro de aviso / mensaje de administrador amarillo. Si esto sucede: mantén la calma y solo busca el error con algunosexit()
y depuración paso a paso.(A) Complemento de funciones simples
Recuerde que esto podría no funcionar si conecta las devoluciones de llamada antes de la definición de la función.
(B) Una arquitectura basada en clases / OOP
Este es el ejemplo más común en los complementos de hoy en día.
(C) Una arquitectura basada en clases / OOP con un objeto de configuración externo
Este escenario supone que tienes un archivo plugin principal y un segundo archivo con el nombre
setup.php
en un subdirectorio del plugin llamadoinc
:~/wp-content/plugins/your_plugin/inc/setup.php
. Esto funcionará también cuando la carpeta del complemento esté fuera de la estructura de carpetas WP predeterminada, así como cuando se cambie el nombre del directorio de contenido o en los casos en que su archivo de instalación tenga un nombre diferente. Solo lainc
carpeta debe tener el mismo nombre y ubicación relativa del directorio raíz de complementos.Nota: Simplemente puede tomar las tres
register_*_hook()*
funciones y las clases y soltarlas en su complemento.El archivo de complemento principal:
El archivo de instalación:
(2) Actualizaciones de complementos
Si escribe un complemento que tiene su propia tabla u opciones de base de datos, puede haber situaciones en las que necesite cambiar o actualizar cosas.
Lamentablemente, hasta ahora no hay posibilidad de ejecutar algo en la instalación del complemento / tema o actualización / actualización. Con mucho gusto hay una solución alternativa: conecta una función personalizada a una opción personalizada (sí, es poco convincente, pero funciona).
Fuente
Esta función de actualización es un ejemplo no tan bueno / bien escrito, pero como se dijo: es un ejemplo y la técnica funciona bien. Mejorará eso con una actualización posterior.
fuente
check_admin_referer()
. No necesitan desinfectarse porque el núcleo no lo hace por sí mismo y de todos modos lo compararía con$_REQUEST
valores no desinfectados . Pero si comienzan a llorar como niñas por eso, solo utilícelofilter_var()
oesc_attr()
en él.Para probar el sistema actual en busca de características requeridas, como la versión PHP o las extensiones instaladas, puede usar algo como eso:
Prueba con un cheque para PHP 5.5:
fuente
register_activation_hook
aquí, ¿por qué no usarlo? ¿Esto también se disparará antes o despuésregister_activation_hook
y seregister_activation_hook
disparará incluso si lo anterior no pasa?add_action( 'admin_notices', 't5_check_admin_notices', 0 );
a un gancho de activación y el complemento se activa sin realizar las comprobaciones. . .admin_notices
.