设计一个使用iframe在管理中处理数据的插件

时间:2015-01-05 作者:Jeremy

我正在开发一个插件,将数据库中的内容导入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加载的钩子,但似乎没有任何效果。

如果需要更多的代码或信息,我将尽可能多地提供。

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

你可以瞄准admin-post.php 通过admin_post_$youraction 挂钩:

此挂钩允许您为自己的自定义GET和POST请求创建自定义处理程序。admin\\u post\\uhook遵循“admin\\u post\\uu$youraction”格式,其中$youraction是GET或post请求的“action”参数。

您可以通过以下方式输出URLadmin_url( \'admin-post.php?action=add_foobar\' ). 然后挂接您的代码:

add_action( \'admin_post_add_foobar\', \'prefix_admin_add_foobar\' );

function prefix_admin_add_foobar() {
    // Handle request then generate response using echo or leaving PHP and using HTML
}
如果您想在运行中更新内容,那么可能AJAX 是您想要的,其工作方式与上面的类似,具有映射到动作挂钩的动作参数。

结束

相关推荐

允许在自定义元框中使用IFRAME

我已经创建了一个名为“Location Map”的自定义元框,并希望为客户端提供一个功能,只需复制粘贴位置的google Map的iframe嵌入代码,即可将其直接显示在前端。该值无法存储。下面是保存元框的代码。/* Save the meta box\'s post metadata. */ function kk_save_location_map( $post_id, $post ) { /* Verify the nonce before proceeding.