version 2.0.0 release.

標準のウィジェットに拡張機能を追加するプラグイン、WordPress Default Widget Extensionのバージョン2.0.0をリリースしました。WordPressのバージョン4.8.1のリリースに伴う動作確認とともに、ログイン状態によってウィジェットの表示/非表示を切り替える機能を追加しました。

広告の表示を制御したい

AdSenseなどの広告のコードをテキストウィジェットを使用して表示しているのですが、ログインして記事を書いている時にプレビューしたりするので、無駄な広告表示はしたくない。ということ、ログインしている時はウィジェットを表示しないように制御しようと思い、プラグインにログイン状態を見て表示にするか非表示にするかを選択できる項目を追加しました。

各ウィジェットに項目追加

ウィジェットの表示/非表示を「ログインしている時」「ログアウトしている時」「状態に関係なく」の3つを選択できるように項目を追加しました。

Pageウィジェットに項目追加
Pageウィジェットに項目を追加した例(Widget display target)

Widget display targetの項目は以下の3つが選択できます。

  • All Users ・・・ 全てのユーザーで表示
  • Logged-in users ・・・ ユーザーがログイン状態の時に表示
  • Logged-out users ・・・ ユーザーがログアウト状態の時に表示

今回のやりたかった事(広告コードを記述したテキストウィジェットをログイン時に非表示にすること)を設定するなら、「Logged-out users」を設定することになります。

ウィジェットの表示制御

項目を追加したところで、ウィジェットの表示制御を。各ウィジェットは、メソッドの継承をしているので(テキストウィジェットだと、class WP_Widget_Text を継承)、その中のwidgetメソッドを以下のように記述しました。(テキストウィジェットの例)

/**
 * Widget Display.
 *
 * @version 2.0.0
 * @since   2.0.0
 * @access  public
 * @param   array $args
 * @param   array $instance
 */
public function widget ( $args, $instance ) {
	// ログインしていて、ウィジェットの設定が「ログアウト」の時、表示しない。 
	if ( is_user_logged_in() && isset( $instance['target'] ) && $instance['target'] === 'logout' ) {
		return;
	}
	// ログアウトしていて、ウィジェットの設定が「ログイン」の時、表示しない。 
	if ( !is_user_logged_in() && isset( $instance['target'] ) && $instance['target'] === 'login' ) {
		return;
	}

	// ウィジェットの表示
	parent::widget( $args, $instance );
}

過去記事でも取り上げた、is_user_logged_in関数でログイン状態を判定します。表示判定を通れば、ウィジェットの表示を行います。これで設定完了。

拡張機能自体の制御

過去のバージョンは、プラグインを有効にしたタイミングで自動的にウィジェットに拡張機能が追加されていました。しかし、場合によっては他のウィジェットに何かしらの機能を追加するようなプラグインやテーマがあった場合にばコンフリクトを起こしてしまう可能性があるなと思い、ウィジェットごとに拡張機能を使うか使わないかを選択できるようにもしました。

Default Widget Extensionプラグインの管理画面

管理画面にメニューを新たに追加して、ウィジェットごとに拡張機能を有効にするか設定できるようにしました。チェックが入っていれば有効ということ。これで完了です。

できた!\(^o^)/
この機能を追加したバージョン2.0.0をリリースしました。是非試してみて下さい。

WordPress Default Widget Extension