WordPress Snippet

ワードプレスをカスタマイズしよう

ウィジェットが、アクティブかどうかをチェックする。

widget_id(id_base)を取得する

id_baseは、どうやって取得すればいいのか、試行錯誤が始まり、

add_action( 'widgets_init', 'my_check_id_base',11);

function my_check_id_base(){ 
 add_filter( 'widget_title','my_title',10, 3); 
}

function my_title( $title, $instance, $this){
 echo 'this->base is '. $this;
 
 return $title;
}

というコードを書いて、例えばオリジナルのウィジェットでもうまくいくものなのかどうか、検証を始めた

自分で書いた widgetも動かないものがある。上記のコードでもid_baseが拾えない。

仕方なく調べると、

widget_id は、それぞれのWidgetクラスのコンストラクタに

class MyNewWidget extends WP_Widget {

	function MyNewWidget() {
		// Instantiate the parent object
 $widget_ops= array('classname'=> 'oreore_pages', 'description'=> __( 'A list of oreore.') );
		parent::__construct( 'oreore', 'My New Widget Title' ,$widget_ops);
 
 echo 'check: '. $this->id_base;
	}

上記の場合だと、’oreore’が、IDに相当する。

echo 'check: '. $this->id_base;

で、この id_base がoreoreであることが確認できる。

ただ、

Widgets API

のコードサンプルを見るとfalseになっていて、このような場合は、このウィジェットのIDは取れなくなってしまうだろうと思います。

というわけで、id_baseのないウィジェットも普通に存在していそうです。

私の書いた、ウィジェットも見事に、falseになっていた。

ここに、id_baseとしての、キーワードを書くと、アクティブかどうかを判定可能なウィジェットになります。

ウィジェットのアクティブ、非アクティブ判定

ちょっとした疑問を残しつつも、

次のようにすれば、ウィジェットがアクティブであるかどうかが判定できそうです。

add_action( 'widgets_init', 'my_init',11);

function my_init(){
 /*register_
 if(is_active_widget( '', '', 'search')){
 
 echo 'search active;' ; 
 }else{
 
 echo 'search not active';
 }
}

デフォルトウィジェットのid_baseは、以下の通り

categories, archives, calendar, categories, pages, recent-comments, rss,text, tag_cloud, nav_menu

[emulsion_relate_posts]