WordPress.org

Make WordPress Core

Ticket #8964: get_plugin_data_filter_2.diff

File get_plugin_data_filter_2.diff, 2.5 KB (added by strider72, 9 years ago)

changes the way array keys works as described in above comment

  • 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 ) {
    88                 if ( !empty( ${$field} ) )
    89                         ${$field} = trim(${$field}[1]);
     89        // Filter can add headers, but not change existing ones.
     90        $custom_params = apply_filters( 'plugin_data_headers', (array) $custom_params, $plugin_file );
     91        // Use keys to reduce conflicts and make conflicts easier to find.
     92        foreach ( $custom_params as $key=>$value ) { $custom_params[$key] = $key; }
     93
     94        $search_params = array_merge( $custom_params, $search_params );
     95
     96        $plugin_data = array();
     97        foreach ( $search_params as $key=>$header ) {
     98                preg_match( '|' . $header . ':(.*)$|mi', $plugin_header, $field );
     99
     100                if ( ! empty( $field ) )
     101                        $field = trim($field[1]);
    90102                else
    91                         ${$field} = '';
     103                        $field = '';
     104
     105                $plugin_data[$key] = $field;
    92106        }
    93107
    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                                 );
    99108        if ( $markup || $translate )
    100109                $plugin_data = _get_plugin_data_markup_translate($plugin_data, $markup, $translate);
    101110        return $plugin_data;