Enlace "Ver detalles" en plugins de WordPress

22 sept 2014, 00:31:18
Vistas: 13.5K
Votos: 13

¿Cómo hago para que aparezca el enlace [Ver detalles] en la página de administración de plugins dentro del área de Descripción?

El plugin funciona correctamente, la versión y los autores (con sus enlaces) se muestran bien, pero no aparece el [Ver detalles] como en la mayoría de otros plugins.

Quizás esté haciendo la pregunta incorrecta, pero estoy desarrollando un plugin y me gustaría mostrar el archivo readme.txt y las capturas de pantalla como veo en muchos plugins. ¿Cómo hago que aparezca este enlace y muestre el contenido del archivo readme.txt?

He estado leyendo Professional WordPress Plugin Development, pero no encuentro esta referencia. Puedo enlazar a un URI externo, pero prefiero el panel limpio y conciso que muestran otros plugins.

0
Todas las respuestas a la pregunta 4
0
11

El enlace 'Ver detalles' en la tabla de lista de plugins instalados solo se muestra para los plugins que están alojados en el repositorio de plugins de WordPress.org. Si echas un vistazo al código fuente de WP_Plugins_List_Table->single_row(), verás que el enlace de detalles solo se genera si hay datos de la API presentes, por ejemplo, si el slug está establecido:

// Enlace de detalles usando información de la API, si está disponible
if ( isset( $plugin_data['slug'] ) && current_user_can( 'install_plugins' ) ) {
    $plugin_meta[] = sprintf( '<a href="%s" class="thickbox" aria-label="%s" data-title="%s">%s</a>',
        esc_url( network_admin_url( 'plugin-install.php?tab=plugin-information&plugin=' . $plugin_data['slug'] .
            '&TB_iframe=true&width=600&height=550' ) ),
        esc_attr( sprintf( __( 'Más información sobre %s' ), $plugin_name ) ),
        esc_attr( $plugin_name ),
        __( 'Ver detalles' )
    );
} elseif ( ! empty( $plugin_data['PluginURI'] ) ) {
    $plugin_meta[] = sprintf( '<a href="%s">%s</a>',
        esc_url( $plugin_data['PluginURI'] ),
        __( 'Visitar sitio del plugin' )
    );
}
22 sept 2014 01:18:42
0

No mencionaste si tu plugin está o no alojado en WordPress.org, ni si instalaste el plugin desde el Directorio de Plugins de WordPress o simplemente una copia local en ZIP del mismo (lo que equivale a un plugin alojado privadamente).

Como ya se respondió anteriormente, el enlace "Ver detalles" aparece solo para los plugins que tienen su slug alojado en WordPress.org.

Solo quiero enfatizar que hay situaciones en las que es posible que no veas el enlace "Ver detalles" incluso para un plugin que en realidad está alojado por WordPress.org.

¿Cómo? ¿En qué situación?

Ejemplo: imagina que tu plugin está alojado por ellos, pero en realidad no lo instalaste desde el Directorio de Plugins de WordPress, sino que instalaste un archivo ZIP local (una copia nueva mientras probabas una corrección o ajuste nuevo, por ejemplo).

En mi ejemplo anterior, la copia instalada representa el mismo plugin pero no se instaló desde el Directorio de Plugins de WordPress. Se instaló desde un archivo ZIP local, lo que equivale a un plugin alojado privadamente.

27 sept 2015 12:41:42
0

Si realmente lo deseas, puedes enlazarte a plugin_row_meta y agregar tu propio enlace.

El problema es que el README analizado está alojado en el Directorio de Plugins de WordPress.
El enlace estándar "Ver detalles" incluye /wp-admin/plugin-install.php?tab=plugin-information que llama a http://api.wordpress.org/plugins/info/ por defecto.

Solución / Alternativa

  1. Proporciona tu propio enlace.
  2. (Opcional) Enlázate a la respuesta de la API de WordPress.

Proporcionando tu propio enlace

Asumiendo que estás en tu archivo principal del plugin, agrega esto:

add_filter(
    'plugin_row_meta',
    function( $plugin_meta, $plugin_file, $plugin_data ) {
        if ( __FILE__ === path_join( WP_PLUGIN_DIR, $plugin_file ) ) {
            // Aquí proporcionas el enlace a tu README. 
            // He convertido mi `readme.txt` a HTML. Más sobre eso más adelante...
            $url = plugins_url( 'readme.html', __FILE__ );

            // Esta es una adaptación de parte de `WP_Plugins_List_Table->single_row()`.
            $plugin_meta[] = sprintf(
                '<a href="%s" class="thickbox open-plugin-details-modal" aria-label="%s" data-title="%s">%s</a>',
                add_query_arg( 'TB_iframe', 'true', $url ),
                esc_attr( sprintf( __( 'Más información sobre %s' ), $plugin_data['Name'] ) ),
                esc_attr( $plugin_data['Name'] ),
                __( 'Ver detalles' )
            );
        }
        return $plugin_meta;
    },
    10,
    3
);

Enlazándose a la respuesta de la API de WordPress.

De nuevo, asumiendo que estás en tu archivo principal del plugin, debes agregar el enlace y enlazarte a la respuesta de la API:

$slug = 'slug-de-tu-plugin-o-algun-id';

add_filter(
    'plugin_row_meta',
    function( $plugin_meta, $plugin_file, $plugin_data ) {
        if ( __FILE__ === path_join( WP_PLUGIN_DIR, $plugin_file ) ) {
            // Esta es una adaptación de parte de `WP_Plugins_List_Table->single_row()`.
            $plugin_meta[] = sprintf(
                '<a href="%s" class="thickbox open-plugin-details-modal" aria-label="%s" data-title="%s">%s</a>',
                esc_url(
                    network_admin_url(
                        "plugin-install.php?tab=plugin-information&plugin=$slug&TB_iframe=true&width=600&height=550"
                    )
                ),
                esc_attr( sprintf( __( 'Más información sobre %s' ), $plugin_data['Name'] ) ),
                esc_attr( $plugin_data['Name'] ),
                __( 'Ver detalles' )
            );
        }
        return $plugin_meta;
    },
    10,
    3
);

add_filter(
    'plugins_api',
    function( $response, $action, $args ) {
        if ( 'plugin_information' === $action && $slug === $args->slug ) {
            return (object) array(
                // Simula la respuesta del Directorio de Plugins de WordPress.
                // Para un ejemplo de solicitud, inspecciona
                // https://api.wordpress.org/plugins/info/1.2/?action=plugin_information&request[slug]=classic-editor
            );
        }
        return $response;
    },
    10,
    3
);

Apéndice: Convertir un README existente

Si ya has escrito tu readme.txt sin darte cuenta de que no se mostrará (como yo...), podrías convertirlo a HTML y usar el primer fragmento de código de arriba.

Coloca esto en tu package.json:

{
  "main": "Gruntfile.js",
  "scripts": {
    "readme": "grunt readme"
  },
  "devDependencies": {
    "grunt": "^1.6.1",
    "grunt-md2html": "^0.6.1",
    "grunt-wp-readme-to-markdown": "^2.1.0"
  }
}

Y esto va en tu Gruntfile.js:

module.exports = function (grunt) {

    grunt.initConfig({

        pkg: grunt.file.readJSON('package.json'),

        wp_readme_to_markdown: {
            your_target: {
                files: {
                    'README.md': 'readme.txt',
                },
            },
            options: {
                // Opcional: Solo si deseas incluir capturas de pantalla.
                screenshot_url: 'assets/{screenshot}.png',
            },
        },

        md2html: {
            your_target: {
                files: {
                    'readme.html': 'README.md',
                },
            },
        },
    });

    grunt.loadNpmTasks('grunt-wp-readme-to-markdown');
    grunt.loadNpmTasks('grunt-md2html');
    grunt.registerTask('readme', ['wp_readme_to_markdown', 'md2html']);

};

Ahora ejecuta npm install && npm run readme y verás un readme.html en el directorio de tu plugin.

7 abr 2023 11:49:16
0

Si renombras la carpeta que contiene los archivos del plugin... WordPress utilizará el Plugin URI que hayas especificado en la cabecera del archivo principal del plugin.

31 may 2017 23:54:31