Come posso trovare lo slug dei plugin?

25 ott 2013, 01:19:01
Visualizzazioni: 25.6K
Voti: 18

Mi chiedo come posso trovare lo slug dei plugin (slug = nome interno utilizzato da WordPress per gli aggiornamenti dei plugin e per determinare quali plugin sono attualmente attivi)? Di solito è il nome della cartella del plugin ma se un plugin non ha una cartella, è il nome del suo file (come hello.php). Ci sono altre eccezioni?

  1. I caratteri minuscoli e maiuscoli sono importanti?
  2. Un plugin può avere uno slug diverso dal nome della sua cartella? Cosa succede se c'è un plugin chiamato hello.php e un altro /hello.php/hello.php?
2
Commenti

Ottima domanda, peccato che non possiamo assegnare ricompense alle domande, ma immagino che la risposta sia la ricompensa ;)

brasofilo brasofilo
25 ott 2013 03:00:33

TL;DR per ottenere lo slug dei plugin ufficiali di WP visita plugins.svn.wordpress.org e prova il nome della directory elencata. Testalo con WP CLI per essere sicuro. Altrimenti leggi le risposte qui sotto.

vhs vhs
3 gen 2021 06:04:06
Tutte le risposte alla domanda 9
0
13

La differenza tra il file principale del plugin e lo slug del plugin è un punto in cui il Codex di WordPress potrebbe fare molto meglio. Capisco la tua confusione perché l'ho provata anch'io recentemente (mescolata a frustrazione).

Ecco cosa ho imparato facendo un po' di "lavoro investigativo" sul codice core di WordPress.

Il file del plugin

Questo è il modo univoco con cui WordPress identifica e registra un plugin. È composto dalla directory del plugin E dal file principale del plugin (quello con l'intestazione che contiene vari dettagli come versione, autore, ecc.).

Sembrerà qualcosa del genere: your-plugin-directory/main-file.php

Se osservi i dati dei plugin attivi (restituiti da get_option( 'active_plugins' )), vedrai che WordPress ha bisogno solo di questo file del plugin per identificare correttamente i plugin.

Puoi pensarlo come il percorso relativo del file principale del tuo plugin (relativo alla directory wp-content/plugins/). Puoi "comporre" il percorso assoluto del file principale del plugin con qualcosa del genere: trailingslashit( WP_PLUGIN_DIR ) . $plugin_main_file

Il core stesso genera il file del plugin in questo modo:

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

Lo slug del plugin

Ci si aspetterebbe che lo "slug" del plugin sia una sorta di ID standardizzato per il plugin, proprio come lo slug del post lo è per i post - in modo da poter usare questo "slug" per fornirlo alle funzioni core di WordPress e far partire le cose.

Non proprio. Dopo aver cercato nel core riferimenti agli slug di plugin (o temi, per quel che vale) e trovato quasi nulla, credo di aver capito.

Gli unici slug reali sono quelli per elementi accessibili tramite un URL univoco: post, pagine, tassonomie, ecc. Questo è lo scopo principale di prendere il nome di qualcosa (come un titolo di post) e generarne una versione adatta per gli URL: usarla in un URL.

Ma dove usiamo gli "slug" di temi/plugin negli URL?

Non lo facciamo sulle installazioni singole di WordPress - né nell'admin né nel frontend.

Tuttavia, c'è un posto molto legato al codice WordPress, il sito WordPress.org. Le persone hanno difficoltà a distinguere tra i due, incluso il fatto che sia diventato comune tra gli sviluppatori considerare che gli slug di temi o plugin su WordPress.org dovrebbero funzionare come uno slug di post o pagina.

Svolgono lo stesso scopo ma su siti web separati. Su WordPress.org vengono usati per identificare univocamente un tema dagli altri e un plugin dal resto (in URL come https://wordpress.org/plugins/akismet/).

Ma quando si tratta di installazioni WordPress singole, la stessa unicità non può essere garantita perché non c'è un'autorità che la imponga (come su WordPress.org). Potrebbe funzionare se tutti i plugin e i temi provenissero da WordPress.org, ma per fortuna non è così.

Cosa fa il codice di WordPress con gli slug di temi/plugin?

Il codice core di WordPress non si affida agli slug di temi/plugin per fare cose come installare, attivare, aggiornare o eliminare temi o plugin.

Per i temi, si affida alla directory del tema poiché il punto di ingresso principale in un tema è il file style.css (non puoi usare un altro file CSS per l'intestazione con i dettagli del tema).

Per i plugin, si affida alla directory del plugin E al file principale del plugin, poiché i plugin possono chiamare il loro file principale come preferiscono.

L'unica cosa per cui il core usa gli slug di temi/plugin è quando gestisce temi e plugin dalla directory di WordPress.org: recuperare liste di plugin, controllare aggiornamenti, segnalare dati di utilizzo alla directory, e così via.


Per riassumere riguardo agli slug di plugin: ogni volta che trovi dati di plugin con la voce slug, il 99% delle volte si riferirà allo slug del plugin su WordPress.org.

Come possiamo identificare i plugin?

Se vuoi attivare, aggiornare, disattivare o eliminare un certo plugin a livello di codice in un'installazione WordPress, devi usare il file del plugin. Puoi ottenerlo così dal file principale del tuo plugin:

$plugin_file = plugin_basename( __FILE__ );

Se vuoi indirizzare un certo plugin da un altro plugin, le cose si fanno più complicate poiché devi affidarti a un po' di "indovinelli".

Potresti hardcodare il nome del plugin, cercare il plugin nella lista di tutti i plugin (vedi get_plugins()) e ottenere il file del plugin da lì.

Se conosci una classe o funzione definita da quel plugin, potresti usare la reflection (vedi questa risposta per le classi e questa per le funzioni).


Spero che questo ti aiuti e aiuti altri che potrebbero avere difficoltà con gli "slug di plugin". Avrebbe potuto farmi risparmiare un paio d'ore :)

7 gen 2018 19:25:28
4
10

La stringa utilizzata in WordPress per identificare il plugin è:

plugin_basename($file);

... dove $file è un file con gli header del plugin.

Quindi, se sei all'interno del tuo plugin, ottieni lo slug con:

$slug = plugin_basename( __FILE__ );
25 ott 2013 03:47:11
Commenti

plugin_basename($file); Non è lo slug a partire dalla versione 3.8.1. Questo è il percorso cartella/plugin_main_file.php. Ad esempio, lo "slug" del plugin Akismet non è "akismet/akismet.php" ma è semplicemente "akismet".

Jeff Mattson Jeff Mattson
29 set 2015 16:46:13

questa non è più la risposta corretta in nessun caso.

majick majick
7 feb 2016 09:15:53

@majick vero, per Wordpress 4.7.4 non è la risposta

Marecky Marecky
25 apr 2017 02:54:31

Un altro modo per generare lo slug del plugin è utilizzando dirname(plugin_basename(__FILE__)).

ilanco ilanco
28 giu 2017 15:53:38
0

Se installi WP-CLI puoi ottenere l'elenco dei plugin con il loro slug e versione direttamente dalla riga di comando:

> wp plugin list

So che probabilmente non è esattamente quello che cerchi, se hai bisogno di trovare lo slug nel codice, ma mi è stato utile mentre lavoravo con il plugin TGM-Plugin-Activation.

Personalmente trovo difficile lavorare con WordPress senza WP-CLI, in generale è uno strumento molto utile per molte operazioni comuni legate a WordPress.

18 mag 2017 15:32:48
0

Per la maggior parte dei plugin, lo "slug" sarà lo stesso del nome della directory. Anche se le persone di .org possono impostare il nome della directory come preferiscono.

$slug = (dirname(plugin_basename(__FILE__)));
18 feb 2020 20:50:25
3

Sfortunatamente lo slug viene restituito tramite l'API di aggiornamento, la risposta a questa domanda non è così ovvia a meno che non si interroghi direttamente l'API stessa. Tuttavia, se vuoi vedere una lista degli slug dei tuoi plugin attuali e i relativi dati dei plugin puoi semplicemente fare:

print_r(get_site_transient('update_plugins'));

Ma, questo non avrà informazioni su un plugin appena installato per altre 12 ore, dovresti fare qualcosa di diverso per questi, ad esempio usare una versione modificata del codice da wp_update_plugins in wp-includes/update.php...

Avendo fatto questo per testarlo, sembra confermare che, indipendentemente dal nome del file del plugin o dalla sua posizione o dalle maiuscole, è in realtà il Plugin Name che genera lo slug di aggiornamento, molto probabilmente tramite sanitize_title. Quindi credo che la risposta corretta dovrebbe essere:

// se hai il basename del plugin:
// $pluginfile = WP_PLUGIN_DIR.'/'.$pluginbasename;

// altrimenti se hai già il percorso assoluto:
$plugin = get_plugin_data($pluginfile);
$pluginslug = sanitize_title($plugin['Name']);
7 feb 2016 09:14:12
Commenti

+1 e una nota aggiuntiva è che questo potrebbe cambiare nel tempo, poiché il team di wordpress.org ha chiarito che la metodologia di calcolo degli slug non è ancora completamente definitiva

Mark Kaplun Mark Kaplun
15 lug 2016 08:27:56

Non sono sicuro che sia accurato, stavo cercando di farlo per un plugin ma fallisce: il nome del plugin restituito è "Responsive WordPress Slider - Soliloquy Lite" e lo slug è: soliloquy-lite

Chris Chris
27 lug 2016 17:29:46

Sospetto che ciò accada perché lo slug viene generato al momento dell'invio del plugin al repository e non cambia con il nome successivamente... nella maggior parte dei casi corrisponde al nome della directory, ma se ci sono eccezioni per entrambi, potrebbe essere uno o l'altro. Non è l'ideale :-/

majick majick
28 lug 2016 05:04:18
2

Per chiarire rispetto al post originale.

Il modo in cui ho trovato lo slug del plugin è navigando prima nella cartella del tuo plugin, poi aprendo la cartella associata al plugin e infine trovando il file che contiene il codice qui sotto. Una volta trovato questo file, il nome del file senza estensione dovrebbe essere lo slug del tuo plugin.

Ad esempio, se ho trovato il codice qui sotto in un file chiamato advanced-plugin-awesomeness.php, il mio slug sarebbe advanced-plugin-awesomeness.

Spero sia utile!

/*
Plugin Name: Nome del plugin qui
Version: 2.4.6
Description: descrizione del plugin qui
Author: autore del plugin qui
29 set 2015 21:40:48
Commenti

-1 poiché sebbene la maggior parte dei nomi dei file e delle directory corrispondano, questo non è un metodo affidabile poiché lo slug dell'aggiornamento è in realtà la directory - non il nome del file (a meno che non ci sia una directory).

majick majick
7 feb 2016 07:58:59

o nemmeno la directory! vedi la mia risposta aggiornata, in realtà deriva dal Plugin Name.

majick majick
7 feb 2016 09:15:19
0

Puoi ottenere il nome della cartella del plugin (PHP5.3+) passando DIR a plugin_basename(), in questo modo:

$plugin_foldername = plugin_basename( __DIR__ );
5 gen 2018 02:17:18
0

Utilizzando get_plugins(), il modo più semplice per trovare lo slug di un plugin non sarebbe quello di usare la proprietà TextDomain dall'array restituito da get_plugins()?

14 feb 2024 11:56:29
1
-1

Prova questo:

function get_slugname(){
    $tmp = array();
    $plugins_all = get_plugins(); // Ottiene tutti i plugin installati
    $plugin_slug = explode('/', dirname(plugin_basename(__FILE__))); // Ottiene lo slug del plugin corrente
    
    foreach ($plugins_all as $key=>$value) {
        if ($plugin_slug[0] == explode('/', $key)[0]) {
            $tmp = $value;
            $tmp['slug'] = explode('/', $key)[0]; // Imposta lo slug del plugin
            $tmp['file'] = explode('/', $key)[1]; // Imposta il file del plugin
        }
    }
    return $tmp; // Restituisce l'array con le informazioni del plugin
}
27 feb 2018 21:08:45
Commenti

Per favore modifica la tua risposta e aggiungi una spiegazione di cosa fa questo codice.

Nathan Johnson Nathan Johnson
27 feb 2018 21:33:57