This may help, but I can’t take the credit. Someone in this forum wrote this
for me several years ago.
Cheers,
M
;; turn header into file
(defun turn-headline-into-org-mode-link ()
"Replace word at point by an Org mode link."
(interactive)
(when (org-at-heading-p)
(let ((hl-text (nth 4 (org-heading-components))))
(unless (or (null hl-text)
(org-string-match-p "^[ \t]*:[^:]+:$" hl-text))
(beginning-of-line)
(search-forward hl-text (point-at-eol))
(replace-string
hl-text
(format "[[file:%s.org][%s]]"
(org-link-escape hl-text)
(org-link-escape hl-text '((?\] . "%5D") (?\[ . "%5B"))))
nil (- (point) (length hl-text)) (point))))))