前面介绍了如何在侧边拦设置登录窗口,其中 Brezeck 由于使用 Widget 不好使用这个插件,于是今天去查了下怎么写 Widget 插件(可能需要代理才能访问),花了1个小时写了这个 Widget 插件,由于时间仓促,可能存在些错误,如果你发现,请向我 report 下。
下载地址:点击下载
下载后,解压缩,把 widget_sidebar_login_panel.php 上传到 plugins 目录下,到管理界面激活即可。当然还要到 Presentation 的 Widgets 设置显示位置。
以下谈谈这个插件的制作过程:
基本的 Widget 语法:
<?php
function widget_myuniquewidget($args) {
extract($args);
?>
<?php echo $before_widget; ?>
<?php echo $before_title . 'My Unique Widget' . $after_title; ?>
Hello, World!
<?php echo $after_widget; ?>
<?php
}
register_sidebar_widget('My Unique Widget', 'widget_myuniquewidget');
?>
上面的代码用用 register_sidebar_widget 注册函数自己之后,输出 widget 标题 ‘My Unique Widget’ 及內容 ‘Hello, World!’。
只要把标题替换成自己的标题,然后把 ‘Hello, World!’ 替换成自己的内容即可。
在查看 sidebar_login.txt 中的代码,它是通过 $user_ID 这个变量判断是否有用户登录来显示不同的 panel,如果用户登录了,则显示一些操作链接,没有用户登录,则显示用户登录界面和注册链接。所以我们把我们判断语句和基本的 Widget 语法穿插起来就可以实现这个 Widget 插件。
然后又从 WordPress Widgets 说明文档上知道:不要在插件导入之后执行任何代码,并使用 plugins_loaded 这个hook。从而得知 add_action 的对象是 plugins_loaded。
综合以上,得到以下代码:
<?php
/*
Plugin Name: Sidebar Login Panel Widget
Plugin URI: http://fairyfish.com/
Description: add a login panel in your sidebar
Version: 1.0
Author: Denis Deng
Author URI: http://fairyfish.com/
*/
function widget_sidebar_login_panel_hook() {
function widget_sidebar_login_panel($args) {
extract($args);
?>
<?php echo $before_widget; ?>
<?php global $user_ID, $user_identity, $user_level ?>
<?php if ( $user_ID ) : ?>
<?php echo $before_title . 'Control panel' . $after_title; ?>
<p>Identified as <strong><?php echo $user_identity ?></strong>.</p>
<ul>
<li><a href="<?php bloginfo('url') ?>/wp-admin/">Dashboard</a></li>
<?php if ( $user_level >= 1 ) : ?>
<li><a href="<?php bloginfo('url') ?>/wp-admin/post-new.php">Write an article</a></li>
<?php endif // $user_level >= 1 ?>
<li><a href="<?php bloginfo('url') ?>/wp-admin/profile.php">Profile and personal options</a></li>
<li><a href="<?php bloginfo('url') ?>/wp-login.php?action=logout&redirect_to=<?php echo urlencode($_SERVER['REQUEST_URI']) ?>">Exit</a></li>
</ul>
<?php elseif ( get_option('users_can_register') ) : ?>
<?php echo $before_title . 'Identification' . $after_title; ?>
<form action="<?php bloginfo('url') ?>/wp-login.php" method="post">
<p>
<input type="text" name="log" id="log" value="<?php echo wp_specialchars(stripslashes($user_login), 1) ?>" size="16" /> <label for="log">User</label><br />
<input type="password" name="pwd" id="pwd" size="16" /> <label for="pwd">Password</label><br /><br />
<input type="submit" name="submit" value="Send" class="button" />
<label for="rememberme"><input name="rememberme" id="rememberme" type="checkbox" checked="checked" value="forever" /> Remember me</label><br />
</p>
<input type="hidden" name="redirect_to" value="<?php echo $_SERVER['REQUEST_URI']; ?>"/>
</form>
<ul>
<li><a href="<?php bloginfo('url') ?>/wp-register.php">Register</a></li>
<li><a href="<?php bloginfo('url') ?>/wp-login.php?action=lostpassword">Recover password</a></li>
</ul>
<?php endif // get_option('users_can_register') ?>
<?php echo $after_widget; ?>
<?php
}
register_sidebar_widget('Sidebar Login Panel Widget', 'widget_sidebar_login_panel');
}
add_action('plugins_loaded', 'widget_sidebar_login_panel_hook');
?>
你愿意的话可以把其中的英文改成中文就可以成为中文版。hoho
参考文档:
这个插件的制作基本参考了 喵爸爸的窩 的 WordPress widget 習作:FIFA CountDown。
How do I develop new widgets?
Crystown 的两篇关于 Widget 研究也写的很不错,很大的参考作用。
WordPress Widget 研究(一)
WordPress Widget 研究(二)
另外还有插件 Widgetize Anything 可以帮你制作任何的 Widget,大家可以去试下。
Update:2007年7月26日,发现 Small Potato 已经写出了这个 Widget:My Account Widget
哎,白忙了一场,不过也明白了怎么去写 Widget 不过。
标签:Widget WordPress 插件
RSS