我有一个php脚本,它位于wordpress之外,但用WP load加载WP core。php。
这是我的基本页面:
<?php
define(\'WP_USE_THEMES\', false);
global $wp, $wp_query, $wp_the_query, $wp_did_header;
require_once(\'wp-load.php\');
switch_to_blog(1); //make sure we\'re on the top level site
$author_id = 77; //admin
?>
然而,这也会加载插件,其中一个插件(FacetWP)会抛出一个错误。由于我不需要它,我想我应该用以下方法停用它:
function deactivate_plugin_conditional() {
deactivate_plugins(\'facetwp/index.php\');
}
add_action( \'admin_init\', \'deactivate_plugin_conditional\' );
然而,这似乎不起作用,所以我想我应该试试简单的回声:
function myDebug() {
echo "test";
}
add_action( \'init\', \'myDebug\', 10, 1 );
这也不起作用,所以我显然不了解如何使用这些API调用。对此问题的任何帮助都将不胜感激。
最合适的回答,由SO网友:TheDeadMedic 整理而成
这是第22条陷阱-你需要WordPress来使用钩子系统,但是init
将在加载期间已激发(wp-settings.php
确切地说)。
我会创建一个MU“必须使用”插件(wp-content/mu-plugins/any-filename.php
) 对于所有“WordPress之外”的功能,请在开始时使用以下内容:
if ( ! defined( \'LOADED_EXTERNAL\' ) || ! LOADED_EXTERNAL )
return;
/**
* Better technique for temporarily disabling a plugin on-the-fly.
*
* @param array $plugins
* @return array
*/
function wpse_147541_active_plugins( $plugins ) {
if ( $plugin = array_search( \'facetwp/index.php\', $plugins ) )
unset( $plugins[ $plugin ] );
return $plugins;
}
add_filter( \'option_active_plugins\', \'wpse_147541_active_plugins\' );
// More awesome code!
然后在外部文件中:
define( \'LOADED_EXTERNAL\', true );
require \'wp-load.php\'; // No need for globalising variables, they\'ll all be in scope
我提倡使用MU插件的原因是,它们在常规插件之前运行,因此您将有时间拦截加载的“FacetWP”(或任何其他插件)。