问题描述
WordPress.org 插件库最近有一些补充。最显著的是插件页面和作者简介页面的更改现在显示 authors favorite plugins 。
我想创建一个侧边栏小工具插件,显示插件作者收藏夹。我知道如何使用 API来获取插件统计信息,并且还读取了 DD32’s API Docs,但是我不认为文档存在于配置文件上,或者配置文件 API 是否存在。
我试图使用 wp_remote_get
,我能够从配置文件页面获取 body html,但是没有尝试尝试解析它,因为它似乎是一种混乱的方法。如果我可以使用 XML 或 json 获取配置文件,那将是很棒的。
有没有任何方法,我缺少或一个配置文件 API 存在?
编辑:
好的,我有一个 beta 版本的 github 使用 SimpleHTML Dom 解析器。我不认为我可以得到星级评分,但我很高兴的结果作为第一次没有一个 API 。
WordPress.org 不允许删除内容并禁止您 (通过 @otto) 。所以这是一个没有去,直到公开的 API 被释放。
最佳解决方案
受欢迎的插件已添加到 WordPress.org API 中。 3.5 中有一个新功能,允许您从插件安装程序访问您的收藏夹。
有关如何在核心中使用的信息,请参阅 http://core.trac.wordpress.org/ticket/22002 。
API 允许您检索包含每个插件的对象
-
名称
-
描述
-
作者
-
评分
-
最后更新日期
-
更改日志
-
稳定版
-
使用 wp 版本
检索对象
使用 wp_remote_post 调用 http://api.wordpress.org/plugins/info/1.0/,传递一系列参数,包括’query_plugins’ 和 wp dot org 用来检索收藏夹的操作。
$request = wp_remote_post('http://api.wordpress.org/plugins/info/1.0/', array( 'timeout' => 15, 'body' => array('action' => $action, 'request' => serialize($args))) );
在你有一个漂亮的干净的对象之前,你需要做一些错误处理和其他解析。这是一个示例函数,它将返回一个包含所有插件细节的漂亮干净对象。
function api( $action, $args ) {
if ( is_array( $args ) )
$args = (object) $args;
$request = wp_remote_post('http://api.wordpress.org/plugins/info/1.0/', array( 'timeout' => 15, 'body' => array('action' => $action, 'request' => serialize($args))) );
if ( is_wp_error($request) ) {
$res = new WP_Error('plugins_api_failed', __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the <a href="http://wordpress.org/support/">support forums</a>.' ), $request->get_error_message() );
} else {
$res = maybe_unserialize( wp_remote_retrieve_body( $request ) );
if ( ! is_object( $res ) && ! is_array( $res ) )
$res = new WP_Error('plugins_api_failed', __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the <a href="http://wordpress.org/support/">support forums</a>.' ), wp_remote_retrieve_body( $request ) );
}
return apply_filters( 'c3m_favorite_results', $res, $action, $args );
}
Usage
此示例用法将为您提供一个无序的喜爱的插件列表,以及点组件上的插件链接,作者 uri 的链接和星级。
$api_data = api( 'query_plugins', array( 'user' => 'my_dot_org_username' ) );
$api_plugins = $api_data->plugins;
echo '<ul class="c3m-favorites">';
foreach( $api_plugins as $plugin ) {
$name = $plugin->name; ?>
<li><strong><a target="_blank" href="http://wordpress.org/extend/plugins/<?php%20echo%20$plugin->slug%20?>/"><?php echo esc_html( $name ); ?></a></strong><br>
<div class="star-holder" title="<?php printf( _n( '(based on %s rating)', '(based on %s ratings)', $plugin->num_ratings ), number_format_i18n( $plugin->num_ratings ) ); ?>">
<div class="star star-rating" style="width: <?php echo esc_attr( str_replace( ',', '.', $plugin->rating ) ); ?>px"></div></div>
<em><?php _e('By: ') ?></em> <?php echo links_add_target( $plugin->author, '_blank' ). '<br>'; ?>
</li><?php
}
echo '</ul>';
Result
Widget 屏幕截图从我最喜爱的插件小工具插件:http://wordpress.org/extend/plugins/favorite-plugins-widget/
次佳解决方案
还没。
奥托周三表示,’soon’ 。但是他周末去烧烤,所以’soon’ 可能是’This month.’;)
编辑:
Otto42:@Ipstenu @EricMann 我有代码来做,但尚未部署。一些争论最好的方法。最终会在那里。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。