我正在开发一个插件,将数据库中的内容导入WordPress。我想做的是在iframe中完成处理,这样输出就会像插件更新程序一样显示给用户。
让我解释一下我的工作流程,以便更好地了解我的需求。
我首先显示一个设置页面以连接到外部数据库然后,我显示一个带有连接详细信息的确认页面。如果连接成功,我会给他们选择导入内容和映射位置的选项到目前为止,一切正常。
接下来,我希望他们单击导入,导入过程将通过一个iFrame在处理数据时输出数据来完成我目前正在使用最后一部分,但我有一些问题。首先,它只在完成时输出数据,而不是在过程中输出数据。其次,我不能使用任何WordPress挂钩来修改插件,因为插件有独特的需求。这就是我遇到麻烦的地方。我直接在插件模板文件中调用iFrame。
插件代码:
add_action(\'mypluginimporter_import_iframe\', array($this, \'displayImportIframe\'));
function displayImportIframe() {
// Display whatever it is you want to show
echo \'<iframe src="\'.wp_nonce_url( PLUGIN_DIRECTORY_URL.\'_processImport.php\', \'mypluginimporter_import_iframe\' ).\'" width="100%" height="600px" frameBorder="0">Browser does not support iframes.</iframe>\';
}
这是视图文件:
<h3 style="margin: 0;"><?php _e(\'Import in Progress\'); ?></h3>
<p class="description"><?php _e(\'This can take a long time depending on the size of the database.\'); ?></p>
<p><?php _e(\'Import status will be outputted below.\'); ?></p>
<?php do_action(\'mypluginimporter_import_iframe\'); ?>
\\u processImport。php文件是:
// Loads the WordPress Environment
$tmpRootPath = dirname(dirname(dirname(dirname( __FILE__ ))));
if (file_exists($tmpRootPath . \'/wp-blog-header.php\')) {
require_once( $tmpRootPath . \'/wp-blog-header.php\' );
} else {
require_once( $tmpRootPath . \'/wordpress/wp-blog-header.php\' );
}
if (isset($_GET[\'_wpnonce\']) && check_admin_referer( \'mypluginimporter_import_iframe\')) {
define( \'IFRAME_REQUEST\', true );
session_start();
// Load the plugin
require_once( dirname(__FILE__).\'/MyPluginImporter.php\' );
MyPluginImporter::process();
} else {
die( _e(\'Invalid request\') );
}
现在我知道这不是正确的方法。我正试图在WordPress中找到实现这一点的最佳方法。我还希望能够使用挂钩,并有其他插件钩到我的插件。我尝试使用plugins\\u加载的钩子,但似乎没有任何效果。
如果需要更多的代码或信息,我将尽可能多地提供。