首页 > WordPress > wordpress中自定义widget
201211月13

wordpress中自定义widget

起因

      今天想在博客中添加Google广告,博客模板本身是带广告位的,可是却是写死在了sidebar.php中,代码如下:

<?php if ( ! dynamic_sidebar( 'primary-widget-area' ) ) : ?>
    <div class="block rad">
        <?php $options = get_option('xiaohan_options'); 
if ($options['showcase_title']) : ?>
	    <h3><?php echo($options['showcase_title']); ?></h3>
        <?php endif; ?>
        <?php $options = get_option('xiaohan_options'); 
if ($options['showcase_content']) : ?>
	    <div class="rad_c">
                <?php echo($options['showcase_content']); ?>
            </div>
	<?php endif; ?>
    </div>
<?php endif; ?>

      因为博客是用小工具生成的边栏,所以dynamic_sidebar( ‘primary-widget-area’ ) )为true,也就是程序不会解析广告位这部分代码,而是通过逐个解析小工具中添加的widget来生成数据。所以我们可以通过添加小工具来实现放置广告位的功能,当然这样还有一个优点,就是可以通过小工具方便的调整广告位在边栏上的位置。

解决

       wordpress为自定义widget提供了两种方式,都定义在widgets.php中:
一种是实现WP_Widget这个类,里面提供了很多控制widget的方法,当然我们只需要实现比较主要的几个就OK了,下面是官方提供的基础代码结构:

class My_Widget extends WP_Widget {

	public function __construct() {
		// 构造函数,一些初始化要做的事情
	}

 	public function form( $instance ) {
		// 在admin中可以填写的可选项
	}

	public function update( $new_instance, $old_instance ) {
		// 保存可选项
	}

	public function widget( $args, $instance ) {
		// 在页面上现实的内容
	}

}
register_widget( 'My_Widget' );

      另一种就是使用wp_register_sidebar_widget这个函数,这里是它的官方文档,它有四个参数:

1.id: widget的ID,int、string类型,而且需要唯一
2.name: widget显示的明称
3.output_callback: 当widget被调用时执行的回调函数,该函数返回正式的内容
4.options: 可选,里面可以放一些要传给widget的参数

      有一点要说明的是,第一种方式生成的widget就像自带的一样,可以多次使用,而第二种方式生成的widget只能用一次,如果你将其放到边栏框里,那么在选用区就没有了。
       我这里用的第二种方式,因为边栏上暂时只需要一个广告位,代码如下:

// 首先在主题目录创建一个ads.php文件,里面放生成内容的代码,
// 当然也可以将其写到functions.php中,但是单独出来有利于后期的维护
// ads.php
<?php $options = get_option('xiaohan_options'); 
if ($options['showcase_content']) : ?>
    <div class="rad_c"><?php echo($options['showcase_content']); ?></div>
<?php endif; ?>
// 然后在functions.php中添加下面的代码
if ( ! function_exists( 'ads' ) ) :
        function ads() {
                include(TEMPLATEPATH . '/ads.php');
        }
        wp_register_sidebar_widget( 'ads', __( '广告位', 'ads'), 'ads');
endif;
// 刷新小工具页就能看见了

文章作者: iitshare
本文地址:http://www.iitshare.com/wordpress-custom-widget.html
版权所有 © 转载时必须以链接形式注明作者和原始出处!

更多
本文目前尚无任何评论.

发表评论