Cum să afișez linkul [Vezi detalii] pentru un plugin WordPress

22 sept. 2014, 00:31:18
Vizualizări: 13.5K
Voturi: 13

Cum pot face ca linkul [Vezi detalii] să apară în pagina de administrare a Pluginului, în zona de descriere?

Pluginul funcționează corect, versiunea și autorii (cu linkuri) sunt afișați corespunzător, dar nu apare [Vezi detalii] ca la majoritatea altor pluginuri.

Poate pun întrebarea greșit, dar lucrez la un plugin și aș dori să afișez conținutul din readme.txt și screenshot-uri așa cum văd la multe alte pluginuri. Cum pot face ca acest link să apară și să afișeze conținutul fișierului readme.txt?

Am citit cartea Professional WordPress Plugin Development, dar nu găsesc această referință. Pot să fac referire la un URI extern, dar aș prefera panoul elegant și concis care apare la alte pluginuri.

0
Toate răspunsurile la întrebare 4
0
11

Legătura 'Vezi detalii' din tabelul listei de plugin-uri instalate este afișată doar pentru plugin-urile care sunt găzduite în depozitul de plugin-uri WordPress.org. Dacă te uiți la sursa pentru WP_Plugins_List_Table->single_row(), vei observa că legătura de detalii este generată doar dacă există date API disponibile, de exemplu, dacă slug-ul este setat:

// Legătură detalii folosind informațiile API, dacă sunt disponibile
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( __( 'Mai multe informații despre %s' ), $plugin_name ) ),
        esc_attr( $plugin_name ),
        __( 'Vezi detalii' )
    );
} elseif ( ! empty( $plugin_data['PluginURI'] ) ) {
    $plugin_meta[] = sprintf( '<a href="%s">%s</a>',
        esc_url( $plugin_data['PluginURI'] ),
        __( 'Accesează site-ul plugin-ului' )
    );
}
22 sept. 2014 01:18:42
0

Nu ai menționat dacă plugin-ul tău este/nu este găzduit pe WordPress.org, nici dacă ai instalat plugin-ul din WordPress Plugin Directory sau doar o copie locală ZIP a acestuia (care este echivalentul unui plugin găzduit privat).

După cum am răspuns deja mai devreme, link-ul "Vezi detalii" apare doar pentru plugin-urile care au slug-ul găzduit pe WordPress.org.

Vreau doar să subliniez că există situații în care s-ar putea să nu vezi "Vezi detalii" chiar și pentru un plugin care este de fapt găzduit de WordPress.org.

Cum? În ce situație?

Exemplu: imaginează-ți că plugin-ul tău este găzduit de ei, dar de fapt nu ai instalat plugin-ul din WordPress Plugin Directory, ci ai instalat un fișier ZIP local (o copie nouă a acestuia în timp ce testai o nouă remediere/optimizare, de exemplu).

În exemplul meu de mai sus, copia instalată reprezintă același plugin, dar nu este instalată din WordPress Plugin Directory. A fost instalată dintr-un fișier ZIP local, care este echivalentul unui plugin găzduit privat.

27 sept. 2015 12:41:42
0

Dacă chiar dorești, poți folosi hook-ul plugin_row_meta pentru a adăuga propriul tău link.

Problema este că README-ul procesat este găzduit pe WordPress Plugin Directory.
Link-ul standard "Vezi detalii" include /wp-admin/plugin-install.php?tab=plugin-information care apelează implicit http://api.wordpress.org/plugins/info/.

Soluție / Soluție Alternativă

  1. Furnizează propriul tău link.
  2. (Opțional) Conectează-te la răspunsul API-ului WordPress.

Furnizarea propriului link

Presupunând că ești în fișierul principal al plugin-ului, adaugă asta:

add_filter(
    'plugin_row_meta',
    function( $plugin_meta, $plugin_file, $plugin_data ) {
        if ( __FILE__ === path_join( WP_PLUGIN_DIR, $plugin_file ) ) {
            // Aici furnizezi link-ul către README-ul tău.
            // Am convertit `readme.txt` în HTML. Mai multe detalii mai târziu...
            $url = plugins_url( 'readme.html', __FILE__ );

            // Aceasta este o adaptare a unei părți din `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( __( 'Mai multe informații despre %s' ), $plugin_data['Name'] ) ),
                esc_attr( $plugin_data['Name'] ),
                __( 'Vezi detalii' )
            );
        }
        return $plugin_meta;
    },
    10,
    3
);

Conectarea la răspunsul API-ului WordPress

Din nou, presupunând că ești în fișierul principal al plugin-ului, trebuie să adaugi link-ul și să te conectezi la răspunsul API:

$slug = 'slug-ul-pluginului-tau-sau-un-id';

add_filter(
    'plugin_row_meta',
    function( $plugin_meta, $plugin_file, $plugin_data ) {
        if ( __FILE__ === path_join( WP_PLUGIN_DIR, $plugin_file ) ) {
            // Aceasta este o adaptare a unei părți din `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( __( 'Mai multe informații despre %s' ), $plugin_data['Name'] ) ),
                esc_attr( $plugin_data['Name'] ),
                __( 'Vezi detalii' )
            );
        }
        return $plugin_meta;
    },
    10,
    3
);

add_filter(
    'plugins_api',
    function( $response, $action, $args ) {
        if ( 'plugin_information' === $action && $slug === $args->slug ) {
            return (object) array(
                // Simulează răspunsul de la WordPress Plugin Directory.
                // Pentru un exemplu de cerere, inspectează
                // https://api.wordpress.org/plugins/info/1.2/?action=plugin_information&request[slug]=classic-editor
            );
        }
        return $response;
    },
    10,
    3
);

Anexă: Conversia unui README existent

Dacă ai scris deja readme.txt fără să realizezi că nu va fi afișat (ca mine...), poți să-l convertești în HTML și să folosești primul fragment de cod de mai sus.

Adaugă asta în 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"
  }
}

Și asta în 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: {
                // Opțional: Doar dacă vrei să incluzi capturi de ecran.
                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']);

};

Acum rulează npm install && npm run readme și vei vedea un fișier readme.html în directorul plugin-ului tău.

7 apr. 2023 11:49:16
0

Dacă redenumești folderul în care sunt conținute fișierele pluginului... WordPress va folosi URL-ul Pluginului specificat în antetul fișierului principal al pluginului.

31 mai 2017 23:54:31