HeadSpace2 SEOプラグインでArrayと表示される問題

HeadSpace2 SEOプラグインを使って物件を編集していると不具合が発生しているのを発見した。どんな不具合かというと、下の図のようにHeadSpaceの有力欄に”Array”という文字列が入力されているのである。

headspace2seo_1

“Array”ということは何か複数の要素が登録されているのかと思いvar_dump()関数を使って中身を表示させることにした。

headspace2seo_2


しかし、Arrayの中身は空文字であった。次に、なぜ”Array”という”文字列”が表示されるのだろうか?これを追ってみるとpage_title.phpのedit()メソッドに次のようなコードを発見した。

<tr>
			<th width="120"><?php _e ('Title separator', 'headspace'); ?>:</th>
			<td>
				<input class="text" type="text" name="separator" size="5" value="<?php echo esc_attr( $this->separator ) ?>"/>
				<span class="sub"><?php _e ('Leave blank to use theme default', 'headspace'); ?></span>
			</td>
		</tr>

どうやら、ワードプレスのesc_attr()という関数に配列を渡すと”Array”と表示されてしまうらしい。アクションやフィルタで修正するのは困難なようすだったので、直接プラグインのファイルを弄って直接修正することにした。

対象ファイルはheadspace2/modules/pageディレクトリの次の3つのファイルだ。
・page_title.php
・keywords.php
・description.php

これら3つのファイルに記載されているload()メソッドを下記のように修正することで不具合は解消された。

page_title.php

	function load ($meta) {
		if (isset ($meta['page_title']))
			$this->page_title = $meta['page_title'];
        // ↓↓↓ 追加したコード ↓↓↓
        if($this->page_title == 'Array'){
            $this->page_title = '';
        }else if(is_array($this->page_title) && count($this->page_title) > 1){
            $this->page_title = array_pop($this->page_title);
        }
	}

keywords.php

	function load ($data) {
		if ((!$this->use_tags || !class_exists ('HSM_Tags')) && isset( $data['metakey']) ){
			$this->metakey = $data['metakey'];
        }
        // ↓↓↓ 追加したコード ↓↓↓
        if($this->metakey == 'Array'){
            $this->metakey = '';
        }else if(is_array($this->metakey) && count($this->metakey) > 1){
            $this->metakey = array_pop($this->metakey);
        }
	}

description.php

	function load ($meta) {
		// Extract settings from $meta and $options
		if (isset ($meta['description']))
			$this->description = $meta['description'];
        // ↓↓↓ 追加したコード ↓↓↓
        if($this->description == 'Array'){
            $this->description = '';
        }else if(is_array($this->description) && count($this->description) > 1){
            $this->description = array_pop($this->description);
        }
	}

執筆者:カニ
正月といえばおもち。でもカロリーが高すぎてもう十何年は食べてないなー。

    関連記事一覧

    1. この記事へのコメントはありません。