Zadanie
Możesz się zarejestrować, dodając dodatkowe katalogi motywów register_theme_directory()
do instalacji WP. Niestety rdzeń nie zapewnia takiej samej funkcjonalności wtyczek. Mamy już wtyczki MU, wtyczki, wtyczki i motywy. Ale potrzebujemy więcej dla lepszej organizacji plików.
Oto lista zadań do osiągnięcia:
- Dodaj dodatkowy katalog wtyczek
- Dla każdego katalogu wtyczek potrzebna jest nowa „karta”, jak pokazano tutaj [1]
- Dodatkowy katalog miałby taką samą funkcjonalność jak domyślny katalog wtyczek
Co tam jest dla ciebie?
Najlepsza i najbardziej kompletna odpowiedź zostanie nagrodzona.
[1] Dodatkowa zakładka dla nowego folderu / katalogu wtyczek
plugins
plugin-development
directory
kajzer
źródło
źródło
get_themes()
do klasy.Odpowiedzi:
Dobra, zrobię to dźgnięciem. Kilka ograniczeń, które napotkałem po drodze:
W podklasach WP_List_Table nie ma wielu filtrów, a przynajmniej nie tam, gdzie ich potrzebujemy.
Z powodu tego braku filtrów nie możemy tak naprawdę utrzymywać dokładnej listy typów wtyczek na górze.
Musimy także użyć niesamowitych (czytaj: brudnych) hacków JavaScript, aby wyświetlić wtyczki jako aktywne.
Zawijam kod administratora w klasie, więc nazwy funkcji nie są poprzedzane. Możesz zobaczyć cały ten kod tutaj . Proszę przyczynić się!
Centralny interfejs API
Po prostu prosta funkcja, która ustawia zmienną globalną, która będzie zawierać nasze katalogi wtyczek w tablicy asocjacyjnej.
$key
Będzie coś używanego wewnętrznie do pobierania wtyczek itd$dir
jest albo pełna ścieżka lub coś w stosunku dowp-content
katalogu.$label
będzie przeznaczone do wyświetlania w obszarze administracyjnym (np. ciąg do przetłumaczenia).Następnie oczywiście musimy załadować wtyczki. Spóźnij się
plugins_loaded
i przejrzyj aktywne wtyczki, ładując każdą z nich.Obszar administracyjny
Ustawmy naszą funkcjonalność w klasie.
Wkroczymy
plugins_loaded
naprawdę wcześnie i skonfigurujemy dozwolone „akcje”, których będziemy używać. Będą one obsługiwać aktywację i dezaktywację wtyczek, ponieważ wbudowane funkcje nie mogą tego zrobić z niestandardowymi katalogami.Następnie jest podłączona funkcja
load-plugins.php
. Robi to wiele fajnych rzeczy.Przejrzyjmy to po kolei.
get_plugins
metodą jest owinięcie wokół innej funkcji. Wypełnia atrybutplugins
danymi.cd_apd_get_plugins
jest zgrywaniem wbudowanejget_plugins
funkcji bez sztywnegoWP_CONTENT_DIR
iplugins
biznesowego. Zasadniczo: pobierz katalog z$wp_plugin_directories
globalnego, otwórz go, znajdź wszystkie pliki wtyczek. Przechowuj je w pamięci podręcznej na później.Następną kwestią jest nieznośny proces aktywacji i dezaktywacji wtyczek. Aby to zrobić, używamy
handle_actions
metody. Jest to znowu rażąco zdzierane z góry głównegowp-admin/plugins.php
pliku.Ponownie kilka niestandardowych funkcji.
cd_apd_activate_plugin
(oderwany odactivate_plugin
) icd_apd_deactivate_plugins
(oderwany oddeactivate_plugins
). Oba są takie same, jak odpowiadające im funkcje „macierzyste” bez katalogów zakodowanych na stałe.I funkcja dezaktywacji
Istnieje również
cd_apd_validate_plugin
funkcja, która oczywiście jest zrywaniemvalidate_plugin
bez zakodowanych śmieci.W porządku, z tym na uboczu. Możemy zacząć mówić o wyświetlaniu tabeli list
Krok 1: dodaj nasze widoki do listy u góry tabeli. Odbywa się to poprzez filtrowanie
views_{$screen->id}
wewnątrz naszejinit
funkcji.Wtedy rzeczywista funkcja zaczepiona po prostu zapętla się przez
$wp_plugin_directories
. Jeśli jeden z nowo zarejestrowanych katalogów ma wtyczki, uwzględnimy go na wyświetlaczu.Pierwszą rzeczą, którą musimy zrobić, jeśli oglądamy niestandardową stronę katalogu wtyczek, jest ponowne filtrowanie widoków. Musimy pozbyć się
inactive
liczby, ponieważ nie będzie dokładna. Konsekwencją braku filtrów tam, gdzie są potrzebne. Zaczep ponownie ...I szybkie rozbrojenie ...
Następnie pozbądźmy się wtyczek, które w innym przypadku byłyby widoczne w tabeli list, i zastąpmy je naszymi niestandardowymi wtyczkami. Zaczep się
all_plugins
.Ponieważ już skonfigurowaliśmy nasze wtyczki i dane (patrz
setup_plugins
wyżej),filter_plugins
metoda just (1) zapisuje liczbę wszystkich wtyczek na później i (2) zastępuje wtyczki w tabeli list.A teraz zabijemy akcje masowe. Sądzę, że można je z łatwością wesprzeć?
Domyślne linki akcji wtyczek nie będą dla nas działać. Zamiast tego musimy skonfigurować własne (z niestandardowymi akcjami itp.). W
init
funkcji.Jedyne, co się tutaj zmienia, to (1) zmieniamy akcje, (2) utrzymujemy status wtyczki i (3) zmieniamy nieco nazwy nonce.
I na koniec, musimy tylko dodać trochę kodu JavaScript, aby go uzupełnić. W
init
funkcji ponownie (tym razem wszystko razem).Podczas kolejkowania naszego JS użyjemy również
wp_localize_script
do uzyskania wartości całkowitej liczby „wszystkich wtyczek”.I oczywiście JS to tylko kilka fajnych hacków, aby poprawnie włączyć / wyłączyć nieaktywne wtyczki tabeli listy. Wkleimy również prawidłową liczbę wszystkich wtyczek z powrotem do
All
linku.Zakończyć
Rzeczywiste ładowanie dodatkowych katalogów wtyczek jest dość nieciekawe. Utrudnione jest uzyskanie prawidłowego wyświetlania tabeli list. Nadal nie jestem w pełni usatysfakcjonowany tym, jak się okazało, ale może ktoś może poprawić kod
źródło
__return_empty_array()
.__return_empty_array
funkcję!Osobiście nie jestem zainteresowany modyfikowaniem interfejsu użytkownika, ale z kilku powodów chciałbym bardziej zorganizowany układ systemu plików.
W tym celu innym podejściem byłoby użycie dowiązań symbolicznych.
Możesz skonfigurować niestandardowe wtyczki
plugins-custom
, które mogą być częścią repozytorium kontroli wersji projektu.Następnie możesz zainstalować zależności innych firm w
plugins-external
(za pomocą podmodułów Composer, Git lub cokolwiek innego).Następnie możesz mieć prosty skrypt Bash lub komendę WP-CLI, która skanuje dodatkowe katalogi i tworzy dowiązanie symboliczne
plugins
dla każdego znalezionego podfolderu.plugins
nadal byłby zagracony, ale nie miałoby to znaczenia, ponieważ wystarczyłaby interakcja zplugins-custom
iplugins-external
.Skalowanie do
n
dodatkowych katalogów odbywałoby się w taki sam sposób jak dwa pierwsze.źródło
Możesz także użyć COMPOSER z niestandardową ścieżką do katalogu ustawioną tak, aby wskazywała folder wp-content. Jeśli nie jest to bezpośrednia odpowiedź na twoje pytanie, to nowy sposób myślenia w wordpress, przejdź do kompozytora, zanim cię pochłonie.
źródło