Então tá vc quer um widget novo em folha para o wordpress ? Acabei criando um porque estou numa jornada de caminhar com minha querida esposa e fazer registros disto no blog, dai pensei : “ora bolas porque não somar as distâncias que estamos percorrendo ?? “.

adicionei um custom field em cada post, chamado “distance” e coloco o total de km percorrido em cada um, veja na imagem abaixo onde fica …

bem esta foi a parte inicial da brincadeira, procurei pelas referências de plugin no wordpress, e o guia basico para a criação de widgets vc acha aqui http://codex.wordpress.org/Widgets_API, só que nesta pagina esqueceram de mencionar que o widget como um plugin que é, precisa de um boco de documentação no início do código senão não é reconhecido e NÃO é instalado (demorei para achar este …) veja aqui o cabeçalho padrão http://codex.wordpress.org/Managing_Plugins#Plugin_Management .

Depois desta parte outra novela foi lembrar de globalizar a variável $wpdb que permite acessar o banco de dados do wordpress, lembre-se de globalizar objetos globais se for usar dentro de uma function … :) ou seja use “global $wpdb; ” antes de tentar acessar $wpdb.

Segue o código completo do widget

<?php


add_action('widgets_init', create_function('', 
	'return register_widget("DistanceCounter");'));

class DistanceCounter extends WP_Widget {

	function __construct(){
		$options = array(
			'description' => 'Distance Counter',
			'name' => 'Distance Counter'
		);
		parent::__construct('DistanceCounter','',$options);
	}

 	public function form( $instance ) {

		extract($instance);
		?>
		<p>
		<label for="">Title: </label>
		<input class="widefat" style="background:#fff;" id="<?php echo $this->get_field_id('title');?>" name="<?php echo $this->get_field_name('title');?>" value="<?php if(isset($title)) echo esc_attr($title);?>"/>
		</p>

		<?php
	}

	public function update( $new_instance, $old_instance ) {
		$instance = $old_instance;
		$instance['title'] = strip_tags( $new_instance['title'] );
		return $instance;
	}

	public function widget( $args, $instance ) {
	
		extract( $args );

		
		$title = apply_filters('widget_title', $instance['title'] );
		
		
		echo $before_widget;

		
		if ( $title ){
			echo $before_title . $title . $after_title;
		}
		
		$distance = array();
		$meta_key = 'distance';
		
		global $wpdb;
		
	
		$distance = $wpdb->get_col(
			$wpdb->prepare(
			"SELECT meta_value FROM $wpdb->postmeta WHERE meta_key = %s", 
				$meta_key));
			
		
		echo '<ul><li> '.array_sum( $distance ). ' km percorridos</li>'
		.'<li><a href="#/category/duplas-aventuras/">veja os relatos</a></li>'
		.'</ul>';
		echo $after_widget;
	}

}

?>