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 研究也写的很不错,很大的参考作用。

WordPress Widget 研究(一)
WordPress Widget 研究(二)

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

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

标签:Widget WordPress 插件

本人擅长Ai、Fw、Fl、Br、Ae、Pr、Id、Ps等软件的安装与卸载,精通CSS、JavaScript、PHP、ASP、C、C++、C#、Java、Ruby、Perl、Lisp、Python、Objective-C、ActionScript、Pascal等单词的拼写,熟悉Windows、Linux、OS X、Android、iOS、WP8等系统的开关机。

通过下面的方式来联系我们:

电邮:138762189@qq.com

联系QQ:点击这里给我发消息

官方站:www.tadke.com

※ ※ 联系请加我的企鹅号 ※※

※ ※技术支持请微信联系站长 ※※

Copyright © 2023 Tadke.com. 琼ICP备20000547号