第三方PHP库放在哪里?

时间:2011-10-21 作者:gou1

我正在开发两个开源插件和一个主题(都是“套件”的一部分),它们都使用相同的第三方PHP库。我想知道在Wordpress中加入它的最佳方式是什么。以下是一些想法:

将其放在其中一个插件中,并要求安装和激活该插件创建一个特殊的“核心”插件,该插件除了包含它之外什么都不做wp-content

4 个回复
最合适的回答,由SO网友:chrisguitarguy 整理而成

如果每个插件/主题都有自己的功能,那么您可能应该在每个主题/插件中删除库。

然后,在需要它之前,只需检查它是否是第三方库中的类或函数。

<?php
if( class_exists( \'SomeClass\' ) )
{
    // require/include here
}

<?php
if( function_exists( \'some_function\' ) )
{
   // Require/include stuff here
}
或者,您可以将第三方库中的每个函数/类/变量/常量包装在一个检查中,以查看它是否存在,如pluggable functions.

如果所有的插件和主题都是相互依赖的,那么将它们分开就没有多大意义,你可能应该重新考虑一下。

SO网友:fuxia

将所有依赖的代码绑定到库插件中的操作。

库插件的示例代码:

add_action( \'plugins_loaded\', \'load_library\', 0 );

function load_library()
{
    # load all the classes and files you need
    # Set up $plugin_url and $plugin_directory

    do_action( \'library_loaded\', $plugin_url, $plugin_directory );
}
在所依赖的代码中,在调用操作之前不执行任何操作:

add_action( \'library_loaded\', \'start_my_code\', 10, 2 );

function start_my_code( $lib_url, $lib_directory )
{
    # do stuff
}
该库处理所有基本部分:检查正确的PHP版本、WordPress常量、多站点设置等。

如果操作\'library_loaded\' 未调用。

SO网友:webaware

chrisguitarguy补充道,如果您的库是PHP类的形式,那么您可以使用spl_autoload_register() 如果这些类还没有被其他插件加载,则加载这些类。然后,您可以将这些库捆绑到插件中并直接使用它们,在适当的时候依赖于类加载器来包含它们。您还可以使用类加载器来加载自己插件的类。

e、 g。

define(\'WPSE_31726_PLUGIN_ROOT\', dirname(__FILE__) . \'/\');

/**
* autoload classes as/when needed
* @param string $class_name name of class to attempt to load
*/
function wpse_31726_autoload($class_name) {
    static $classMap = array (
        \'Wpse31726_Admin\'       => \'class.Wpse31726_Admin.php\',
        \'Wpse31726_CsvLoader\'   => \'class.Wpse31726_CsvLoader.php\',
        \'Wpse31726_Plugin\'      => \'class.Wpse31726_Plugin.php\',
        \'parseCSV\'              => \'lib/parsecsv/parsecsv.lib.php\',
    );

    if (isset($classMap[$class_name])) {
        require WPSE_31726_PLUGIN_ROOT . $classMap[$class_name];
    }
}

// register function for autoloading required classes
spl_autoload_register(\'wpse_31726_autoload\');

SO网友:Geert

自从no official vendor directory exists, 我会选择只包含库的“核心”插件。然后让插件需要该核心插件。

将库放在一个真正的插件中需要用户启用该插件,即使他们可能永远不想使用它的功能。一个单独的核心插件看起来更干净。

将其直接放在wp内容中看起来是最糟糕的解决方案。

结束

相关推荐

Admin Theme customization

我遵循wordpress codex网站上关于通过插件创建管理主题的说明。我激活了插件,但我的样式表没有包含在<head>.. 这是我的代码:add_action( \'admin_init\', \'kd_plugin_admin_init\' ); add_action( \'admin_menu\', \'kd_plugin_admin_menu\' ); function kd_plugin_admin_init() { /* Register

第三方PHP库放在哪里? - 小码农CODE - 行之有效找到问题解决它

第三方PHP库放在哪里?

时间:2011-10-21 作者:gou1

我正在开发两个开源插件和一个主题(都是“套件”的一部分),它们都使用相同的第三方PHP库。我想知道在Wordpress中加入它的最佳方式是什么。以下是一些想法:

将其放在其中一个插件中,并要求安装和激活该插件创建一个特殊的“核心”插件,该插件除了包含它之外什么都不做wp-content

4 个回复
最合适的回答,由SO网友:chrisguitarguy 整理而成

如果每个插件/主题都有自己的功能,那么您可能应该在每个主题/插件中删除库。

然后,在需要它之前,只需检查它是否是第三方库中的类或函数。

<?php
if( class_exists( \'SomeClass\' ) )
{
    // require/include here
}

<?php
if( function_exists( \'some_function\' ) )
{
   // Require/include stuff here
}
或者,您可以将第三方库中的每个函数/类/变量/常量包装在一个检查中,以查看它是否存在,如pluggable functions.

如果所有的插件和主题都是相互依赖的,那么将它们分开就没有多大意义,你可能应该重新考虑一下。

SO网友:fuxia

将所有依赖的代码绑定到库插件中的操作。

库插件的示例代码:

add_action( \'plugins_loaded\', \'load_library\', 0 );

function load_library()
{
    # load all the classes and files you need
    # Set up $plugin_url and $plugin_directory

    do_action( \'library_loaded\', $plugin_url, $plugin_directory );
}
在所依赖的代码中,在调用操作之前不执行任何操作:

add_action( \'library_loaded\', \'start_my_code\', 10, 2 );

function start_my_code( $lib_url, $lib_directory )
{
    # do stuff
}
该库处理所有基本部分:检查正确的PHP版本、WordPress常量、多站点设置等。

如果操作\'library_loaded\' 未调用。

SO网友:webaware

chrisguitarguy补充道,如果您的库是PHP类的形式,那么您可以使用spl_autoload_register() 如果这些类还没有被其他插件加载,则加载这些类。然后,您可以将这些库捆绑到插件中并直接使用它们,在适当的时候依赖于类加载器来包含它们。您还可以使用类加载器来加载自己插件的类。

e、 g。

define(\'WPSE_31726_PLUGIN_ROOT\', dirname(__FILE__) . \'/\');

/**
* autoload classes as/when needed
* @param string $class_name name of class to attempt to load
*/
function wpse_31726_autoload($class_name) {
    static $classMap = array (
        \'Wpse31726_Admin\'       => \'class.Wpse31726_Admin.php\',
        \'Wpse31726_CsvLoader\'   => \'class.Wpse31726_CsvLoader.php\',
        \'Wpse31726_Plugin\'      => \'class.Wpse31726_Plugin.php\',
        \'parseCSV\'              => \'lib/parsecsv/parsecsv.lib.php\',
    );

    if (isset($classMap[$class_name])) {
        require WPSE_31726_PLUGIN_ROOT . $classMap[$class_name];
    }
}

// register function for autoloading required classes
spl_autoload_register(\'wpse_31726_autoload\');

SO网友:Geert

自从no official vendor directory exists, 我会选择只包含库的“核心”插件。然后让插件需要该核心插件。

将库放在一个真正的插件中需要用户启用该插件,即使他们可能永远不想使用它的功能。一个单独的核心插件看起来更干净。

将其直接放在wp内容中看起来是最糟糕的解决方案。

相关推荐

Admin sidebar customization

我的新客户wordpress站点在管理侧栏中没有插件、外观或任何其他默认项。谁能告诉我这些是怎么出现的吗。该站点正在主站点的子目录中运行。它有自己的wordpress安装。主题是前面的rttheme16。提前谢谢。

第三方PHP库放在哪里? - 小码农CODE - 行之有效找到问题解决它

第三方PHP库放在哪里?

时间:2011-10-21 作者:gou1

我正在开发两个开源插件和一个主题(都是“套件”的一部分),它们都使用相同的第三方PHP库。我想知道在Wordpress中加入它的最佳方式是什么。以下是一些想法:

将其放在其中一个插件中,并要求安装和激活该插件创建一个特殊的“核心”插件,该插件除了包含它之外什么都不做wp-content

4 个回复
最合适的回答,由SO网友:chrisguitarguy 整理而成

如果每个插件/主题都有自己的功能,那么您可能应该在每个主题/插件中删除库。

然后,在需要它之前,只需检查它是否是第三方库中的类或函数。

<?php
if( class_exists( \'SomeClass\' ) )
{
    // require/include here
}

<?php
if( function_exists( \'some_function\' ) )
{
   // Require/include stuff here
}
或者,您可以将第三方库中的每个函数/类/变量/常量包装在一个检查中,以查看它是否存在,如pluggable functions.

如果所有的插件和主题都是相互依赖的,那么将它们分开就没有多大意义,你可能应该重新考虑一下。

SO网友:fuxia

将所有依赖的代码绑定到库插件中的操作。

库插件的示例代码:

add_action( \'plugins_loaded\', \'load_library\', 0 );

function load_library()
{
    # load all the classes and files you need
    # Set up $plugin_url and $plugin_directory

    do_action( \'library_loaded\', $plugin_url, $plugin_directory );
}
在所依赖的代码中,在调用操作之前不执行任何操作:

add_action( \'library_loaded\', \'start_my_code\', 10, 2 );

function start_my_code( $lib_url, $lib_directory )
{
    # do stuff
}
该库处理所有基本部分:检查正确的PHP版本、WordPress常量、多站点设置等。

如果操作\'library_loaded\' 未调用。

SO网友:webaware

chrisguitarguy补充道,如果您的库是PHP类的形式,那么您可以使用spl_autoload_register() 如果这些类还没有被其他插件加载,则加载这些类。然后,您可以将这些库捆绑到插件中并直接使用它们,在适当的时候依赖于类加载器来包含它们。您还可以使用类加载器来加载自己插件的类。

e、 g。

define(\'WPSE_31726_PLUGIN_ROOT\', dirname(__FILE__) . \'/\');

/**
* autoload classes as/when needed
* @param string $class_name name of class to attempt to load
*/
function wpse_31726_autoload($class_name) {
    static $classMap = array (
        \'Wpse31726_Admin\'       => \'class.Wpse31726_Admin.php\',
        \'Wpse31726_CsvLoader\'   => \'class.Wpse31726_CsvLoader.php\',
        \'Wpse31726_Plugin\'      => \'class.Wpse31726_Plugin.php\',
        \'parseCSV\'              => \'lib/parsecsv/parsecsv.lib.php\',
    );

    if (isset($classMap[$class_name])) {
        require WPSE_31726_PLUGIN_ROOT . $classMap[$class_name];
    }
}

// register function for autoloading required classes
spl_autoload_register(\'wpse_31726_autoload\');

SO网友:Geert

自从no official vendor directory exists, 我会选择只包含库的“核心”插件。然后让插件需要该核心插件。

将库放在一个真正的插件中需要用户启用该插件,即使他们可能永远不想使用它的功能。一个单独的核心插件看起来更干净。

将其直接放在wp内容中看起来是最糟糕的解决方案。

相关推荐

Media Library Categories

我使用以下内容将类别分配给我的WordPress媒体库(在functions.php):function wptp_add_categories_to_attachments() { register_taxonomy_for_object_type( \'category\', \'attachment\' ); } add_action( \'init\' , \'wptp_add_categories_to_attachments\' ); 每个媒体库项目都