WordPress.org

Make WordPress Core

Ticket #8964: get_plugin_data_filter.diff

File get_plugin_data_filter.diff, 2.2 KB (added by strider72, 6 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;