Ссылка "Просмотреть подробности" в плагине

22 сент. 2014 г., 00:31:18
Просмотры: 13.5K
Голосов: 13

Как сделать, чтобы ссылка [Просмотреть подробности] отображалась на странице плагина в админке в разделе описания?

Плагин работает нормально, версия и авторы (со ссылками) отображаются корректно, но нет [Просмотреть подробности], как у большинства других плагинов.

Возможно, я задаю неправильный вопрос, но я работаю над плагином и хотел бы отображать readme.txt и скриншоты, как это сделано во многих плагинах. Как сделать, чтобы эта ссылка появилась и показывала содержимое файла readme.txt?

Я читал книгу "Professional WordPress Plugin Development", но не нашел там этой информации. Я могу ссылаться на внешний URI, но мне хотелось бы получить аккуратную панель, которая есть у других плагинов.

0
Все ответы на вопрос 4
0
11

Ссылка «Просмотреть сведения» в таблице установленных плагинов отображается только для плагинов, размещенных в репозитории WordPress.org. Если взглянуть на исходный код метода WP_Plugins_List_Table->single_row(), можно увидеть, что ссылка на сведения генерируется только при наличии данных API, например, если задан slug:

// Ссылка на сведения с использованием данных API, если они доступны
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( __( 'Дополнительная информация о %s' ), $plugin_name ) ),
        esc_attr( $plugin_name ),
        __( 'Просмотреть сведения' )
    );
} elseif ( ! empty( $plugin_data['PluginURI'] ) ) {
    $plugin_meta[] = sprintf( '<a href="%s">%s</a>',
        esc_url( $plugin_data['PluginURI'] ),
        __( 'Посетить сайт плагина' )
    );
}
22 сент. 2014 г. 01:18:42
0

Вы не указали, размещен ли ваш плагин на WordPress.org или нет, а также установили ли вы плагин из официального каталога WordPress или просто из локального ZIP-архива (что эквивалентно приватно размещенному плагину).

Как уже упоминалось ранее, ссылка "Просмотреть сведения" появляется только для плагинов, чей slug размещен на WordPress.org.

Я хочу подчеркнуть, что бывают ситуации, когда вы можете не увидеть "Просмотреть сведения" даже для плагина, который фактически размещен на WordPress.org.

Как? В какой ситуации?

Пример: представьте, что ваш плагин размещен там, но вы установили его не из каталога плагинов WordPress, а из локального ZIP-файла (например, свежую копию при тестировании нового исправления или доработки).

В моем примере выше установленная копия представляет тот же плагин, но она была установлена не из каталога плагинов WordPress. Она была установлена из локального ZIP-файла, что эквивалентно приватно размещенному плагину.

27 сент. 2015 г. 12:41:42
0

Если вам действительно нужно, вы можете подключиться к хуку plugin_row_meta и добавить свою собственную ссылку.

Проблема в том, что обработанный файл README размещается в каталоге плагинов WordPress.
Стандартная ссылка "Просмотреть подробности" содержит /wp-admin/plugin-install.php?tab=plugin-information, которая по умолчанию вызывает http://api.wordpress.org/plugins/info/.

Решение / Обходной путь

  1. Добавьте свою собственную ссылку.
  2. (Опционально) Подключитесь к ответу API WordPress.

Добавление своей ссылки

Предположим, что вы находитесь в главном файле плагина, добавьте следующий код:

add_filter(
    'plugin_row_meta',
    function( $plugin_meta, $plugin_file, $plugin_data ) {
        if ( __FILE__ === path_join( WP_PLUGIN_DIR, $plugin_file ) ) {
            // Здесь вы указываете ссылку на ваш README.
            // Я конвертировал свой `readme.txt` в HTML. Подробнее об этом позже...
            $url = plugins_url( 'readme.html', __FILE__ );

            // Это адаптация части `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( __( 'Подробнее о %s' ), $plugin_data['Name'] ) ),
                esc_attr( $plugin_data['Name'] ),
                __( 'Просмотреть подробности' )
            );
        }
        return $plugin_meta;
    },
    10,
    3
);

Подключение к ответу API WordPress

Снова предположим, что вы находитесь в главном файле плагина. Вам нужно добавить ссылку и подключиться к ответу API:

$slug = 'slug-of-your-plugin-or-some-id';

add_filter(
    'plugin_row_meta',
    function( $plugin_meta, $plugin_file, $plugin_data ) {
        if ( __FILE__ === path_join( WP_PLUGIN_DIR, $plugin_file ) ) {
            // Это адаптация части `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( __( 'Подробнее о %s' ), $plugin_data['Name'] ) ),
                esc_attr( $plugin_data['Name'] ),
                __( 'Просмотреть подробности' )
            );
        }
        return $plugin_meta;
    },
    10,
    3
);

add_filter(
    'plugins_api',
    function( $response, $action, $args ) {
        if ( 'plugin_information' === $action && $slug === $args->slug ) {
            return (object) array(
                // Имитируем ответ из каталога плагинов WordPress.
                // Для примера запроса можно изучить
                // https://api.wordpress.org/plugins/info/1.2/?action=plugin_information&request[slug]=classic-editor
            );
        }
        return $response;
    },
    10,
    3
);

Приложение: Конвертация существующего README

Если вы уже написали свой readme.txt, не осознавая, что он не будет отображаться (как у меня...), вы можете конвертировать его в HTML и использовать первый фрагмент кода выше.

Добавьте это в ваш 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"
  }
}

А это поместите в ваш 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: {
                // Опционально: Только если вы хотите включить скриншоты.
                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']);

};

Теперь выполните npm install && npm run readme, и вы увидите файл readme.html в директории вашего плагина.

7 апр. 2023 г. 11:49:16
0

Если вы переименуете папку, в которой содержатся файлы плагина... WordPress будет использовать URI плагина, указанный в заголовке главного файла плагина.

31 мая 2017 г. 23:54:31