I believe that is the only way to do it. More specifically, the GL plug-ins are triggered upon save, but it actually depends upon the standard GL lines being created first, which happens after submit. Then, once the standard GL lines are created, the Custom GL plug-ins are triggered.
However, there are two processing options for GL plug-ins: synchronous (the default) and asynchronous. If you want to de-couple the custom GL processing so that it runs at a later time (usually a short delay, but can sometimes take longer), then you can set the plug-in to asynchronous mode. The downside is that if the custom GL plug-in fails, you won’t know about it at the time of saving the transaction. There is a page for asynchronous GL plug-in executions that someone needs to review periodically and manage, either re-trying failed executions, or notifying the plug-in developer if re-try doesn’t work.