Widgetize 侧边栏的登录窗口

前面介绍了如何在侧边拦设置登录窗口,其中 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 研究也写的很不错,很大的参考作用。

另外还有插件 Widgetize Anything 可以帮你制作任何的 Widget,大家可以去试下。

Update:2007年7月26日,发现 Small Potato 已经写出了这个 Widget:My Account Widget
哎,白忙了一场,不过也明白了怎么去写 Widget 不过。

热门文章