Uno de mis temas de Wordpress requiere algunos complementos de terceros para ejecutarse correctamente.
La mayoría de las veces solía llamar a funciones desde complementos de terceros usando declaraciones condicionales como
if(function_exist('plugin_function')) {
plugin_function() // do something
}
aunque supongo que necesito usar mucho un complemento a través de muchos archivos de mi tema ... Me gustaría evitar el uso de muchas condiciones IF ... ¿hay una manera adecuada de requerir que se instale cierto complemento específico en WP o incluso mejor instalarlos? si faltan antes de activar el tema?
Gracias
fuente
function_exists
, entonces un usuario normal simplemente recibirá el mensaje de que no ha instalado el complemento en el que se basa otro complemento. El problema es que el usuario realmente tendrá el complemento instalado y luego se preguntará por qué no funciona . Ah, y no voy a rechazarte por eso.Si bien esto no evitaría que el tema se rompa cuando el complemento esté deshabilitado, miraría este elegante artículo sobre el complemento "Cómo mostrar un aviso de administrador para temas requeridos" . Nunca me he sentido cómodo con la idea de un tema que obligue a instalar un complemento, por lo que esta parece ser la siguiente mejor opción.
Otro pensamiento rápido: nunca he intentado esto, pero me pregunto si podrías encontrar una forma inteligente de alojar múltiples ganchos en un solo condicional. Tal vez podría separar todas las funciones condicionales en un archivo diferente y solo requerirlo si se
if( function_exists( 'plugin_function' ) )
devuelvetrue
(con el entendimiento de que esta es una verificación imperfecta.fuente
Si solo necesita una página de complemento, entonces hay
is_plugin_active()
. Si lo necesita fuera, es mejor que copie / pegue la función principal en su tema y luego vuelva a usarlo:El condicional evita cualquier error con doble definición de la función.
fuente
if(function_exist('plugin_function'))
conif(is_plugin_active('plugin-file.php'))
Nota: Esta respuesta está aquí solo para facilitar la discusión entre @scribu y @kaiser. Mods: por favor no elimines. Usuarios / lectores: por favor no vote. Si desea seguir la discusión, eche un vistazo al registro de revisión / edición. Si desea unirse a la discusión, edite la Respuesta. Si la discusión tiene un resultado, se marcará como tal. Gracias.
Escenarios
También hay diferentes escenarios que tienen un peso diferente, donde podría tener una dependencia de complemento. (Los ejemplos son solo ficticios). La palabra "Plugin (principal)" se puede intercambiar con "Tema" desde el punto de vista principal.
A continuación, trato de esbozar lo que sucede cuando actualizas el complemento "otro" y la comprobación ya no funciona.
Cheque
En mi opinión, existen tres posibilidades de verificación, si desea saber si un complemento está activo:
'active_plugins'
-?Si ahora tomo mi complemento de Comprobador de enlaces internos como un ejemplo, que no ofrece API pública y no está destinado a extenderse, entonces no vería ninguna razón (como autor) para no cambiar el nombre de la función interna a pedido o solo por voluntad . Entonces, si alguien intentara aprovechar este complemento, entonces las cosas simplemente se romperían (dependiendo de la funcionalidad y la rigidez de la agrupación) en la actualización. Lo mismo ocurre con los nombres de archivo. No tendría ninguna razón real (aparte de eso, el complemento se desactivaría en la actualización) para no cambiar el nombre del archivo. Lo único que me detendría de cambiar el nombre de la carpeta es que la verificación y notificación de actualización se ejecuta contra el nombre del archivo, si está alojado en el repositorio oficial.
Entonces, diría que la parte más débil (fácil de cambiar) a la más difícil (se habla mucho de cambiar) de un complemento (principal) sería:
función »nombre del archivo principal» carpeta
Cuando dije que una verificación de función es menos frágil que usar
is_plugin_active()
, supuse que la función en cuestión es una que el autor del complemento alienta explícitamente. El último ejemplo de esto sería lawp_pagenavi()
etiqueta de plantilla que ofrece el complemento WP-PageNavi.La dificultad para definir dependencias es que no hay una forma estándar de identificar de manera exclusiva los complementos que no involucran nombres de archivos.
Más pensamientos sobre el tema:
http://wordpress.org/support/topic/plugin-plugin-dependencies-unreliable-plugin-namingidentifying-scheme
Creo que hasta ahora podemos resumirlo en tres puntos:
La forma (hasta ahora) más inteligente que puedo pensar, que ya he visto en algunos complementos (mucho menos):
Sin pensarlo demasiado en detalle, pero supongo que podría conectar su aviso a una verificación en el filtro 'todos' y verificar dentro del filtro actual si se activó cuando está en el
shutdown
gancho ...?@scibu Esto estaba dirigido a "su" tema. (Ya dejé de hablar sobre el mío). :)
Básicamente, si necesita una dependencia, y tiene un buen autor, entonces podría ofrecerle un gancho en lugar de una etiqueta de plantilla. Porque el complemento solo se engancharía si el gancho estuviera presente, o simplemente no haría nada. Y, por otro lado, no tendría un error, cuando los complementos no están presentes.
Aquí está la parte difícil (o más de una Q): Para escribir un aviso de administrador para informar al usuario sobre la dependencia "Debe instalar» DisneyWonderLinks «", puede verificar el
array_keys( $GLOBALS['wp_filter']['template_tag_like_hook'] )
. No estoy seguro de si esto funcionaría, pero afaik la matriz debería ser accesible en ambos lados (público / administrador).Eso no funcionaría. El hecho de que una devolución de llamada esté registrada en un enlace no significa que el enlace se activará cuando se espera. Lo único que sería una especie de tipo de trabajo es usar el gancho de "apagado", que mencionó antes:
Por supuesto, esto se imprimiría en la parte inferior, después de la
</html>
etiqueta, en la parte frontal (ya que allí es donde normalmente se usan las etiquetas de plantilla), lo que no es de mucha utilidad.Podría intentar almacenar el mensaje en wp_options y luego mostrarlo en el área de administración, pero eso abriría una nueva lata de gusanos: invalidación, almacenamiento en caché de complementos, etc.
fuente