A tarefa
Você pode registrar adicionar diretórios de Temas adicionais usando register_theme_directory()
a instalação do WP. Infelizmente, o núcleo não oferece a mesma funcionalidade para plugins. Já temos MU-Plugin, Drop-Ins, Plugins e Temas. Mas precisamos de mais para uma melhor organização de arquivos.
Aqui está a lista de tarefas a serem realizadas:
- Adicionar um diretório de plug-in adicional
- Para cada diretório de plug-in, é necessária uma nova "guia", como mostrado aqui [1]
- O diretório adicional teria a mesma funcionalidade que o diretório de plug-ins padrão
O que há para você?
A melhor e mais completa resposta receberá uma recompensa.
[1] Guia adicional para uma nova pasta / diretório de plugins
plugins
plugin-development
directory
kaiser
fonte
fonte
get_themes()
em uma classe.Respostas:
Ok, vou dar uma facada nisso. Algumas limitações que encontrei ao longo do caminho:
Não há muitos filtros nas subclasses de WP_List_Table, pelo menos não onde precisamos deles.
Devido a essa falta de filtros, não podemos manter uma lista precisa dos tipos de plug-ins na parte superior.
Também precisamos usar alguns hacks JavaScript impressionantes (leia-se: sujos) para exibir plug-ins como ativos.
Coloquei meu código de área de administrador em uma classe, para que meus nomes de função não sejam prefixados. Você pode ver todo esse código aqui . Por favor contribua!
API central
Apenas uma função simples que configura uma variável global que contém nossos diretórios de plugins em um array associativo. O
$key
que vai ser algo usado internamente para buscar plugins, etc.$dir
é um caminho ou algo completo em relação aowp-content
diretório.$label
será para nossa exibição na área de administração (por exemplo, uma string traduzível).Então, é claro, precisamos carregar os plugins. Conecte-se
plugins_loaded
tarde e analise os plug-ins ativos, carregando cada um.Área de administração
Vamos configurar nossa funcionalidade dentro de uma classe.
Vamos nos conectar
plugins_loaded
muito cedo e configurar as "ações" permitidas que usaremos. Eles manipularão a ativação e desativação de plug-ins, pois as funções internas não podem fazê-lo com diretórios personalizados.Depois, há a função conectada
load-plugins.php
. Isso faz todo tipo de coisa divertida.Vamos passar por uma coisa de cada vez. o
get_plugins
método, é um invólucro em torno de outra função. Ele preenche o atributoplugins
com dados.cd_apd_get_plugins
é uma parte daget_plugins
função incorporada sem os códigosWP_CONTENT_DIR
e osplugins
negócios. Basicamente: obtenha o diretório$wp_plugin_directories
global, abra-o, encontre todos os arquivos de plug-in. Armazene-os no cache para mais tarde.A seguir, é o negócio incômodo de realmente ativar e desativar plugins. Para fazer isso, usamos o
handle_actions
método Isso é, novamente, flagrantemente arrancado da parte superior dowp-admin/plugins.php
arquivo principal .Algumas funções personalizadas aqui novamente.
cd_apd_activate_plugin
(roubado deactivate_plugin
) ecd_apd_deactivate_plugins
(roubado dedeactivate_plugins
). Ambos são iguais às suas respectivas funções "pai" sem os diretórios codificados.E a função de desativação
Também existe uma
cd_apd_validate_plugin
função, a qual, é claro, é um roubo,validate_plugin
sem o lixo codificado.Tudo bem, com isso fora do caminho. Na verdade, podemos começar a falar sobre a exibição da tabela da lista
Etapa 1: adicione nossas visualizações à lista na parte superior da tabela. Isso é feito filtrando
views_{$screen->id}
dentro de nossainit
função.Em seguida, a função de gancho real apenas percorre o
$wp_plugin_directories
. Se um dos diretórios recém-registrados tiver plug-ins, nós o incluiremos na exibição.A primeira coisa que precisamos fazer se estiver visualizando uma página de diretório de plugins personalizada é filtrar as visualizações novamente. Precisamos nos livrar da
inactive
contagem, porque não será preciso. Uma conseqüência de não haver filtros onde precisamos deles. Ligue novamente ...E uma rápida desabilitação ...
Em seguida, vamos nos livrar dos plugins que você teria visto na tabela de lista e substituí-los por nossos plugins personalizados. Engate
all_plugins
.Como já configuramos nossos plugins e dados (veja
setup_plugins
acima), ofilter_plugins
método just (1) salva a contagem de todos os plugins para mais tarde e (2) substitui os plugins na tabela de lista.E agora vamos matar as ações em massa. Estes poderiam ser facilmente suportados, suponho?
Os links de ações padrão do plug-in não funcionarão para nós. Então, em vez disso, precisamos configurar nossos próprios (com as ações personalizadas, etc). Na
init
função.As únicas coisas que são alteradas aqui são (1) estamos alterando as ações, (2) mantendo o status do plug-in e (3) alterando um pouco os nomes dos nonce.
E, finalmente, precisamos enfileirar um pouco de JavaScript para completar. Na
init
função novamente (todos juntos desta vez).Ao enfileirar nosso JS, também usaremos
wp_localize_script
para obter o valor da contagem total de "todos os plugins".E, é claro, o JS é apenas alguns truques legais para fazer com que a tabela da lista seja exibida corretamente. Também colocaremos a contagem correta de todos os plug-ins no
All
link.Embrulhar
O carregamento real de diretórios de plug-ins adicionais é bastante desinteressante. Conseguir que a tabela da lista seja exibida corretamente é a parte mais difícil. Ainda não estou completamente satisfeito com o resultado, mas talvez alguém possa melhorar o código
fonte
__return_empty_array()
.__return_empty_array
função!Pessoalmente, não tenho nenhum interesse em modificar a interface do usuário, mas adoraria um layout mais organizado do sistema de arquivos, por vários motivos.
Para esse fim, outra abordagem seria usar links simbólicos.
Você pode configurar seus plugins personalizados
plugins-custom
, que podem fazer parte do repositório de controle de versão do seu projeto.Em seguida, você pode instalar dependências de terceiros no
plugins-external
(via sub-módulos Composer ou Git, ou o que você preferir).Em seguida, você pode ter um script Bash simples ou um comando WP-CLI que varre os diretórios adicionais e cria um link simbólico
plugins
para cada subpasta encontrada.plugins
ainda estaria confuso, mas isso não importaria, porque você só precisaria interagir complugins-custom
eplugins-external
.Escalar para
n
diretórios extras seguiria o mesmo processo que os dois primeiros.fonte
Ou você também pode usar o COMPOSER com o caminho do diretório personalizado definido para apontar para a pasta wp-content. Se não for uma resposta direta da sua pergunta, é uma nova maneira de pensar no wordpress, vá para o compositor antes que ele o consuma.
fonte