¿Cómo puedo encontrar el slug de los plugins?

25 oct 2013, 01:19:01
Vistas: 25.6K
Votos: 18

Me pregunto cómo puedo encontrar el slug de los plugins (slug = nombre interno utilizado por WordPress para realizar actualizaciones de plugins y determinar qué plugins están actualmente activos). Generalmente es el nombre de la carpeta del plugin, pero si un plugin no tiene carpeta, es el nombre de su archivo (como hello.php). ¿Hay otras excepciones?

  1. ¿Importan las mayúsculas y minúsculas?
  2. ¿Puede un plugin tener un slug diferente al nombre de su carpeta? ¿Qué sucede si hay un plugin llamado hello.php y otro /hello.php/hello.php?
2
Comentarios

Muy buena pregunta, lástima que no podamos asignar recompensas a las preguntas, pero supongo que la respuesta es la recompensa ;)

brasofilo brasofilo
25 oct 2013 03:00:33

TL;DR para obtener el slug de los plugins oficiales de WP visita plugins.svn.wordpress.org y prueba con el nombre del directorio listado. Pruébalo con WP CLI para asegurarte. De lo contrario, lee las respuestas a continuación.

vhs vhs
3 ene 2021 06:04:06
Todas las respuestas a la pregunta 9
0
13

La diferencia entre el archivo principal del plugin y el slug del plugin es un área donde el Codex de WordPress podría mejorar mucho. Entiendo tu confusión porque yo también la he sentido recientemente (mezclada con frustración).

Esto es lo que he aprendido al hacer un "trabajo detectivesco" en el código núcleo de WordPress.

El archivo del plugin

Esta es la forma única en que WordPress identifica y registra un plugin. Está compuesto por el directorio del plugin Y el archivo principal del plugin (el que contiene el encabezado con los detalles como versión, autor, etc.).

Se vería algo así: tu-directorio-plugin/archivo-principal.php

Si miras los datos de plugins activos (devueltos por get_option( 'active_plugins' )), verás que WordPress solo necesita este archivo de plugin para identificarlos correctamente.

Podrías considerarlo como la ruta relativa del archivo principal de tu plugin (relativa al directorio wp-content/plugins/). Podrías "componer" la ruta absoluta del archivo principal con algo como esto: trailingslashit( WP_PLUGIN_DIR ) . $plugin_main_file

El núcleo genera el archivo del plugin así:

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

El slug del plugin

Uno esperaría que el "slug" del plugin fuera algún tipo de ID estandarizado para el plugin, como el slug de las entradas - para poder usar este "slug" en funciones del núcleo.

No es así. Tras buscar en el núcleo referencias a slugs de plugins (o temas) y encontrar casi nada, creo que lo entiendo.

Los únicos slugs reales son para cosas accesibles mediante URL: entradas, páginas, taxonomías, etc. Ese es el objetivo de tomar el nombre de algo y generar una versión amigable para URL: usarlo en una URL.

¿Pero dónde usamos "slugs" de temas/plugins en URLs?

No lo hacemos en instalaciones individuales de WordPress - ni en el admin ni en el frontend.

Sin embargo, hay un lugar muy relacionado con el código de WordPress, el sitio WordPress.org. La gente tiene problemas para distinguir entre ambos, incluso se ha vuelto común entre desarrolladores pensar que los slugs de temas/plugins de WordPress.org deberían funcionar igual que un slug de entrada.

Cumplen el mismo propósito pero en sitios separados. En WordPress.org se usan para identificar temas y plugins (en URLs como https://wordpress.org/plugins/akismet/).

Pero en instalaciones individuales de WordPress, no se puede garantizar la misma unicidad porque no hay una autoridad que la imponga (como en WordPress.org). Podría funcionar si todos los plugins y temas vinieran de WordPress.org, pero afortunadamente no es el caso.

¿Qué hace el código de WordPress con los slugs de temas/plugins?

El núcleo de WordPress no depende de slugs de temas/plugins para instalar, activar, actualizar o borrar temas/plugins.

Para temas, usa el directorio del tema ya que el punto de entrada es el archivo style.css (no puedes usar otro archivo CSS para el encabezado del tema).

Para plugins, usa el directorio Y el archivo principal del plugin, ya que los plugins pueden nombrar su archivo principal como quieran.

Lo único que el núcleo usa los slugs para es cuando maneja temas/plugins del directorio de WordPress.org: obtener listas, buscar actualizaciones, reportar datos de uso, etc.


En resumen sobre slugs de plugins: cuando veas datos de plugins con la entrada slug, el 99% de las veces se referirá al slug de WordPress.org del plugin.

¿Cómo identificamos plugins?

Si quieres activar, actualizar, desactivar o borrar un plugin programáticamente, necesitas usar el archivo del plugin. Puedes obtenerlo así desde el archivo principal de tu plugin:

$plugin_file = plugin_basename( __FILE__ );

Si quieres apuntar a un plugin específico desde otro plugin, es más complicado ya que necesitas algo de "adivinanza".

Podrías codificar el nombre, buscar el plugin en la lista de todos los plugins (ver get_plugins()) y obtener el archivo desde allí.

Si conoces una clase o función definida por ese plugin podrías usar reflexión (ver esta respuesta para clases y esta para funciones).


Espero que esto ayude a ti y a otros que tengan problemas con los "slugs de plugins". Me hubiera ahorrado un par de horas :)

7 ene 2018 19:25:28
4
10

La cadena utilizada en WordPress para identificar el plugin es:

plugin_basename($file);

… donde $file es un archivo con los encabezados del plugin.

Por lo tanto, si estás dentro de tu plugin, obtén el slug con:

$slug = plugin_basename( __FILE__ );
25 oct 2013 03:47:11
Comentarios

plugin_basename($file); No es el slug desde la versión 3.8.1. Esta es la ruta de la carpeta/archivo_principal_del_plugin.php. Como el "slug" del plugin Akismet no es "akismet/akismet.php" sino que es "akismet".

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

esta ya no es la respuesta correcta en ningún caso.

majick majick
7 feb 2016 09:15:53

@majick cierto, para Wordpress 4.7.4 no es la respuesta

Marecky Marecky
25 abr 2017 02:54:31

Otra forma de generar el slug del plugin es utilizando dirname(plugin_basename(__FILE__)).

ilanco ilanco
28 jun 2017 15:53:38
0

Si instalas WP-CLI entonces puedes obtener la lista de plugins con su slug y versión desde la línea de comandos:

> wp plugin list

Sé que probablemente no es lo que buscas, si necesitas encontrar el slug en código, pero me ha ayudado mientras trabajaba con el plugin TGM-Plugin-Activation.

Me resulta difícil trabajar con WordPress sin el WP-CLI, en general es una herramienta muy útil para muchas tareas comunes relacionadas con WordPress.

18 may 2017 15:32:48
0

Para la mayoría de los plugins, el "slug" será el mismo que el nombre del directorio. Aunque las personas de .org pueden establecer el nombre del directorio como deseen.

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

Lamentablemente, el slug se devuelve a través de la API de actualización, por lo que la respuesta a esta pregunta no es tan obvia a menos que consultes la API directamente. Sin embargo, si deseas ver una lista de los slugs de tus plugins actuales y los datos relacionados, puedes simplemente hacer:

print_r(get_site_transient('update_plugins'));

Pero esto no mostrará información sobre un plugin recién instalado hasta pasadas 12 horas. Para esos casos, tendrías que hacer algo diferente, como usar una versión modificada del código de wp_update_plugins en wp-includes/update.php...

Después de probar esto, parece confirmarse que, independientemente del nombre del archivo del plugin, su ubicación o mayúsculas, es el Plugin Name el que genera el slug de actualización, muy probablemente a través de sanitize_title. Por lo tanto, creo que la respuesta correcta debería ser:

// si tienes el nombre base del plugin:
// $pluginfile = WP_PLUGIN_DIR.'/'.$pluginbasename;

// de lo contrario, si ya tienes la ruta absoluta:
$plugin = get_plugin_data($pluginfile);
$pluginslug = sanitize_title($plugin['Name']);
7 feb 2016 09:14:12
Comentarios

+1 y una nota adicional es que esto podría cambiar con el tiempo, ya que el equipo de wordpress.org dejó claro que la metodología de cálculo del slug aún no está totalmente finalizada

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

No estoy seguro de que esto sea exacto, estaba intentando hacerlo para un plugin pero falla: el nombre del plugin que se devuelve es "Responsive WordPress Slider - Soliloquy Lite" y el slug es: soliloquy-lite

Chris Chris
27 jul 2016 17:29:46

Sospecho que esto se debe a que el slug se genera en el momento en que el plugin se envía al repositorio y no cambia con el nombre posteriormente... en la mayoría de los casos coincide con el nombre del directorio, pero si hay excepciones para ambos, podría ser uno u otro. No es ideal :-/

majick majick
28 jul 2016 05:04:18
2

Solo para aclarar desde el post original.

La forma en que he encontrado el slug del plugin es navegando primero a la carpeta de tu plugin, luego abriendo la carpeta asociada al plugin y finalmente encontrando el archivo que contiene el código de abajo. Una vez que hayas encontrado este archivo, el nombre del archivo sin la extensión debería ser el slug de tu plugin.

Por ejemplo, si encontré el siguiente código en un archivo llamado advanced-plugin-awesomeness.php, mi slug sería advanced-plugin-awesomeness.

¡Espero que esto ayude!

/*
Plugin Name: Nombre del plugin aquí
Version: 2.4.6
Description: descripción del plugin aquí
Author: autor del plugin aquí
29 sept 2015 21:40:48
Comentarios

-1 ya que, aunque la mayoría de los nombres de archivos y directorios coinciden, este no es un método confiable porque el slug de actualización es en realidad el directorio, no el nombre del archivo (a menos que no haya un directorio).

majick majick
7 feb 2016 07:58:59

¡O ni siquiera el directorio! Mira mi respuesta actualizada, en realidad proviene del Plugin Name.

majick majick
7 feb 2016 09:15:19
0

Puedes obtener el nombre de la carpeta del plugin (PHP5.3+) pasando DIR a plugin_basename(), así:

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

Al usar get_plugins(), ¿no sería la forma más sencilla de encontrar el slug de un plugin utilizar la propiedad TextDomain del array devuelto por get_plugins()?

14 feb 2024 11:56:29
1
-1

Prueba esto:

function get_slugname(){
    $tmp = array();
    $plugins_all = get_plugins(); // Obtener todos los plugins instalados
    $plugin_slug = explode('/',dirname(plugin_basename(__FILE__))); // Obtener el slug del plugin actual
    foreach ($plugins_all as $key=>$value) {
        if ($plugin_slug[0] == explode('/',$key)[0]) { // Comparar slugs
        $tmp = $value;
        $tmp['slug'] = explode('/',$key)[0]; // Almacenar slug
        $tmp['file'] = explode('/',$key)[1]; // Almacenar archivo principal
        }
    }
return $tmp; // Devolver array con información del plugin
}
27 feb 2018 21:08:45
Comentarios

Por favor edita tu respuesta y añade una explicación de lo que hace este código.

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