Conectando con plugins
Estoy trabajando en un plugin que idealmente podría realizar acciones cuando un usuario hace algo a través de un plugin diferente.
Puedo agregar hooks personalizados en esos plugins, pero obviamente esto no funcionaría bien cuando quiera distribuir mi plugin. ¿Existe una buena manera de agregar hooks a los plugins de otras personas desde mi propio plugin? ¿La única solución real es pedirle al autor que incluya hooks personalizados para que otros desarrolladores puedan construir sobre su trabajo?
Ejemplo: Quiero hacer algo en mi plugin cuando alguien retweetea un artículo. Si hubiera un hook personalizado en el plugin de retweet popular al que pudiera conectarme y disparar acciones, sería genial. No lo hay, así que puedo modificar su plugin para incluirlo, pero eso solo funciona para mi copia, y no quiero intentar redistribuir eso.
¿Simplemente necesitamos ser mejores desarrolladores de plugins para que todos podamos trabajar bien juntos?
@Ryan Elkins:
Supongo que la respuesta depende de cuán importante sea cada caso de uso para ti. En algunos casos sería algo rápido y sencillo, en otros podría ser un caso de uso más significativo. Aquí están las dos cosas que me vienen a la mente:
Buscar Ganchos Alternativos dentro del Núcleo de WordPress
Si es algo rápido y sencillo, a veces puedes usar otros ganchos secundarios del núcleo para modificar lo que necesitas, o ganchos primarios y secundarios mediante el uso de ob_start()
/ob_end_clean()
(consulta la respuesta de @Todd Perkins a "Manejo de salida HTML grande mediante código de plugin" para ver un ejemplo de código).
Para rastrear los ganchos que podrías usar, echa un vistazo al plugin Instrument Hooks que publiqué ayer para ayudarte a encontrar los ganchos que potencialmente puedes utilizar.
Envía un Parche con tu Gancho Deseado al Desarrollador del Plugin
Si tu caso de uso es más significativo para ti o para la comunidad, recomendaría agregar el gancho que necesitas al plugin. Luego pruébalo bien para asegurarte de que realmente aborda tu caso de uso, después de lo cual puedes enviar un parche al desarrollador del plugin con la esperanza de que lo aplique. De esta manera, le facilitas el trabajo al proporcionarle código probado y tú mismo trabajas en el caso de uso para asegurarte de que es realmente lo que necesitas. No puedo decirte cuántas veces pensé que necesitaba un cierto gancho, solo para descubrir después de intentar implementarlo que necesitaba un gancho, pero uno diferente al que imaginé inicialmente.
Si no estás familiarizado con la creación de un parche, aquí hay un buen artículo sobre cómo parchear el núcleo de WordPress, donde la mayor parte se aplica a parchear plugins, y para lo que no aplique, espero que sea obvio qué hacer:
¿Espero que esto ayude?
P.D. Una cosa que encuentro un poco decepcionante y que tu pregunta aborda es el porcentaje de plugins que están diseñados solo para usuarios finales, es decir, que no tienen ganchos propios. ¿Imaginas si WordPress estuviera diseñado como la mayoría de los plugins? Sería inflexible y una solución muy nicho.
Tal vez las cosas serían diferentes si WordPress tuviera la capacidad de instalar automáticamente plugins de los que dependen otros plugins. Tal como está, normalmente tengo que escribir gran parte de la funcionalidad que necesito desde cero porque los clientes quieren las cosas de cierta manera y los plugins disponibles, aunque cubren el 90%, no me permiten la flexibilidad de actualizar el 10% restante.
Realmente desearía que los líderes de la comunidad de WordPress identificaran una manera de asegurar que los plugins sean recompensados por seguir las mejores prácticas (como agregar ganchos para otros desarrolladores), similar a cómo las buenas respuestas son recompensadas en un sitio de StackExchange.

¿Simplemente necesitamos intentar
yser mejores desarrolladores de plugins para que todos podamos trabajar bien juntos?
Para empezar, sí.
¿La única solución real es pedirle al autor que incluya hooks personalizados para que otros desarrolladores puedan construir sobre su trabajo?
Esa sería una buena solución.
También podrías copiar el otro plugin y simplemente agregar los cambios, aunque sería más complicado.

Creo que respondes tu propia pregunta en la pregunta, haciendo que sea un tanto retórica.
Obviamente estás hablando de un sistema similar al que Google promueve con Android y el sistema de Intents, donde una aplicación puede publicar acciones que es capaz de realizar en nombre de otras aplicaciones, las cuales pueden conectarse a ellas y pasar datos de un lado a otro. Personalmente, creo que es algo hacia lo que debemos avanzar como buenos desarrolladores: usamos WordPress porque ya es increíble, tan increíble que la decisión entre usarlo o desarrollar un producto interno similar suele ser bastante fácil en la mayoría de los casos. El repositorio de plugins en sí es otro ejemplo de lo mismo, principalmente como usuario final + desarrollador: ¿por qué desarrollar un plugin para Twitter cuando ya existe uno perfectamente funcional?
El mismo "¿por qué desarrollar duplicados?" está en el centro de tu pregunta aquí. El sistema de Intents de Android permite que las aplicaciones utilicen funciones ya creadas y pasen datos entre ellas, y esto es popular y muy usado porque se promueve mucho. Hay un sistema similar ya implementado en WordPress, pero rara vez se usa más allá de los hooks presentes en el código principal, que sí se utilizan mucho.
Beneficiaría a la comunidad si hubiera más hooks en plugins personalizados, pero como dices, no hay una manera fácil de añadirlos cuando y donde los necesitas.
En cuanto al plugin de Twitter con el que quieres conectarte, envía un correo al autor, estoy seguro de que estaría encantado de añadirlos por ti.
Si hay un lugar en tu plugin donde creas que sería bueno poner un hook, hazlo y documéntalo bien. Si más personas empiezan a poner hooks en sus plugins, o hay un impulso general hacia ello, eventualmente sucederá.
Así que para responder a tu pregunta final:
¿Simplemente necesitamos intentar ser mejores desarrolladores de plugins para poder llevarnos bien todos juntos?
Sí.
Edición: He pensado un poco más sobre la pregunta en sí y la mejor manera de implementar hooks. ¿No podrías añadir una acción que se ejecute si la función particular del plugin que intentas ejecutar está presente?

Eso funcionaría, pero ¿qué pasa si una función de un plugin diferente tiene el mismo nombre?

Ups, tal vez no funcionaría, porque necesitas saber qué se está retuiteando y por quién. Verificar la función es una solución en tiempo de ejecución, lo que necesitamos es una solución en tiempo real, una que se ejecute cuando se llama a la función en cuestión o devuelve datos.

@Arlen - Imagina que creas tu propia función que verifica si la función particular está allí. Se ejecutaría después de 'plugins_loaded', y si está allí, establece un booleano que habilita las características. Depende en gran medida de que el código no cambie, pero no veo por qué no funcionaría.

definir una función:
function my_footer() {
do_action('my_footer');
}
ahora puedes engancharte a este hook: add_action('my_footer', 'example_function', 1);
#
más información ver en mi publicación.

Entiendo cómo agregar hooks personalizados - la pregunta es cómo engancharse a partir del plugin de otra persona, idealmente de una manera que no requiera modificación directa de su plugin.

@Arlen: muchas gracias, disculpa por mi mal inglés
@Ryan: no es posible, cuando el plugin no tiene un hook; pero puedes verificar reemplazar la función o clase, cuando el autor lo solicite en su plugin. Sin embargo, es posible verificar los plugins activos y enganchar antes en WP que el otro plugin y reemplazar su función.
