WordPress.org

Make WordPress Core

Ticket #8964: get_plugin_data_filter.diff

File get_plugin_data_filter.diff, 2.2 KB (added by strider72, 9 years ago)

adds filter to get_plugin_data() so you can add new headers to search for

  • wp-admin/includes/plugin.php

     
    7070        $fp = fopen($plugin_file, 'r');
    7171
    7272        // Pull only the first 8kiB of the file in.
    73         $plugin_data = fread( $fp, 8192 );
     73        $plugin_header = fread( $fp, 8192 );
    7474
    7575        // PHP will close file handle, but we are good citizens.
    7676        fclose($fp);
    7777
    78         preg_match( '|Plugin Name:(.*)$|mi', $plugin_data, $name );
    79         preg_match( '|Plugin URI:(.*)$|mi', $plugin_data, $uri );
    80         preg_match( '|Version:(.*)|i', $plugin_data, $version );
    81         preg_match( '|Description:(.*)$|mi', $plugin_data, $description );
    82         preg_match( '|Author:(.*)$|mi', $plugin_data, $author_name );
    83         preg_match( '|Author URI:(.*)$|mi', $plugin_data, $author_uri );
    84         preg_match( '|Text Domain:(.*)$|mi', $plugin_data, $text_domain );
    85         preg_match( '|Domain Path:(.*)$|mi', $plugin_data, $domain_path );
     78        $search_params = array(
     79                'Name'=>'Plugin Name',
     80                'PluginURI'=>'Plugin URI',
     81                'Version'=>'Version',
     82                'Description'=>'Description',
     83                'Author'=>'Author',
     84                'AuthorURI'=>'Author URI',
     85                'TextDomain'=>'Text Domain',
     86                'DomainPath'=>'Domain Path'
     87                );
    8688
    87         foreach ( array( 'name', 'uri', 'version', 'description', 'author_name', 'author_uri', 'text_domain', 'domain_path' ) as $field ) {
     89        // filter can add headers, but not change existing
     90        $extra_params = apply_filters( 'plugin_data_headers', (array) $extra_params, $plugin_file );
     91        $search_params = array_merge( $extra_params, $search_params );
     92
     93        $plugin_data = array();
     94        foreach ( $search_params as $field=>$header ) {
     95                preg_match( '|' . $header . ':(.*)$|mi', $plugin_header, ${$field} );
     96
    8897                if ( !empty( ${$field} ) )
    8998                        ${$field} = trim(${$field}[1]);
    9099                else
    91100                        ${$field} = '';
     101
     102                $plugin_data[$field] = ${$field};
    92103        }
    93104
    94         $plugin_data = array(
    95                                 'Name' => $name, 'Title' => $name, 'PluginURI' => $uri, 'Description' => $description,
    96                                 'Author' => $author_name, 'AuthorURI' => $author_uri, 'Version' => $version,
    97                                 'TextDomain' => $text_domain, 'DomainPath' => $domain_path
    98                                 );
    99105        if ( $markup || $translate )
    100106                $plugin_data = _get_plugin_data_markup_translate($plugin_data, $markup, $translate);
    101107        return $plugin_data;