6

Wordpress のプラグインとテーマには、上部に次のようなコメントがあります。

/**
 * @package Akismet
 */
/*
Plugin Name: Akismet
Plugin URI: http://akismet.com/?return=true
Description: Used by millions, Akismet is quite possibly the best way in the world to <strong>protect your blog from comment and trackback spam</strong>. It keeps your site protected from spam even while you sleep. To get started: 1) Click the "Activate" link to the left of this description, 2) <a href="http://akismet.com/get/?return=true">Sign up for an Akismet API key</a>, and 3) Go to your <a href="admin.php?page=akismet-key-config">Akismet configuration</a> page, and save your API key.
Version: 2.5.6
Author: Automattic
Author URI: http://automattic.com/wordpress-plugins/
License: GPLv2 or later
*/

そして、管理インターフェースのプラグインのページにアクセスすると、プラグインは次のように一覧表示されます。

スクリーンショット-with-shadow.png http://img854.imageshack.us/img854/4526/screenshotwithshadow.png

それはドキュメントの標準的な構文ですか? プラグインファイルを読み取るためにプラグインファイルを実行すると想定していfile_get_contentsますが、Wordpress はそれをどのように解析して、PHP で使用される操作可能な標準化された情報に変換するのでしょうか?

4

1 に答える 1

11

WordPress パーサーについては、 を参照get_plugin_data()してください。wp-admin/includes/plugin.phpより具体的には、抽出はget_file_data()of で行われwp-includes/functions.phpます:

function get_file_data( $file, $default_headers, $context = '' ) {
        // We don't need to write to the file, so just open for reading.
        $fp = fopen( $file, 'r' );

        // Pull only the first 8kiB of the file in.
        $file_data = fread( $fp, 8192 );

        // PHP will close file handle, but we are good citizens.
        fclose( $fp );

        // Make sure we catch CR-only line endings.
        $file_data = str_replace( "\r", "\n", $file_data );

        if ( $context && $extra_headers = apply_filters( "extra_{$context}_headers", array() ) ) {
                $extra_headers = array_combine( $extra_headers, $extra_headers ); // keys equal values
                $all_headers = array_merge( $extra_headers, (array) $default_headers );
        } else {
                $all_headers = $default_headers;
        }

        foreach ( $all_headers as $field => $regex ) {
                if ( preg_match( '/^[ \t\/*#@]*' . preg_quote( $regex, '/' ) . ':(.*)$/mi', $file_data, $match ) && $ma
                        $all_headers[ $field ] = _cleanup_header_comment( $match[1] );
                else
                        $all_headers[ $field ] = '';
        }

WP 以外にも同様の実装があります。多くのリソースを無駄にしないようにプラグイン システムを設計するにはどうすればよいですか?を参照 してください。たとえば。

于 2012-11-15T04:57:45.470 に答える