ariefbayu
  • 0
Эксперт

Как создать собственное сообщение об обновлении плагина

  • 0

Я видел это сообщение сегодня при доступе к моей странице плагина:пользовательское сообщение об обновлении плагина

Итак, как мне создать это, если я хочу обновить свои собственные плагины, размещенные на WordPress?

Share
  1. Это сообщение создается путем W3_Total_Cache->in_plugin_update_message() подключения к "in_plugin_update_message-$file" in wp_plugin_update_row() .

    Это делает некоторые тонкости для разбора readme и отображения информации из журнала изменений, но в целом вы можете просто повторить некоторые вещи, как и с любым другим хуком.

    • 0
  2. Крюк здание

    Чтобы сделать имя хука действия понятным:

    global $pagenow;
    if ( 'plugins.php' === $pagenow )
    {
        // Better update message
        $file   = basename( __FILE__ );
        $folder = basename( dirname( __FILE__ ) );
        $hook = "in_plugin_update_message-{$folder}/{$file}";
        add_action( $hook, 'your_update_message_cb', 20, 2 );
    }
    

    Перехваченная функция обратного вызова

    Сама функция имеет два $variables прикрепленных: $plugins_data & $r, к которым может получить доступ ваш плагин.

    /**
     * Displays an update message for plugin list screens.
     * Shows only the version updates from the current until the newest version
     * 
     * @param (array) $plugin_data
     * @param (object) $r
     * @return (string) $output
     */
    function your_update_message_cb( $plugin_data, $r )
    {
        // readme contents
        $data       = file_get_contents( 'http://plugins.trac.wordpress.org/browser/YOUR_PLUGIN_FOLDER_NAME_IN_THE_OFFICIAL_REPO/trunk/readme.txt?format=txt' );
    
        // assuming you've got a Changelog section
        // @example == Changelog ==
        $changelog  = stristr( $data, '== Changelog ==' );
    
        // assuming you've got a Screenshots section
        // @example == Screenshots ==
        $changelog  = stristr( $changelog, '== Screenshots ==', true );
    
        // only return for the current & later versions
        $curr_ver   = get_plugin_data('Version');
    
        // assuming you use "= v" to prepend your version numbers
        // @example = v0.2.1 =
        $changelog  = stristr( $changelog, "= v{$curr_ver}" );
    
        // uncomment the next line to var_export $var contents for dev:
        # echo '<pre>'.var_export( $plugin_data, false ).'<br />'.var_export( $r, false ).'</pre>';
    
        // echo stuff....
        $output = 'whatever you want to do';
        return print $output;
    }
    

    Сноска:

    Этот подход можно найти в плагине проверки внутренних ссылок.

    Добавление:

    plugin_basename(__FILE__) можно использовать вместо этих двух строк выше. Также нет необходимости проверять, является ли текущая страница страницей плагина, так как функция все равно будет вызываться только этой страницей. Преимущество (очень незначительное) по-прежнему заключается в том, что у вас нет другого обратного вызова. Поскольку этот ответ довольно старый, вы бы, хотя этот подход все еще работает без проблем, теперь проверили объект, возвращаемый get_current_screen() .

    • 0

Оставить ответ

You must login to add an answer.