升级插件和主题到2.7

0条评论

引言

WordPress重大版本发布后,或许你会发现你的主题和插件都已不能正常运行,它们由于失去赖以存在的基础可能彻底遭到损坏,但或许你稍作升级或修改后,它们又可正常运作了。

这篇文章是升级插件和主题系列文章之一。它涵盖了2.6和2.7版本的差别,而你所要做的正是使插件和主题能够在2.7上运行。

如果你使用的主题和插件是他人开发的,可通过以下途径获取信息:

对于主题或插件开发者,如果你已修改或定制自己的主题,这篇文章会帮助你把主题和插件升级到2.7。如果你的主题或插件已被许多人使用,升级后,你还可把它添加到以上的兼容列表中以供用户继续使用。

 

修改主题或插件

WordPress的以下更改可能会影响你的主题或插件: 

 

主题

 

新增评论显示功能 - 线程化,分页等

WordPress 2.7版本的评论已新增许多内置功能,如线程化,嵌套,分页等,且系统默认你使用的主题会支持这些新功能。如果你的主题不支持这些功能,请查看新增评论显示。 

 

日志等级

WordPress 2.7还新增了日志等级这一函数,它使主题作者设计更加方便简单。这个函数就是post_class()。

若在主题中使用这个函数,只要把它添加到主循环中的恰当位置就可以了。许多主题都会使用DIV标签压缩日志,这些DIV标签就包含了class="post"函数或其它类似函数。可直接调用post_class ,如:

<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>

post_class()会为div输出class="whatever" 。它包括几个不同的属性值类别:post, hentry (hAtom microformat页面), category-X (X是日志类别的缩略名), 和tag-X (X是日志标签的缩略名)。 它也为置顶日志新增了置顶属性值。这使主题开发者可以更容易地给主题的不同部分进行设计。

也可使用post_class 添加自己的等级:

<?php post_class('special'); ?>

这会把 "special" 添加到等级列表中。你可以把其与其它等级分开,也可把设成字符串数组,其中每个数组包含一个等级,这更适用于复杂的代码。

若要在主循环之外显示日志,可使用post_class函数的第二个参数——日志ID。这样日志的等级就会根据日志而定。

<?php post_class('',$post_id); ?>

 

登出网站

2.7新增了模板标签wp_logout_url ,它为登出博客提供随机URL。如果主题使用了诸如 /wp-login.php?action=logout这样的登出链接,代码将被更新为wp_logout_url。WordPress的默认和经典主题comments.php and comments-popup.php模板就是这个标签的最好应用。

如果主题的登出URL没有使用wp_logout_url,系统将显示You are attempting to log out of example.com. Please try again。(你在尝试登出example.com,请再试一次。)

 

排除置顶日志

2.7版本可设置置顶日志。如果使用日志查询循环,系统也会显示置顶日志。但是,如果不想包括置顶日志,可直接调用caller_get_posts=1到查询字串。

 

显示置顶日志等级

Find:

<div class="post" id="post-<?php the_ID(); ?>">

an add "<?php sticky_class(); ?>" as so:

<div class="post<?php sticky_class(); ?>" id="post-<?php the_ID(); ?>">

如上所述,如果使用post_class()函数就不用这么麻烦了。最好使用post_class()函数,但如果不得不手动输入,系统就会显示日志置顶状态。

 

使用特定的标题栏,页脚,侧边栏模板

已修改的模板层次可设置特定的标题栏,页脚和侧边栏了。如果指定了名称,标题栏(或页脚)也会应用这个名称。和以前版本一样,如果主题没有header.php (或 footer.php)文件,系统会自动使用默认主题的标题栏(或页脚)。

  • get_header('myheader') 会包括 header-myheader.php
  • get_footer('myfooter') 会包括 footer-myfooter.php
  • get_sidebar('mysidebar') 会包括 sidebar-mysidebar.php

 

模板标签的搜索表单

WordPress 2.7新增了搜索表格模板标签 tag get_search_form()。 为了和以往主题兼容,这个标签会首先查看主题文件夹是否存在searchform.php 文件。如果存在,它会使用这个文件,如果没有,它就会生成HTML文件。

这个标签也可和get_search_form 过滤器一起过滤,这样插件或主题作者就可更改搜索表单的结构。

 

插件

 

卸载插件API

WordPress 2.7新增了插件卸载工具,删除插件时,它会自动卸载插件。卸载插件有两种方法。

最简单的方法是在插件基本目录中创建名为uninstall.php的文件,并把卸载代码存储其中。用户选择”删除”插件时,这些文件就会自动执行。从理论上来说,只有在其中添加代码就可以删除插件创建的选项或数据库信息。由于这个文件是在WordPress下创建的,因此在此可以访问到所有的WordPress函数。

另一种方法是创建一个用于执行卸载的行为钩子,并使用register_uninstall_hook()函数将这个钩子注册进WordPress。但这种方法比较复杂,更适合插件开发高手使用。

 

新增和已删除的管理钩子

2.7的管理面板焕然一新,其中,许多插件钩子(行为和过滤器)也有所变动。请看以下列表(可能并不全面):

//TODO

 

设置页面新增项

WordPress 2.7新增了API以在管理或设置面板添加其它选项。这意味着用户在管理面板就可直接添加新的选项,而不用另外创建一个页面。函数add_settings_section(), add_settings_field(), register_setting(), unregister_setting()将执行这一功能,它们位于 wp-admin/includes/plugin.php (也可查看注册选项下面的区域)。

 

管理标题栏

由于管理页面中用于添加新选项的标题栏在2.7已被取消,因此侧边栏菜单行为("sidemenu" action)也已被删除。

可使用'favorite_actions' 过滤器来设置新的 "收藏夹"菜单 (查看wp-admin/includes/template.php中靠近底部的函数 favorite_actions()  以了解如何使用)。

 

插件列表页面

在插件页面添加新条目可使用两个过滤器:

  • plugin_action_links_{$plugin} 过滤器 -- 可给插件的行为栏添加新行为,如:
$plugin = plugin_basename(__FILE__); 
add_filter("plugin_action_links_$plugin", 'my_plugin_actlinks' ); 
function my_plugin_actlinks( $links ) { 
 // Add a link to this plugin's settings page
 $settings_link = '<a href="whatevertheurlis">Settings</a>'; 
 array_unshift( $links, $settings_link ); 
 return $links; 
}
  • after_plugin_row_{$plugin_file} 过滤器 - 可在插件信息末尾添加其它信息,但这只适用于你的插件,因此它只会运行一次。

 

注册插件选项

如果插件使用了“简易”方法保存选项(详细信息请查看创建选项页面),那么在WordPress以后的版本中(和当前的WordPress MU版本中),为了使其有效,这些选项还需要重新注册。

在WordPress中,函数register_setting()和unregister_setting()用来执行这一操作;而add_option_update_handler() 和 remove_option_update_handler()则是当前WordPressMU中的包装函数(新别名也将很快应用到 WPMU中)。

虽然目前的2.7并不要求必须使用这些函数,但以后的版本中,所有使用options.php处理日志来进行选项升级的插件都要使用这些函数。因此,为了能和以后的版本兼容,现在就可以修改插件以使其能使用这个函数啦!

这些函数有以下几个功能:

  • 设置优良名单(Whitelist)选项
  • 注册校订回调
  • 在WPMU中,它们能阻止管理员(即在WPMU下允许所有人创建博客的用户,但未必可信任)修改隐私选项如rewrite_rules 或active_plugins。

使用:(更多信息请阅读wp-admin/includes/plugin.php

  • 为选项创建一个群组名,如'some-options'
  • 在admin_init 行为中为要更新的选项输入以下内容:
register_setting('some-options', 'option-1', 'intval');
  • 在选项更新表中输入:
settings_fields('some-options');

options.php会检查settings_fields()输出的所有隐藏域,包括随机数(nonce)。如果使用新的API,就不需要配置page_options隐藏域了。

如果使用了check_admin_referer() 函数来保护表格,就需要更改它的参数。如果使用settings_fields('some-options')输出随机数(nonce),可使用以下参数:

check_admin_referer('some-options-options');

接下来WordPress会检查随机数(nonce)是否正确。

注意末尾带有'-options'!