我正在使用一个插件,试图将人力资源系统与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,可以从插件的管理菜单中进行更改。请参见下面的屏幕截图:
注意:我想避免它,因为:
被认为是不良做法的插件因包含WP负载而被拒绝
最合适的回答,由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\' );