加载最低WordPress环境

时间:2012-04-03 作者:MechEngineer

我为我的网站制作了自己的上传服务,该服务独立于WP,但使用WP提供低级db功能和用户验证。要做到这一点,我包括wp负载。php在我的主脚本(Uploadify)中,但这样做似乎会用不必要的组件填满服务器的内存。多亏了这一点,我在脚本中看到了一个错误,似乎指向了已安装的WP插件。

如何只加载核心WP组件而忽略插件?这可能吗?

4 个回复
SO网友:Tom J Nowell

完全禁用插件意味着您失去了许多优势。

wordpress的发行版更进一步,删除了帖子和链接等,但它们总是落后于wordpress的核心版本,而且往往不会持续很久。

这里有一些可以做的事情

Short Init

将其放入wp配置中。php:

define( \'SHORTINIT\', TRUE );
或者在加载wordpress之前定义它,应该减少加载过程并将其拉回到最小的核心功能。

Secondary lightweight installs

安装第二个wordpress安装,只安装您想要的插件和主题(如果有)。然后配置wp配置。php使用相同的wp内容目录和数据库值。

Backpress

WordPress、原始BBpress和glotpress等都是围绕BackPress库构建的。您可以使用它代替WordPress来完成您的工作,尽管许多API和功能可能缺失或需要重新实现/移植

Option tables

我还要记住,WordPress会将整个选项表加载到内存中,以减少查询量,如果在其中保存任何较大的值,都会影响性能。

Exiting early

您还可以尝试在WordPress加载过程中挂接早期的函数,并在WordPress完成之前退出PHP过程,但我不能建议这样做有多安全。

Selectively loading plugins

There is also this article on selectively loading plugins, 但它确实需要对wordpress核心文件进行黑客攻击

SO网友:bueltge

使用BackPress, 但我有一些小的开发,我通过const使用默认安装和较小的源代码。

请参见wp-settings.php

// Stop most of WordPress from being loaded if we just want the basics.
if ( SHORTINIT )
    return false;
在中将const SHORTINIT设置为truewp-config.php 看看快跑。define( \'SHORTINIT\', TRUE );

以下是您获得的文件:

// All are located in ABSPATH.WPINC
\'/load.php\'
\'/default-constants.php\'
\'/version.php\'
\'/compat.php\'
\'/functions.php\'
\'/class-wp.php\'
\'/class-wp-error.php\'
\'/plugin.php\'
\'/default-filters.php\'
\'/pomo/mo.php\'

// Only Multisite
\'/ms-blogs.php\'
\'/ms-settings.php\'

SO网友:cavameta

用于制作is_user_logged_in()current_user_can() 工作中,我找到了类似的答案here (不能评论)比较与此处的答案相匹配,如下所示:

使用define(\'SHORTINIT\', true) + require(\'wp-load.php\') + 手动包括:

页面加载:1.05 sek - 包含的文件:43 files

比较:使用ONLY require(\'wp-load.php\'):

页面加载:1.35 sek - 包含的文件:419 files

时间差(0.3瑞典克朗)可能与安装和PHP引擎不同,但在一个页面上验证多个请求时,事情会累加起来/@安娜·埃里克森

使用相对调用WP installed dir是一个好主意。来自Wordpress自定义插件“ROOT”,如:

$wordpress = \'../../../wp-load.php\';
然后在我的插件索引中。php:

define(\'SHORTINIT\', true);
include_once $wordpress;

require_once ( ABSPATH . WPINC . \'/class-wp-user.php\' );
require_once ( ABSPATH . WPINC . \'/class-wp-roles.php\' );
require_once ( ABSPATH . WPINC . \'/class-wp-role.php\' );
require_once ( ABSPATH . WPINC . \'/class-wp-session-tokens.php\' );
require_once ( ABSPATH . WPINC . \'/class-wp-user-meta-session-tokens.php\' );
require_once ( ABSPATH . WPINC . \'/formatting.php\' );
require_once ( ABSPATH . WPINC . \'/capabilities.php\' );
//require_once ( ABSPATH . WPINC . \'/query.php\' ); // - might be useful
require_once ( ABSPATH . WPINC . \'/user.php\' );
require_once ( ABSPATH . WPINC . \'/meta.php\' );

wp_cookie_constants();

require_once ( ABSPATH . WPINC . \'/vars.php\' );
require_once ( ABSPATH . WPINC . \'/kses.php\' );
require_once ( ABSPATH . WPINC . \'/rest-api.php\' );
require_once ( ABSPATH . WPINC . \'/pluggable.php\' );
在此之后,用户验证对我起作用。感谢@Anna Ericson原始代码的最后一句话:

对于其他任务,运行一个或两个请求,跟踪其他需要的文件might not be worth 0.3 sek. 跳过SHORTINIT 恒定和手动杂乱。

SO网友:Tomas Buteler

你试过了吗define(\'SHORTINIT\', true);? 我还没有亲自测试过它,但它似乎只加载了WP核心的很少几个方面,同时保留了足够的功能,尤其是如果您只想处理数据库的话。

结束

相关推荐

管理AJAX请求返回0,且DIE()

因此,我将此配置用于管理区域中的AJAX调用(like this):add_action( \'admin_head\', \'ajaxPerNgg\' ); function ajaxPerNgg(){ ?> <script type=\"text/javascript\" > jQuery(document).ready(function() { jQuery(\"#message\").remove(); jQuer