Iniciar una wiki comunitaria para recopilar las mejores prácticas objetivas para el desarrollo de complementos. Esta pregunta se inspiró en los comentarios de @ EAMann sobre wp-hackers .
La idea es colaborar en cuáles son las mejores prácticas objetivas para que eventualmente podamos usarlas en algún proceso de revisión de colaboración comunitaria.
ACTUALIZACIÓN: Después de ver las primeras respuestas, queda claro que necesitamos tener solo una idea / sugerencia / práctica recomendada por respuesta y las personas deben revisar la lista para asegurarse de que no haya duplicados antes de publicarla.
plugin-development
customization
wiki
MikeSchinkel
fuente
fuente
Respuestas:
Usar acciones y filtros
Si cree que a la gente le gustaría agregar o alterar algunos datos: proporcione apply_filters () antes de regresar .
Tomemos un ejemplo de otra pregunta :
Relacionado
fuente
Cargar scripts / CSS con
wp_enqueue_script
ywp_enqueue_style
Los complementos no deben cargar / intentar cargar versiones duplicadas de archivos JS / CSS, especialmente jQuery y otros archivos JS incluidos en WP Core.
Los complementos siempre deben usarse
wp_enqueue_script
ywp_enqueue_style
al vincular archivos JS y CSS y nunca directamente a través de<script>
etiquetas.Relacionado
fuente
Soporte I18n
Todas las cadenas de salida deben estar vinculadas a un dominio de texto apropiado para permitir la internacionalización de las partes interesadas, incluso si el desarrollador no tiene interés en traducir su propio complemento.
Tenga en cuenta que es muy importante cargar los archivos de idioma durante la
init
acción para que el usuario pueda conectarse a la acción.Vea el Codex: I18n para desarrolladores de WordPress
Y también este artículo: Carga de archivos de idioma WP correctamente .
Desde WordPress 4.6+
WP 4.6 cambió el orden de carga y las ubicaciones verificadas, lo ha hecho mucho más fácil para los desarrolladores y usuarios.
Considerando un complemento con un dominio de texto 'my-plugin', WordPress buscará PRIMERO un archivo de traducción en:
/wp-content/languages/plugins/my-plugin-en_US.mo
Si no puede encontrar uno allí, buscará uno donde el complemento le indique que busque (generalmente en la carpeta 'language' de los complementos si sigue el códice):
/ wp-content / plugins / my-plugin / languages / my- plugin-en_US.mo
Por último, si no se encuentra ningún archivo de idioma, verificará la ubicación predeterminada de:
/wp-content/languages/my-plugin-en_US.mo
La primera verificación se agregó en 4.6 y brinda a los usuarios un lugar definido para agregar un archivo de idioma, ya que antes necesitaban saber dónde el desarrollador agregó el archivo de idioma, ahora el usuario solo necesita saber el dominio de texto del complemento: / wp-content / idiomas / complementos / TEXTDOMAIN-LOCAL.mo
A continuación se muestra el método anterior (no relevante desde WP 4.6+)
fuente
Asegúrese de que los complementos no generen errores con WP_DEBUG
Siempre pruebe sus complementos con
WP_DEBUG
activado e idealmente hágalo durante todo su proceso de desarrollo. Un complemento no debe arrojar CUALQUIER error conWP_DEBUG
activado. Esto incluye avisos obsoletos e índices no verificados.Para activar la depuración, edite su
wp-config.php
archivo para que laWP_DEBUG
constante se establezca entrue
. Vea el Codex sobre depuración para más detalles.fuente
Primer uso de las funciones existentes en WordPress Core
Si puede: use las funciones existentes incluidas en el núcleo de WordPress en lugar de escribir las suyas propias. Solo desarrolle funciones PHP personalizadas cuando no haya una función preexistente apropiada en el núcleo de WordPress.
Una ventaja es que puede usar "avisos obsoletos de registro" para monitorear fácilmente las funciones que deben reemplazarse. Otro beneficio es que los usuarios pueden ver la documentación de la función en el Codex y comprender mejor lo que hace el complemento, incluso si no son un desarrollador PHP experimentado.
Relacionado
fuente
wp-login.php
. Por lo tanto, "Si se puede" era un buen comienzo para la respuesta ...La desinstalación debería eliminar todos los datos de un complemento
Al ser eliminado de una instalación de WordPress, un complemento debe eliminar todos los archivos, carpetas, entradas de la base de datos y tablas que creó, así como los valores de las opciones que creó.
Los complementos pueden ofrecer una opción para exportar / importar configuraciones, de modo que las configuraciones se puedan guardar fuera de WordPress antes de eliminarlas.
Relacionado
fuente
Prevenir la inyección de SQL con datos de entrada
Un complemento debe desinfectar todas las entradas del usuario recuperadas directa o indirectamente (por ejemplo, a través de
$_POST
o$_GET
) antes de usar los valores de entrada para consultar la base de datos MySQL.Ver: Formateo de sentencias SQL .
fuente
Prefijar todos los elementos del espacio de nombres global
Un complemento debe anteponer correctamente TODOS los elementos del espacio de nombres global (constantes, funciones, clases, variables, incluso cosas como taxonomías personalizadas, tipos de publicaciones, widgets, etc.). Por ejemplo, no cree una función llamada
init()
; en su lugar, nómbralo como algo asíjpb_init()
.Es común usar un prefijo de tres o cuatro letras delante de los nombres o hacer uso de la función de espacio de nombres PHP . Compare: ¿ Prefijo de una letra para constantes de clase PHP?
Relacionado
fuente
Use un código PHP5 orientado a clases y objetos
No hay razón para no escribir código PHP5 limpio y orientado a objetos. El soporte de PHP4 se eliminará gradualmente después de la próxima versión (WP 3.1). Por supuesto, puede prefijar todos los nombres de sus funciones para terminar con interminablemente nombres_función_con_lotes_de_colecciones, pero es mucho más fácil escribir una clase simple y agrupar todo en eso. Además, coloque su clase en un archivo separado y asígnele el nombre correspondiente para que pueda ampliarla y mantenerla fácilmente:
fuente
La desactivación no debería provocar la pérdida de datos
Un complemento no debe eliminar ninguno de sus datos tras la desactivación .
Relacionado
fuente
Solo incluya los archivos que necesita ...
Si está en el front end, no incluya código relacionado con el área de administración.
fuente
Anuncie la pérdida de datos en la desinstalación del complemento
Tras la desinstalación, un complemento debe indicar al usuario que eliminará sus datos y recibir una confirmación de que el usuario está de acuerdo con eliminar los datos antes de hacerlo, y un complemento también debe permitirle al usuario la opción de conservar los datos después de la desinstalación. (Esta idea de @EAMann.)
Relacionado
fuente
Deje que se cambie el nombre de la carpeta del complemento
/ plugins / pluginname / {varios}
El "nombre del complemento" utilizado para la carpeta siempre debe ser modificable.
Esto normalmente se maneja definiendo constantes y usándolas consistentemente en todo el complemento.
No hace falta decir que muchos complementos populares son pecadores.
Relacionado:
plugins_url()
para un enlace fácil a los recursos, incluido con el complemento.fuente
plugin_basename(__FILE__)
para descifrar el nombre local del complemento. Eso es útil para tener copias del mismo complemento (pruebas, varias cuentas en otro lugar pero solo una por complemento, ...) también.Utilice WordPress (integrado) Manejo de errores
No solo
return;
si alguna entrada del usuario fue incorrecta. Entregarles algo de información se hizo mal.Un error (objeto) para todos
Puede configurar un objeto de error global para su tema o complemento durante el arranque:
Más tarde, puede agregar errores ilimitados a pedido:
Luego puedes buscarlos todos al final de tu tema. De esta manera, no interrumpe el procesamiento de la página y aún puede generar todos sus errores para desarrollar
Puede encontrar más información en este Q . Un ticket relacionado para arreglar el "trabajo conjunto" de
WP_Error
ywp_die()
está vinculado desde allí y seguirá otro ticket. Comentarios, críticas y tal es apreciado.fuente
wp_die();
era incorrecto (invertido). Sobre tu Q) No lo entiendo completamente. Cuando se configura una instancia de la clase WP_Error que tengan pleno acceso a sus datos a través de funciones comoget_error_code();
,get_error_message();
,get_error_data();
y las versiones plurales. También puede crear una instancia solo una vez en el arranque de su tema o complemento y simplemente usarlo$error->add();
para completar otros errores y finalmente mostrarlo en el pie de página$error->get_error_messages();
para atraparlos a todos.WP_Error
y lowp_die()
acerca (ya tiene un parche) en la parte inferior de la Q. Cualquier comentario, sugerencia, crítica y demás es muy apreciado.Minimice los nombres agregados al espacio de nombres global
Un complemento debe reducir su impacto tanto como sea posible al minimizar la cantidad de nombres que agrega al espacio de nombres global .
Esto se puede hacer encapsulando las funciones del complemento en una clase o usando la función de espacios de nombres PHP . Prefijar todo también puede ayudar, pero no es tan flexible.
Junto a las funciones y clases, un complemento no debe introducir variables globales. El uso de clases normalmente las deja obsoletas y simplifica el mantenimiento del complemento.
Relacionado
fuente
Comenta usando PhpDoc
La mejor práctica está cerca del estilo PhpDoc. Si no utiliza un IDE como "Eclipse", puede consultar el Manual de PhpDoc .
No tiene que saber exactamente cómo funciona esto. Los desarrolladores profesionales pueden leer el código de todos modos y solo lo necesitan como resumen. Los codificadores y usuarios aficionados pueden apreciar la forma en que lo explica en el mismo nivel de conocimiento.
fuente
Use la API de configuración antes de add_option
En lugar de agregar opciones a la base de datos a través de la función add_option, debe almacenarlas como una matriz con el uso de la API de configuración que se encarga de todo por usted.
Use la API de modificaciones de tema antes de add_option
La API de modificaciones es una construcción bastante simple y una forma segura que permite agregar y recuperar opciones. Todo se guarda como valor serializado en su base de datos. Fácil, seguro y simple.
fuente
update_option
y nuncaadd_option
, la función de actualización creará la opción cuando no existe .. :)add_option
. Hay un buen caso de uso en eladd_option
que si la opción ya está configurada, no se cambia, por lo que la uso en la activación para preservar las posibles preferencias del usuario.add_option
es cuando desea desactivar explícitamente la carga automática.update_option
forzará la carga automática a verdadero, por lo que desea deshabilitar la carga automática, úselaadd_option
cuando cree inicialmente la opción.Proteger la privacidad de los usuarios del complemento
(Anteriormente: Comunicación API anónima)
Si un complemento se comunica con un sistema externo o API (p. Ej., Algunos servicios web), debe hacerlo de forma anónima o proporcionar al usuario una opción anónima que garantice que ningún dato relacionado con el usuario del complemento se filtre a una segunda parte sin control.
fuente
Complementos de host en WordPress.org
Use el repositorio SVN provisto en WordPress.org para alojar complementos. Facilita la actualización de la experiencia del usuario y, si nunca antes ha usado SVN, puede comprenderlo al usarlo en un contexto que lo justifique.
fuente
Proporcionar control de acceso mediante el uso de permisos
En muchos casos, los usuarios pueden no querer que todos tengan acceso a las áreas creadas por su complemento, especialmente con complementos que realizan múltiples operaciones complejas, una sola verificación de capacidad codificada puede no ser suficiente.
Como mínimo, realice comprobaciones de capacidad adecuadas para todos los diferentes tipos de procedimientos para los que se puede utilizar su complemento.
fuente
Importar / Exportar configuración del complemento
No es tan común en todos los complementos, pero si su complemento tiene (algunas) configuraciones, debería proporcionar Importar / Exportar datos como la configuración y la entrada del usuario .
Importar / Exportar mejora la usabilidad de un complemento.
Un complemento de ejemplo que tiene una funcionalidad de importación y exportación (y también un mecanismo de deshacer) es Breadcrumb NavXT (Plugin de Wordpress) (divulgación completa: algún pequeño código realizado por mí, la mayoría lo ha hecho mtekk).
Relacionado
fuente
Organiza tu código
Siempre es difícil leer el código que no está escrito en el orden en que se ejecuta. Primero incluya / require, define, wp_enqueue_style & _script, etc., luego las funciones que necesita el complemento / tema y, por último, el generador (por ejemplo, pantalla de administración, material que se integra en el tema, etc.).
Intenta separar cosas como css y js en sus propias carpetas. También intente hacer esto con funciones que son solo auxiliares, como los aplanadores de matriz y similares. Mantener el archivo "principal" tan limpio y fácil de leer como sea posible es una forma de ayudar a los usuarios, desarrolladores y a usted, cuando intenta actualizar en un año y no ha visto el código por más tiempo.
También es bueno tener una estructura que repites a menudo, para que siempre encuentres tu camino. Desarrollar en una estructura conocida en diferentes proyectos le dará tiempo para mejorarlo e incluso si su cliente cambia a otro desarrollador, nunca escuchará "dejó un caos". Esto construye su reputación y debe ser un objetivo a largo plazo.
fuente
Morir con estilo
morir de manera decente Todas las funciones de complementos (e incluso temas) deberían usarse
wp_die()
en lugares críticos para ofrecer al usuario un poco de información sobre lo que sucedió. Los errores de php son molestos ywp_die
pueden dar al usuario un mensaje agradable sobre lo que el plugin (o ellos) hicieron mal. Además, si el usuario tiene la depuración desactivada, el complemento simplemente se romperá.El uso
Relacionado:wp_die()
también ayuda a que sus complementos / temas sean compatibles con el conjunto de pruebas de WordPress .fuente
Proporcionar pantallas de ayuda para los usuarios
Es mejor decir RTFM (haga clic en ayuda) como respuesta que tener que responder la pregunta una y otra vez.
actualización / nota: (ver comentarios de kaiser): el ejemplo anterior se utilizará en una clase
fuente
Ofrecer formularios extensibles
Cuando un complemento ofrece la posibilidad de ingresar datos, siempre debe tener un gancho al final, justo antes del botón "enviar" y / o "restablecer", para que los desarrolladores puedan extender fácilmente el formulario no solo con campos, sino también con botones.
Ver: API de configuración
Relacionado
fuente
incluir la función siempre a través de Hook, no directamente.
Ejemplo:
No utilice para incluir la clase del complemento a través de nuevo sin gancho
Usa los complementos Hook_loaded
Actualización: un pequeño ejemplo en vivo: Plugin-svn-trunk-page y un pseudoejemplo
También puede cargar a través de mu_plugins_loaded en multisite-install, consulte el códice para referencia de acción: http://codex.wordpress.org/Plugin_API/Action_Reference También aquí puede ver cómo incluir wP con este gancho: http: // adambrown. info / p / wp_hooks / hook / plugins_loaded? version = 2.1 & file = wp-settings.php Lo uso muy a menudo y no es tan difícil y temprano, mejor como una nueva clase dura ();
fuente
//avoid direct calls to this file where wp core files not present if (!function_exists ('add_action')) { header('Status: 403 Forbidden'); header('HTTP/1.1 403 Forbidden'); exit(); } if ( !class_exists( 'plugin_class' ) ) { class plugin_class { function __construct() { } } // end class function plugin_start() { new plugin_class(); } add_action( 'plugins_loaded', 'plugin_start' ); } // end class_exists
Complementos de licencia bajo una licencia compatible con GPL
Los complementos y los temas deben tener una licencia compatible con WordPress. Esto les permite redistribuirse con WordPress como un "programa". Una licencia recomendada es la GPL . Tenga cuidado de que todas las bibliotecas de códigos incluidas con el complemento sean compatibles con la misma licencia.
(Este ha sido un problema y un punto de debate serio tanto en el pasado como en el presente ).
fuente
La descripción de su complemento debe detallar con precisión las funciones de su complemento. Hay 10 complementos de publicación destacados. Todos ellos muestran publicaciones destacadas, pero muchos tienen características diferentes. Debería ser fácil comparar su complemento con complementos similares leyendo la descripción.
Debes evitar alardear de lo simple que es tu complemento a menos que realmente sea muy básico. Debe incluir enlaces útiles en la descripción, como el enlace a la configuración.
fuente
Minimice los efectos secundarios de fuentes de datos remotas y servicios web
Un plugin debe Caché / Escudo de servicio web y / o XMLRPC / peticiones SOAP a través de una capa /-proveedor de datos de almacenamiento en caché si se utilizan de manera a no hacer front-solicitudes en espera de respuesta de servicio web (lento).
Eso incluye la descarga de RSS y otras páginas. Diseñe sus complementos para que soliciten datos en segundo plano.
Un posible PASO es (Tome la publicación en ping.fm como ejemplo): cree una tabla de almacenamiento intermedio, digamos: ping_fm_buffer_post (fecha, hora, mensaje, tiempo_enviado, estado)
fuente
Prueba tu plugin
Definitivamente deberíamos tener algunas herramientas de prueba en nuestro entorno de desarrollo de complementos.
Según esta respuesta de Ethan Seifert a una pregunta de prueba, estas son buenas prácticas a seguir:
fuente