Jak znaleźć ślimak wtyczek?

11

Zastanawiam się, jak mogę znaleźć informacje o pluginie (slug = nazwa wewnętrzna używana przez WordPress do aktualizacji wtyczek i określenia, które wtyczki są aktualnie aktywne)? Zwykle jest to nazwa folderu wtyczki, ale jeśli wtyczka nie ma folderu, jest to nazwa jego pliku (na przykład hello.php). Czy są jakieś inne wyjątki?

  1. Czy małe i wielkie litery mają znaczenie?
  2. Czy wtyczka może mieć inny ślimak niż nazwa folderu? Co jeśli jest wtyczka o nazwie hello.php i inna /hello.php/hello.php?
Paweł
źródło
Bardzo dobre pytanie, szkoda, że ​​nie możemy przyznać nagród Q, ale myślę, że A to nagroda;)
brasofilo,

Odpowiedzi:

8

Ciąg używany w WordPress do identyfikacji wtyczki to:

plugin_basename($file);

… Gdzie $filejest plik z nagłówkami wtyczek .

Więc jeśli jesteś we wtyczce, zdobądź ślimak z:

$slug = plugin_basename( __FILE__ );
fuxia
źródło
1
plugin_basename (plik $); Nie jest ślimakiem od wersji 3.8.1. To jest ścieżka do folderu / plugin_main_file.php. Jako „ślimak” wtyczki Akismet to nie „akismet / akismet.php”, ale „akismet”.
Jeff Mattson
3
w obu przypadkach nie jest to już poprawna odpowiedź.
majick
@ maidick prawda, dla Wordpress 4.7.4 to nie jest odpowiedź
Marecky 24.04.17
2
Innym sposobem na wygenerowanie wtyczki jest użycie dirname(plugin_basename(__FILE__)).
ilanco
2

Jeśli zainstalujesz WP-CLI , możesz uzyskać listę wtyczek z ich informacją o wersji i wersją z wiersza poleceń:

> wp plugin list

Wiem, że prawdopodobnie nie tego chcesz, jeśli potrzebujesz znaleźć informacje o kodzie, ale pomogło mi to podczas pracy z wtyczką TGM-Plugin-Activation.

Trudno mi pracować z WordPress bez WP-CLI, ogólnie jest to bardzo przydatne narzędzie do wielu typowych zadań związanych z WordPress.

Thomas Bindzus
źródło
2

Różnica między plikiem wtyczki (głównym) a ślimakiem wtyczki to miejsce, w którym Kodeks WordPress mógłby zrobić znacznie więcej. Rozumiem twoje zamieszanie, ponieważ czułem je zbyt niedawno (zmieszane z frustracją).

Tego się nauczyłem, wykonując „pracę detektywistyczną” w kodzie podstawowym WordPress.

Plik wtyczki

Jest to unikalny sposób, w jaki WordPress identyfikuje i rejestruje wtyczkę. Składa się z katalogu wtyczki ORAZ głównego pliku wtyczki (ten z nagłówkiem pliku zawierającym różne szczegóły wtyczki, takie jak wersja, autor itp.).

Wyglądałoby to tak: your-plugin-directory/main-file.php

Jeśli spojrzysz na dane aktywnych wtyczek (zwrócone przez get_option( 'active_plugins' )), zobaczysz, że WordPress potrzebuje tylko tego pliku wtyczek do prawidłowej identyfikacji wtyczek.

Możesz myśleć o tym jak o głównej ścieżce względnej pliku wtyczki (względem wp-content/plugins/katalogu, który jest). Możesz „skomponować” ścieżkę bezwzględną głównego pliku wtyczki za pomocą czegoś takiego:trailingslashit( WP_PLUGIN_DIR ) . $plugin_main_file

Sam rdzeń generuje plik wtyczki w następujący sposób:

$plugin_main_file = plugin_basename( trim( $plugin_main_file_absolute_path ) );

Ślimak wtyczki

Można by się spodziewać, że „ślimak” wtyczki będzie jakimś standardowym identyfikatorem wtyczki, podobnie jak „ślimak postowy” dla postów - więc możesz użyć tego „ślimaka”, aby dostarczyć go do podstawowych funkcji WordPressa i zacząć działać.

Nie całkiem. Po przeszukaniu rdzenia pod kątem odniesień do wtyczek pluginów (lub tematów, które się liczą) i znalezieniu prawie niczego, myślę, że mam to do zrozumienia.

Jedyne prawdziwe ślimaki to rzeczy dostępne za pośrednictwem unikalnego adresu URL: posty, strony, taksonomie itp. To właśnie o to chodzi w tym, żeby wziąć nazwę czegoś (np. Tytuł postu) i wygenerować wersję przyjazną dla adresu URL: użyć w adresie URL.

Ale gdzie używamy „ślimaków” kompozycji / wtyczek w adresach URL?

Nie robimy tego na indywidualnych instalacjach WordPress - ani w adminie WP, ani w interfejsie użytkownika.

Istnieje jednak miejsce bardzo uwikłane w kod WordPress, witryna WordPress.org. Ludziom trudno jest rozróżnić te dwa elementy, w tym fakt, że programiści często uważają, że motyw WordPress.org lub wtyczki powinny działać tak samo, jak post lub strona.

Służą do tego samego celu, ale na osobnych stronach internetowych. Na WordPress.org są one używane do jednoznacznej identyfikacji motywu od innych oraz wtyczki od reszty (w takich URL-ach https://wordpress.org/plugins/akismet/).

Ale jeśli chodzi o poszczególne instalacje WordPress, nie można zagwarantować tej samej wyjątkowości, ponieważ nie ma uprawnień do egzekwowania tego (jak na WordPress.org). Może działać, jeśli wszystkie wtyczki i motywy pochodzą z WordPress.org, ale na szczęście tak nie jest.

Co robi kod WordPress z motywami / wtyczkami?

Podstawowy kod WordPress nie polega na ślimakach motywu / wtyczki do wykonywania takich czynności, jak instalowanie, aktywowanie, aktualizowanie, usuwanie motywów lub wtyczek.

W przypadku motywów opiera się on na katalogu motywów, ponieważ głównym punktem wejścia do motywu jest style.cssplik (nie można użyć innego pliku CSS do przechowywania nagłówka szczegółów motywu).

W przypadku wtyczek opiera się na katalogu wtyczek ORAZ głównym pliku wtyczek , ponieważ wtyczki mogą wywoływać swój główny plik w dowolny sposób.

Jedyną rzeczą, dla której rdzeń używa ślimaków theme / plugins, jest obsługa szablonów i wtyczek z katalogu WordPress.org: pobieranie list wtyczek, sprawdzanie aktualizacji, raportowanie z powrotem do danych użycia katalogu i tak dalej.


Podsumowując informacje o ślimakach wtyczek: za każdym razem, gdy znajdziesz dane wtyczki wraz z slugwpisem, 99% czasu będzie odnosić się do ślimaka wtyczki WordPress.org.

Jak idziemy o identyfikację wtyczek?

Jeśli chcesz programowo aktywować, zaktualizować, dezaktywować lub usunąć określoną wtyczkę z instalacji WordPress, musisz użyć pliku wtyczki. Możesz to zrobić w następujący sposób z głównego pliku wtyczki:

$plugin_file = plugin_basename( __FILE__ );

Jeśli chcesz kierować reklamy na określoną wtyczkę z innej wtyczki, sprawy stają się nieco trudniejsze, ponieważ musisz polegać na „zgadywaniu”.

Możesz na stałe wpisać nazwę wtyczki, wyszukać wtyczkę na liście wszystkich wtyczek (patrz get_plugins () ) i pobrać plik wtyczki z tego miejsca.

Jeśli znasz klasę lub funkcję zdefiniowaną przez tę wtyczkę, możesz użyć refleksji (zobacz odpowiedź dla klas i dla funkcji).


Mam nadzieję, że pomoże to Tobie i innym osobom, które mogą mieć trudności z radzeniem sobie z „ślimakami wtyczek”. Mogło mi to zaoszczędzić kilka godzin :)

Vlad Olaru
źródło
0

Tylko dla wyjaśnienia, ponieważ oryginalny post.

Znalazłem informacje o wtyczce wtyczki, przechodząc najpierw do folderu wtyczki, a następnie otwierając folder powiązany z wtyczką i wreszcie znajdując plik, w którym znajduje się poniższy kod. Po znalezieniu tego pliku nazwa pliku minus rozszerzenie powinna być twoją wtyczką.

Na przykład, jeśli znalazłem poniższy kod w pliku o nazwie advanced-plugin-awesomeness.php, moim ślimakiem byłaby zaawansowana wtyczka-awesomeness.

Mam nadzieję że to pomoże!

/*
Plugin Name: Name of plugin here
Version: 2.4.6
Description: plugin description here
Author: plugin author here
Pieczeń 4
źródło
-1, podczas gdy większość nazw plików i katalogów jest zgodnych, nie jest to niezawodna metoda, ponieważ aktualizacja jest tak naprawdę katalogiem, a nie nazwą pliku (chyba, że ​​nie ma katalogu).
majick
a nawet katalogu! zobacz moją zaktualizowaną odpowiedź, w rzeczywistości pochodzi ona od nazwy wtyczki.
majick
0

Niestety ślimak jest zwracany przez Update API, odpowiedź na to pytanie nie jest tak oczywista, chyba że zapytasz o sam API. Jeśli jednak chcesz zobaczyć listę swoich aktualnych wtyczek i powiązanych danych wtyczek, możesz po prostu zrobić:

print_r(get_site_transient('update_plugins'));

Ale nie będzie to zawierało informacji o nowo zainstalowanej wtyczce przez kolejne 12 godzin, musiałbyś dla nich zrobić coś innego, np. zastosowanie zmodyfikowanej wersji kodu z wp_update_pluginsw wp-includes/update.php...

Po zrobieniu tego, aby to przetestować, wydaje się potwierdzać, że niezależnie od nazwy pliku wtyczki, lokalizacji lub wielkich liter, tak naprawdę Plugin Nameto generuje aktualizację, najprawdopodobniej za pośrednictwem sanitize_title. Dlatego uważam, że poprawna odpowiedź powinna brzmieć:

// if you have the plugin basename:
// $pluginfile = WP_PLUGIN_DIR.'/'.$pluginbasename;

// otherwise if you have the absolute path already:
$plugin = get_plugin_data($pluginfile);
$pluginslug = sanitize_title($plugin['Name']);
majick
źródło
+1 i dodatkowa uwaga jest taka, że ​​może to również zmienić się z czasem, ponieważ zespół wordpress.org wyraźnie stwierdził, że metodologia obliczania ślimaków nie jest jeszcze całkowicie ostateczna
Mark Kaplun
Nie jestem pewien, czy jest to poprawne, próbowałem zrobić to dla wtyczki, ale to się nie udaje: nazwa wtyczki w postaci zwróconej to „Responsive WordPress Slider - Soliloquy Lite”, a ślimak to: soliloquy-lite
Chris
Podejrzewam, że dzieje się tak, ponieważ informacja o błędzie jest generowana w momencie przesyłania wtyczki do repozytorium i nie zmienia się później z nazwą ... w większości przypadków pasuje ona do nazwy katalogu, ale jeśli istnieją wyjątki od obu, może to być jednym lub drugim. to nie jest idealne: - /
majick
0

Możesz uzyskać nazwę folderu wtyczki (PHP 5.3 +), przekazując DIR do plugin_basename (), w następujący sposób:

$plugin_foldername = plugin_basename( __DIR__ );
jb510
źródło
0

Spróbuj tego:

function get_slugname(){
    $tmp = array();
    $plugins_all = get_plugins() ;
    $plugin_slug = explode('/',dirname(plugin_basename(__FILE__)));
    foreach ($plugins_all as $key=>$value) {
        if ($plugin_slug[0] == explode('/',$key)[0] ) {
        $tmp = $value;
        $tmp['slug'] = explode('/',$key)[0];
        $tmp['file'] = explode('/',$key)[1];
        }
    }
return $tmp;
}
zajęty
źródło
1
Proszę edytować swoje odpowiedzi i dodać wyjaśnienie co ten kod robi.
Nathan Johnson
0

W przypadku większości wtyczek „ślimak” będzie taki sam jak nazwa katalogu. Chociaż ludzie .org mogą ustawić nazwę katalogu na cokolwiek chcą.

$slug = (dirname(plugin_basename(__FILE__)));
John Dee
źródło