在非WordPress页面中使用操作、挂钩和筛选器

时间:2014-06-04 作者:Chris

我有一个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调用。对此问题的任何帮助都将不胜感激。

1 个回复
最合适的回答,由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”(或任何其他插件)。

结束

相关推荐

未显示设置API设置部分

设置API对我来说总是有点困惑。我正在尝试为我正在开发的子主题添加一个简单的主题选项页面。我想我是做错了什么,阻止了部分的出现。这个settings_fields() 虽然工作正常(正在打印表单中所有隐藏的字段),但节不是。这是我的代码,请帮我排除故障。/******************************** Add Theme Sub Menu Page ********************************/ function sr_theme_op