PHP 如何用于解析主题和插件的注释/标题?

Posted

技术标签:

【中文标题】PHP 如何用于解析主题和插件的注释/标题?【英文标题】:How is PHP used to parse comments / headers for themes and plugins? 【发布时间】:2012-11-03 16:49:03 【问题描述】:

Wordpress 插件和主题在顶部有这样的 cmets:

/**
 * @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
*/

当您在管理界面访问插件页面时,插件列表如下:

screenshot-with-shadow.png http://img854.imageshack.us/img854/4526/screenshotwithshadow.png

这是文档的标准语法吗?我假设它在插件文件上使用file_get_contents 来读取它们,但是 Wordpress 如何将其解析为可在 PHP 中使用的可操作的标准化信息?

【问题讨论】:

PHP 不这样做。 Wordpress 扫描这个注释块(大概是正则表达式)并漂亮地打印它。 @mario - 我认为它实际上以某种方式被解析,因为他们提取了版本号以用于检查更新等。 【参考方案1】:

有关 WordPress 解析器的信息,请参见 wp-admin/includes/plugin.php 中的 get_plugin_data()。 更具体地说,提取发生在wp-includes/functions.phpget_file_data()

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 之外也有类似的实现。示例见How can plugin systems be designed so they don't waste so many resources?。

【讨论】:

@Guerilla,适合您将内容添加到其他用户的帖子...尤其是不相关的内容会掩盖 实际 答案代码。因此,我已回滚您的编辑。如果您觉得帖子中缺少某些重要信息,请向作者添加评论以告知他们,或者添加您自己的帖子以提及它。但是,我应该指出,如果您添加了一个答案来显示您添加到这篇文章中的 cmets,它几乎肯定会被否决,因为它是无关紧要的。

以上是关于PHP 如何用于解析主题和插件的注释/标题?的主要内容,如果未能解决你的问题,请参考以下文章

php 可用于主题和插件日常开发的有用WordPress常量列表。

如何在php中上传和解析CSV文件

php 用于创建图库postype和分类的插件。以及创建一些模板文件以在主题中显示图库帖子类型页面

解析主题标签的文本并使用 php 替换为链接

php 更改WooCommerce单个产品在WOWMALL主题中的位置,用于XL WooCommerce销售触发插件

Bootstrap 不适用于 wordpress 插件