尝试避免包含wp-load.php

时间:2013-12-15 作者:Omar Mir

我正在使用一个插件,试图将人力资源系统与WordPress连接起来。人力资源系统上有一个XML API,所以我编写了插件来获取数据并将其放入特定于我的插件的WordPress数据库表中。这一切都是通过内置的AJAX等来完成的,但有人要求该人员能够安排一项任务,这样就不会在每次访问网站时查询人力资源系统(职位列表需要显示在网站首页)。然后问题就变成了同步。这是一个IIS环境,因此他们希望使用计划的任务同步站点。我解释了WordPress计划任务API,但他们更喜欢通过自己的基础设施手动同步。

我如何创建代码(本质上是一个php文件),无需调用wp load即可由调度器运行,无需用户名/密码。php?他们的调度程序需要能够单独运行URL,因此这会有点困难。

我试图在没有代码的情况下解释这一点,因为这是一个一般性问题,但在这种情况下,我创建并运行的批量脚本如下所示:

if ( !defined(\'WP_LOAD_PATH\') ) {

    /** classic root path if wp-content and plugins is below wp-config.php */
    $classic_root = dirname(dirname(dirname(dirname(dirname(__FILE__))))) . \'/\' ;
    //echo $classic_root;
    if (file_exists( $classic_root . \'wp-load.php\') )
        define( \'WP_LOAD_PATH\', $classic_root);
    else
        if (file_exists( $path . \'wp-load.php\') )
            define( \'WP_LOAD_PATH\', $path);
        else
            exit("Could not find wp-load.php");
}

// let\'s load WordPress
require_once( WP_LOAD_PATH . \'wp-load.php\');

// If the plugin class is not found, die.
if (!class_exists(\'Aragon_eRH_RSS\')) {
    die(\'Aragon-eRH RSS not installed.\');
}

$core = new Aragon_eRH();
$core->aerh_xml_parser_bulk();
现在他们可以跑了http://site.com/wp-content/plugins/aragon-erh-rss/lib/bulk-sync.php?nonce=thenonce

这将执行同步功能。请注意,需要一个nonce,可以从插件的管理菜单中进行更改。请参见下面的屏幕截图:Admin Screnshot

注意:我想避免它,因为:

被认为是不良做法的插件因包含WP负载而被拒绝

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

Add a rewrite endpoint 为插件提供公共URL-

function wpa_my_endpoint(){
    add_rewrite_endpoint( \'my_api\', EP_ROOT );
}
add_action( \'init\', \'wpa_my_endpoint\' );
在你之后flush rewrite rules, 您将有可供计划程序ping的URL。

http://example.com/my_api/do/something/

然后在parse_query 调用插件操作的操作:

function wpa_parse_query( $query ){
    if( isset( $query->query_vars[\'my_api\'] ) ){
        include( plugin_dir_path( __FILE__ ) . \'stuff/things.php\');
        exit;
    }
}
add_action( \'parse_query\', \'wpa_parse_query\' );

结束

相关推荐

意外删除了wp_options数据库表的active_plugins部分

好吧,所以我很确定我在这里完蛋了,因为我没有数据库备份,但我想我还是问问以防万一。在PhpMyAdmin中,我的意思是只需转到wp\\u options表并清空该表中的active\\u plugins部分,因为插件错误而无法登录。我点击了删除按钮,而不是清空它。是否有任何方法可以手动添加此表的active\\u插件部分?我尝试了修复数据库的方法,但没有成功。