从外部获取多个站点的插件信息

时间:2015-01-23 作者:leclaeli

我想为我在多个网站上使用的各种插件创建一个仪表板。我可以使用get_plugins() 在每个站点内收集我想要的信息,但如何从外部访问这些数据?这可能吗?最好的方法是什么?

1 个回复
SO网友:kraftner

在其他事情之前:

Be really sure that your endpoint to retrieve this information is reasonably secure. (e.g. using SSL and some authentication like a password) Leaking the information which plugins are installed on a site might offer a point of attack for hackers.


我不会为您提供现成的解决方案,但会概述两种不同的解决方法:推和拉。推送意味着您的站点向仪表板报告其插件,而拉送意味着您的仪表板主动从您的站点获取此信息。

此外,我只想告诉你事情的可湿性粉剂方面。如何处理仪表板的内容是一个完全独立的问题,也可能不适合此网站。

现在我们开始:

使用WP-Cron 您可以安排站点定期执行某些操作。例如,在我们的示例中,我们可以安排一个任务,获取已安装插件的列表并将其报告给您的仪表板(代码大大简化):

// Add the action that does the actual reporting
add_action( \'hourly_report\', \'report_plugins\' );

// Schedule this action hourly
wp_schedule_event( time(), \'hourly\', \'hourly_report\' );

// This function does the actual work
function report_plugins(){

    //Get plugin data
    $plugins = get_plugins();

    //create the data you want to send using $plugins
    $args = ...

    // Post the data to your dashboard
    wp_remote_post( $dashboard_url, $args );
}
另一种选择是创建一个AJAX端点,以便从站点主动获取插件数据。这大致可以遵循这些思路(代码也被大大简化):

// Add the AJAX handler
add_action( \'wp_ajax_nopriv_plugin_data\', \'return_plugin_data\' );

function return_plugin_data(){
     //Again I want to emphasize that you need to ensure the user has the right to access this data.

     //Get plugin data
     $plugins = get_plugins();

     //Encode and return the plugin data
     echo json_encode($plugins);
     die();
}
我希望这能帮助您开始,如果有任何概念上不清楚的地方,请告诉我。

结束