OnlyOffice Footnote Fixer
Plugin para WordPress que corrige automaticamente os hyperlinks de notas de rodapé gerados pelo OnlyOffice ao colar conteúdo no editor Gutenberg.
by Seu Nome · github.com/43nr1qv3/onlyoffice-footnote-fixer · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/43nr1qv3/onlyoffice-footnote-fixer/archive/refs/heads/main.zipPlugin para WordPress que corrige automaticamente os hyperlinks de notas de rodapé gerados pelo OnlyOffice ao colar conteúdo no editor Gutenberg.
🧩 O Problema
Ao criar um documento no OnlyOffice com notas de rodapé e colar o conteúdo no editor Gutenberg, os hyperlinks são gerados de forma incorreta:
Âncora no corpo do texto
<!-- ❌ OnlyOffice gera -->
<a href="about:blank#_ftn1"><sup>[1]</sup></a>
<!-- ✅ Correto -->
<a href="#_ftn1" id="_ftnref1"><sup>[1]</sup></a>
Link de retorno no rodapé
<!-- ❌ OnlyOffice gera -->
<a href="about:blank#_ftnref1">[1]</a>
<!-- ✅ Correto -->
<a href="#_ftnref1" id="_ftn1">[1]</a>
Outros problemas gerados
| Problema | Errado | Correto |
|---|---|---|
href com about:blank |
href="about:blank#_ftn1" |
href="#_ftn1" |
id com # no valor |
id="#_ftnref1" |
id="_ftnref1" |
| Atributo inválido | type="internal" |
removido |
id ausente na âncora |
sem id |
id="_ftnref1" |
id ausente no rodapé |
sem id |
id="_ftn1" |
✅ A Solução
O plugin intercepta o conteúdo antes de salvar no banco de dados e corrige todos os padrões problemáticos automaticamente, sem nenhuma ação manual.
Também é possível corrigir posts já publicados através da correção em massa no painel administrativo.
📋 Requisitos
| Requisito | Versão mínima |
|---|---|
| WordPress | 5.0 |
| PHP | 7.4 |
| Editor | Gutenberg (editor de blocos) |
📦 Instalação
Via painel do WordPress (recomendado)
- Baixe o arquivo
onlyoffice-footnote-fixer.zip - No painel do WordPress, acesse Plugins → Adicionar Novo
- Clique em Enviar Plugin
- Selecione o arquivo
.zipe clique em Instalar Agora - Após a instalação, clique em Ativar Plugin
Via FTP / terminal
# Extraia o zip dentro da pasta de plugins
unzip onlyoffice-footnote-fixer.zip -d /seu-site/wp-content/plugins/
# Ative pelo painel ou via WP-CLI
wp plugin activate onlyoffice-footnote-fixer
⚙️ Configurações
Acesse Configurações → Footnote Fixer no painel do WordPress.
Opções disponíveis
Correção automática ao salvar
Corrige os hyperlinks automaticamente toda vez que um post é salvo no Gutenberg. Ativado por padrão.
Recomendado manter ativado. A correção ocorre antes de gravar no banco de dados, garantindo que o conteúdo seja sempre salvo corretamente.
Log de correções
Registra cada correção realizada em um arquivo de log localizado em
wp-content/off-fixer.log.
Útil para auditoria. Desativado por padrão.
Tipos de post
Define quais tipos de post serão processados na correção em massa.
Por padrão: post e page.
🔧 Correção em Massa
Processa todos os posts já publicados e corrige as notas de rodapé que foram salvas antes da ativação do plugin.
Como usar:
- Acesse Configurações → Footnote Fixer
- Selecione os tipos de post desejados
- Clique em Iniciar Correção em Massa
- Acompanhe o progresso no log em tempo real
⚠️ Faça um backup do banco de dados antes de executar a correção em massa.
O processamento ocorre em lotes de 10 posts para evitar timeout e sobrecarga do servidor.
🔍 Ferramenta de Preview
Permite testar a correção antes de aplicar nos posts.
Como usar:
- Acesse Configurações → Footnote Fixer
- Cole um trecho de HTML copiado do OnlyOffice
- Clique em Testar
- Veja o HTML original e o corrigido lado a lado
🗂️ Estrutura do Plugin
onlyoffice-footnote-fixer/
│
├── onlyoffice-footnote-fixer.php # Ponto de entrada, metadados e ciclo de vida
│
├── includes/
│ └── footnote-fixer.php # Lógica de detecção e correção do HTML
│
└── admin/
├── settings-page.php # Interface do painel administrativo
└── js/
└── admin.js # Preview e correção em massa via AJAX
🔄 Como Funciona
Usuário cola conteúdo do OnlyOffice no Gutenberg
│
▼
Clica em "Salvar" → WordPress dispara content_save_pre
│
▼
Plugin verifica se há padrões do OnlyOffice no conteúdo
│
├── NÃO → conteúdo salvo sem alteração
│
└── SIM → aplica as correções:
│
├── about:blank#_ftn1 → href="#_ftn1" id="_ftnref1"
├── about:blank#_ftnref → href="#_ftnref1" id="_ftn1"
├── id="#_ftn1" → id="_ftn1"
└── type="internal" → removido
│
▼
HTML corrigido salvo no banco de dados
🪝 Hooks Utilizados
| Hook | Tipo | Descrição |
|---|---|---|
content_save_pre |
filter |
Corrige antes de salvar no banco |
the_content |
filter |
Corrige na exibição (fallback para posts antigos) |
wp_ajax_off_fixer_bulk_fix |
action |
Endpoint AJAX da correção em massa |
wp_ajax_off_fixer_preview |
action |
Endpoint AJAX do preview |
admin_menu |
action |
Registra a página de configurações |
admin_init |
action |
Registra as opções na Settings API |
admin_enqueue_scripts |
action |
Carrega o JS apenas na página do plugin |
plugin_action_links_* |
filter |
Adiciona link "Configurações" na lista de plugins |
plugins_loaded |
action |
Inicializa o plugin com segurança |
🗄️ Dados Armazenados
O plugin armazena apenas uma opção no banco de dados:
| Opção | Tipo | Descrição |
|---|---|---|
off_fixer_options |
array |
Configurações do plugin |
off_fixer_version |
string |
Versão instalada |
Ao desinstalar o plugin, todas as opções e o arquivo de log são removidos automaticamente.
🏗️ Geração do ZIP
Linux / macOS
cd wp-content/plugins/
zip -r onlyoffice-footnote-fixer.zip onlyoffice-footnote-fixer/ \
--exclude "*.git*" \
--exclude "*.DS_Store" \
--exclude "*.zip"
Windows (PowerShell)
Compress-Archive -Path .\onlyoffice-footnote-fixer\ `
-DestinationPath .\onlyoffice-footnote-fixer.zip
Script de build
# Dentro da pasta do plugin
chmod +x build.sh
./build.sh
📝 Changelog
1.0.0
- Lançamento inicial
- Correção de
href="about:blank#_ftn*" - Correção de
id="#_ftn*"com hash no valor - Remoção do atributo
type="internal" - Adição de
idausente nas âncoras - Correção em massa com progresso em tempo real
- Ferramenta de preview no painel
- Log de correções opcional
📄 Licença
Distribuído sob a licença GPLv2 or later. Consulte https://www.gnu.org/licenses/gpl-2.0.html para mais detalhes.