Як я можу знайти плагін?


11

Мені цікаво, як я можу знайти плагіну плагіну (slug = внутрішнє ім'я, яке використовує WordPress для оновлення плагінів та для визначення того, які плагіни зараз активні)? Зазвичай це ім'я папки плагіна, але якщо плагін не має папки, це його ім'я файлу (наприклад, hello.php). Чи є інші винятки?

  1. Чи мають значення малі та великі символи?
  2. Чи може плагін відрізнятися від слизи, ніж назва папки? Що робити, якщо є плагін під назвою hello.php та інший /hello.php/hello.php?

Дуже гарне запитання, шкода, що ми не можемо нагородити нагороди Q, але я думаю, що A - це нагорода;)
brasofilo

Відповіді:


8

Рядок, який використовується в WordPress для ідентифікації плагіна, є:

plugin_basename($file);

... де $fileце файл з заголовками плагінів .

Тож якщо ви перебуваєте у своєму плагіні, отримайте слиз із:

$slug = plugin_basename( __FILE__ );

1
plugin_basename ($ файл); Чи не слимак з 3.8.1. Це шлях до папки / plugin_main_file.php. Оскільки "slug" плагіна Akismet не є "akismet / akismet.php", але це "akismet".
Джефф Маттсон

3
це не є правильною відповіддю в будь-якому випадку.
травень

@majick правда, для Wordpress 4.7.4 це не відповідь
Marecky

2
Ще один спосіб генерування плагіну - це використання dirname(plugin_basename(__FILE__)).
ilanco

2

Якщо ви встановите WP-CLI, ви можете отримати список плагінів із їхнім слугом та версією з командного рядка:

> wp plugin list

Я знаю, що це, мабуть, не те, що ви хочете, якщо вам потрібно знайти слизу в коді, але це допомогло мені під час роботи з плагіном TGM-Plugin-Activation.

Мені важко працювати з WordPress без WP-CLI, загалом це дуже корисний інструмент для багатьох поширених завдань, пов’язаних із WordPress.


2

Різниця між головним файлом плагіну та кулею плагіна - це місце, де WordPress Codex може зробити набагато краще. Я розумію вашу розгубленість, оскільки я відчував це зовсім недавно (змішаний з розладом).

Це я дізнався, виконуючи якусь "детективну роботу" над основним кодом WordPress.

Файл плагіна

Це унікальний спосіб WordPress ідентифікувати та записувати плагін. Він складається з каталогу плагінів І основного файла плагінів (файлу із заголовком файлу, що містить різні деталі плагіна, такі як версія, автор тощо).

Це виглядатиме приблизно так: your-plugin-directory/main-file.php

Якщо ви подивитеся на дані активних плагінів (повернені get_option( 'active_plugins' )), ви побачите, що WordPress цей файл плагінів потребує лише для належної ідентифікації плагінів.

Ви можете вибрати його як основний відносний шлях вашого додатка (щодо wp-content/plugins/каталогу, який є). Ви можете "скласти" абсолютний шлях до основного файлу плагінів приблизно так:trailingslashit( WP_PLUGIN_DIR ) . $plugin_main_file

Ядро генерує файл плагіна так:

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

Плагін-слизь

Можна було б очікувати, що плагін "slug" буде деяким стандартизованим ідентифікатором для плагіна, як повідомлення для службових служб для публікацій - так що ви можете використовувати цей "slug", щоб забезпечити його основними функціями WordPress і впорядкувати справи.

Не зовсім. Після пошуку ядра для посилань на плагіни (або теми для того, що має значення) і майже нічого не знайдено, я думаю, що я зрозумів це.

Єдині справжні слизи - це речі, доступні за допомогою унікальної URL-адреси: публікації, сторінки, систематики тощо. Це вся суть у тому, щоб взяти назву чогось (наприклад, заголовок публікації) та створити URL-адресу, зручну для цього: використовувати це в URL-адресі.

Але де ми використовуємо тему / плагіни "кулі" в URL-адресах?

Ми цього не робимо в окремих установках WordPress - ні в адміністраторі WP, ні у фронталі.

Однак, там дуже сильно заплутався код WordPress, сайт WordPress.org. Людям важко розмежувати обидва, в тому числі те, що серед розробників стало якимось звичним вважати тему WordPress.org, або плагіни повинні працювати так само, як і публікація сторінки.

Вони служать тій самій цілі, але на окремих веб-сайтах. На WordPress.org вони використовуються для унікальної ідентифікації теми від інших, а також плагіна від інших (у таких URL-адресах https://wordpress.org/plugins/akismet/).

Але якщо мова йде про окремі установки WordPress, то не можна гарантувати однакову унікальність, оскільки не існує повноважень щодо їх застосування (як на WordPress.org). Це може спрацювати, якби всі плагіни та теми надходили з WordPress.org, але, на щастя, це не так.

Що робить WordPress-код із темою / плагінами?

Основний код WordPress не покладається на тему / плагіни, щоб робити такі речі, як установка, активація, оновлення, видалення тем чи плагінів.

Що стосується тем, він покладається на каталог тем, оскільки основною точкою входу до теми є style.cssфайл (ви не можете використовувати інший файл CSS для утримання заголовка деталей теми).

Для плагінів він покладається на каталог плагінів І на головний файл плагінів , оскільки плагіни можуть викликати їх основний файл, як би вони не хотіли.

Єдине, для чого ядро ​​використовує теги / плагіни-слуги, - це обробка тем і плагінів з каталогу WordPress.org: отримання списків плагінів, перевірка наявності оновлень, звітування про дані використання каталогу тощо.


Для завершення речей щодо плагінів: щоразу, коли ви знайдете дані плагіну із slugзаписом, 99% часу буде спрямовано на слуп WordPress.org плагіна.

Як ми можемо ідентифікувати плагіни?

Якщо ви хочете програмно активувати, оновити, дезактивувати або видалити певний плагін під час встановлення WordPress, вам потрібно скористатися файлом плагіна. Ви можете отримати його так у головному файлі додатка:

$plugin_file = plugin_basename( __FILE__ );

Якщо ви хочете націлити певний плагін з іншого плагіна, все стає трохи складніше, оскільки вам потрібно покластися на «здогадки».

Ви можете жорстко кодувати ім'я плагіна, шукати плагін у списку всіх плагінів (див. Get_plugins () ) та дістати звідти файл плагіна.

Якщо ви знаєте клас або функцію, яку визначає цей плагін, ви можете використовувати відображення (див. Цю відповідь для класів і цю для функцій).


Я сподіваюся, що це допоможе вам та іншим, хто може важко мати справу з "плагінами". Це могло врятувати мене пару годин :)


0

Просто для уточнення з початкової публікації.

Спосіб, який я знайшов, плагін спочатку переходить до папки плагінів, потім відкриває папку, пов’язану з плагіном, і нарешті знаходить файл, у якому знаходиться наведений нижче код. Після того, як ви знайдете цей файл, назва файла мінус розширення має бути вашим плагіном.

Наприклад, якщо я знайшов наведений нижче код у файлі з назвою Advanced-plugin-awesomeness.php, мій слуг був би Advanced-plugin-awesomeness.

Сподіваюся, це допомагає!

/*
Plugin Name: Name of plugin here
Version: 2.4.6
Description: plugin description here
Author: plugin author here

-1, хоча більшість імен файлів і каталогів збігаються, це не є надійним методом, оскільки
слупок

чи навіть не каталог! дивіться мою оновлену відповідь, вона фактично походить від імені плагіна.
травень

0

На жаль, слупок повертається через API оновлення, відповідь на це питання не настільки очевидна, якщо ви не запитуєте сам API. Однак, якщо ви хочете побачити список ваших поточних плагінів та пов’язаних даних плагінів, ви можете просто зробити:

print_r(get_site_transient('update_plugins'));

Але це не матиме інформації про нещодавно встановлений плагін ще 12 годин, вам доведеться зробити щось інше для них, наприклад. використовувати модифіковану версію коду з wp_update_pluginsу wp-includes/update.php...

Зробивши це, щоб перевірити його, схоже, підтверджується, що, незалежно від імені файла плагіна чи місця розташування чи великого регістру, насправді саме він Plugin Nameгенерує слуп оновлення, швидше за все, через sanitize_title. Тому я вважаю, що правильною відповіддю має бути:

// 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']);

+1 та додаткова примітка полягає в тому, що це може також змінитися з часом, оскільки команда wordpress.org зрозуміла, що методологія обчислення слизу ще не є остаточно остаточною
Марк Каплун

Я не впевнений, що це точно, я намагався зробити це для плагіна, але це не вдається: ім'я плагіну, як повернуто, - "Чуйний слайдер WordPress - Soliloquy Lite", а слизька: soliloquy-lite
Кріс

Я підозрюю, що це тому, що слуп генерується під час подання плагіну до сховища і не змінюється на ім’я пізніше ... у більшості випадків він відповідає імені каталогу, але якщо є винятки для обох, він міг би бути тим чи іншим. це не ідеально: - /
majick

0

Ви можете отримати ім'я папки плагіна (PHP5.3 +), передавши DIR до plugin_basename (), наприклад:

$plugin_foldername = plugin_basename( __DIR__ );

0

Спробуйте це:

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;
}

1
Будь ласка , змініть свій відповідь і додати пояснення того , що робить цей код.
Натан Джонсон

0

Для більшості плагінів "slug" буде таким самим, як ім'я каталогу. Хоча люди .org можуть встановити ім’я каталогу на все, що завгодно.

$slug = (dirname(plugin_basename(__FILE__)));
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.